diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index 6b286b68b..cf82dafb8 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -4,24 +4,29 @@ on: branches: - dev - releases + - 'release-[0-9]+.*' tags: - '[0-9]+.*' pull_request: branches: - dev + - releases + - 'release-[0-9]+.*' workflow_dispatch: + env: - publish_pre_dev_labels: '["Beep6581:ladenoise_improv"]' + publish_pre_dev_labels: '[]' + jobs: build: runs-on: ubuntu-20.04 strategy: fail-fast: false matrix: - build_type: [release] + build_type: [release, debug] steps: - name: Checkout source - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 0 @@ -30,7 +35,41 @@ 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 adwaita-icon-theme-full + + - name: Install Exiv2 + run: | + EXIV2_VERSION='v0.28.1' + 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: Install Librsvg required min. version + # Required min. version is not available for Ubuntu 20.04 LTS (but is for 22.04 LTS) so needs to be built manually + run: | + LIBRSVG2_VERSION='2.52.2' + echo "Cloning Librsvg2 $LIBRSVG2_VERSION." + git clone --depth 1 --branch "$LIBRSVG2_VERSION" https://gitlab.gnome.org/GNOME/librsvg.git ext/librsvg2 + + echo "Installing required dependencies with apt." + DEBIAN_FRONTEND=noninteractive sudo apt install -y rustc cargo gtk-doc-tools libgirepository1.0-dev + + echo "Updating PATH." + export PATH="$PATH:/usr/lib/x86_64-linux-gnu/gdk-pixbuf-2.0" + + echo "Configuring build." + cd ext/librsvg2 + sh autogen.sh + + echo "Building and installing." + sudo make install - name: Configure build run: | @@ -88,9 +127,30 @@ jobs: echo "Copying Lensfun database to the build directory." cp -R ~/.local/share/lensfun/updates/* build/AppDir/usr/share/lensfun/ + - name: Include Adwaita icon theme (partial) + run: | + mkdir build/AppDir/usr/bin/icons/Adwaita + icons_dir=('actions' 'devices' 'mimetypes' 'places' 'status' 'ui' 'devices') + for dir in "${icons_dir[@]}"; do + find_res=$(find /usr/share/icons/Adwaita -name "${dir}" -type d) + if [ -z "$find_res" ] + then + echo "-Warning: Icons folder '"${dir}"' not found in Adwaita theme." + else + new_dir=($(echo "$find_res" | awk -F/ '{print $(NF-1)"/"$NF}')) + for d in "${new_dir[@]}"; do + echo "-Copying '"${d}"' into 'AppDir/usr/bin/icons/Adwaita'." + mkdir -p "build/AppDir/usr/bin/icons/Adwaita/${d}" + cp -R "/usr/share/icons/Adwaita/${d}/." "build/AppDir/usr/bin/icons/Adwaita/${d}" + done + fi + done + echo "-Copying 'index.theme' into 'AppDir/usr/bin/icons/Adwaita'." + cp /usr/share/icons/Adwaita/index.theme build/AppDir/usr/bin/icons/Adwaita + - 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 +173,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 +203,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..f57786098 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -2,10 +2,16 @@ name: "CodeQL" on: push: - branches: [ 'dev' ] + branches: + - dev + - releases + - 'release-[0-9]+.*' pull_request: # The branches below must be a subset of the branches above - branches: [ 'dev' ] + branches: + - dev + - releases + - 'release-[0-9]+.*' schedule: - cron: '56 5 * * 1' @@ -35,7 +41,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..8755f7c66 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -4,15 +4,19 @@ on: branches: - dev - releases + - 'release-[0-9]+.*' tags: - '[0-9]+.*' pull_request: branches: - dev + - releases + - 'release-[0-9]+.*' workflow_dispatch: + jobs: build: - runs-on: macos-11 + runs-on: macos-12 steps: - uses: actions/checkout@v3 - name: Install dependencies @@ -21,7 +25,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 e01e4bd75..875dce60e 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -4,17 +4,22 @@ on: branches: - dev - releases + - 'release-[0-9]+.*' tags: - '[0-9]+.*' pull_request: branches: - dev + - releases + - 'release-[0-9]+.*' 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 +29,7 @@ jobs: build_type: [release, debug] steps: - name: Checkout source - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 0 @@ -33,25 +38,26 @@ jobs: with: location: C:\msys2 update: true + msystem: MINGW64 install: | - gzip git intltool - mingw-w64-x86_64-gcc - mingw-w64-x86_64-make - mingw-w64-x86_64-pkg-config - mingw-w64-x86_64-cmake - mingw-w64-x86_64-ninja - mingw-w64-x86_64-gtkmm3 - mingw-w64-x86_64-lcms2 - mingw-w64-x86_64-fftw - mingw-w64-x86_64-lensfun - mingw-w64-x86_64-libiptcdata + pacboy: | + cc:p + pkgconf:p + cmake:p + ninja:p + gtkmm3:p + lcms2:p + fftw:p + lensfun:p + libiptcdata:p + exiv2:p - 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 @@ -60,11 +66,6 @@ jobs: echo "Cache suffix is '$CACHE_SUFFIX'." fi - echo "Making build directory." - mkdir build - echo "Changing working directory to the build directory." - cd build - echo "Running CMake configure." cmake \ -G "Ninja" \ @@ -72,21 +73,18 @@ jobs: -DCACHE_NAME_SUFFIX="$CACHE_SUFFIX" \ -DPROC_TARGET_NUMBER="1" \ -DLENSFUNDBDIR="share/lensfun" \ - .. + -S . -B build echo "Recording filtered ref name." echo "REF_NAME_FILTERED=$REF_NAME_FILTERED" >> "$(cygpath -u $GITHUB_ENV)" - name: Build RawTherapee - working-directory: ./build run: | echo "Running CMake install." - cmake --build . --target install + cmake --build build --target install - name: Include Lensfun run: | - echo "Patching lensfun-update-data script." - sed -i 's/HTTPError\(, ValueError\)/URLError\1/' $(which lensfun-update-data) echo "Updating Lensfun database." lensfun-update-data echo "Creating Lensfun directory in the build directory." @@ -98,6 +96,10 @@ jobs: run: | echo "Listing shared library dependencies." ldd "./build/${{matrix.build_type}}/rawtherapee.exe" + echo "Finding DLLs to include." + DLLS=($(ldd "./build/${{matrix.build_type}}/rawtherapee.exe" | grep '/mingw64/bin/' | awk '{print($1)'})) + echo "Required DLLs are: ${DLLS[*]}" + echo "Getting workspace path." export BUILD_DIR="$(pwd)/build/${{matrix.build_type}}" echo "Build directory is '$BUILD_DIR'." @@ -110,68 +112,7 @@ jobs: "gdbus.exe" \ "gspawn-win64-helper.exe" \ "gspawn-win64-helper-console.exe" \ - "libatk-1.0-0.dll" \ - "libatkmm-1.6-1.dll" \ - "libbrotlicommon.dll" \ - "libbrotlidec.dll" \ - "libbz2-1.dll" \ - "libcairo-2.dll" \ - "libcairo-gobject-2.dll" \ - "libcairomm-1.0-1.dll" \ - "libdatrie-1.dll" \ - "libdeflate.dll" \ - "libepoxy-0.dll" \ - "libexpat-1.dll" \ - libffi-*.dll \ - "libfftw3f-3.dll" \ - "libfftw3f_omp-3.dll" \ - "libfontconfig-1.dll" \ - "libfreetype-6.dll" \ - "libfribidi-0.dll" \ - "libgcc_s_seh-1.dll" \ - "libgdk_pixbuf-2.0-0.dll" \ - "libgdk-3-0.dll" \ - "libgdkmm-3.0-1.dll" \ - "libgio-2.0-0.dll" \ - "libgiomm-2.4-1.dll" \ - "libglib-2.0-0.dll" \ - "libglibmm-2.4-1.dll" \ - "libgmodule-2.0-0.dll" \ - "libgobject-2.0-0.dll" \ - "libgomp-1.dll" \ - "libgraphite2.dll" \ - "libgtk-3-0.dll" \ - "libgtkmm-3.0-1.dll" \ - "libharfbuzz-0.dll" \ - "libiconv-2.dll" \ - "libintl-8.dll" \ - "libjbig-0.dll" \ - "libjpeg-8.dll" \ - "liblcms2-2.dll" \ - "liblensfun.dll" \ - "libLerc.dll" \ - "liblzma-5.dll" \ - "libpango-1.0-0.dll" \ - "libpangocairo-1.0-0.dll" \ - "libpangoft2-1.0-0.dll" \ - "libpangomm-1.4-1.dll" \ - "libpangowin32-1.0-0.dll" \ - "libpcre2-8-0.dll" \ - "libpixman-1-0.dll" \ - "libpng16-16.dll" \ - "librsvg-2-2.dll" \ - "libsharpyuv-0.dll" \ - "libsigc-2.0-0.dll" \ - "libstdc++-6.dll" \ - "libsystre-0.dll" \ - "libthai-0.dll" \ - "libtiff-6.dll" \ - "libtre-5.dll" \ - "libwebp-7.dll" \ - "libwinpthread-1.dll" \ - "libxml2-2.dll" \ - "libzstd.dll" \ - "zlib1.dll" \ + ${DLLS[*]} \ "$BUILD_DIR" cd - @@ -255,14 +196,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..dbb6d72ad 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,8 @@ .settings .directory .vscode +.DS_Store +.idea CMakeCache.txt CMakeFiles @@ -15,6 +17,7 @@ cmake_install.cmake install_manifest.txt build* +cmake-build* Build* Debug RelWithDebInfo @@ -23,7 +26,6 @@ Release rtdata/rawtherapee.desktop rtengine/librtengine.a -rtexif/librtexif.a rtgui/config.h rtgui/version.h rtgui/rawtherapee @@ -43,4 +45,3 @@ clean *.tar *.xz *.zip - diff --git a/AUTHORS.txt b/AUTHORS.txt index 374a7935b..f9aafd927 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -8,6 +8,7 @@ Development contributors, in last name alphabetical order: Harald Aust Roel Baars Richard E Barber + Dániel Battyányi Martin Burri Pierre Cabrera Javier Celaya @@ -20,6 +21,7 @@ Development contributors, in last name alphabetical order: Rüdiger Franke Jean-Christophe Frisch Ilias Giarimis + Scott Gilbertson Alberto Griggio Steve Herrell Philippe Hupé diff --git a/CMakeLists.txt b/CMakeLists.txt index 92888424c..051d215e2 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") @@ -462,13 +462,9 @@ endif() # Check for libraries: find_package(PkgConfig) -if(WIN32) - pkg_check_modules(GTK REQUIRED gtk+-3.0>=3.22.24) - pkg_check_modules(GTKMM REQUIRED gtkmm-3.0>=3.22) -else() - pkg_check_modules(GTK REQUIRED gtk+-3.0>=3.16) - pkg_check_modules(GTKMM REQUIRED gtkmm-3.0>=3.16) -endif() +# Gtk version shall be greater than 3.24.3 for fixed Hi-DPI support +pkg_check_modules(GTK REQUIRED gtk+-3.0>=3.24.3) +pkg_check_modules(GTKMM REQUIRED gtkmm-3.0>=3.24) if(GTK_VERSION VERSION_GREATER "3.24.1" AND GTK_VERSION VERSION_LESS "3.24.7") if(GTK_VERSION VERSION_EQUAL "3.24.5") @@ -495,7 +491,32 @@ pkg_check_modules(GTHREAD REQUIRED gthread-2.0>=2.48) pkg_check_modules(GOBJECT REQUIRED gobject-2.0>=2.48) 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) +pkg_check_modules(RSVG REQUIRED librsvg-2.0>=2.52) + +# 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) @@ -513,6 +534,10 @@ pkg_check_modules(LCMS REQUIRED lcms2>=2.6) pkg_check_modules(EXPAT REQUIRED expat>=2.1) pkg_check_modules(FFTW3F REQUIRED fftw3f) +# By default little-cms2 uses 'register' keyword which is deprecated and removed in c++17 +# This definition forces not to use it +add_definitions("-DCMS_NO_REGISTER_KEYWORD") + #Set the appropriate FFTW flags on macOS if(APPLE AND OPTION_OMP) set(EXTRA_LIB "-L${LOCAL_PREFIX}/lib -lfftw3f_omp -lfftw3f -lm") @@ -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/RELEASE_NOTES.txt b/RELEASE_NOTES.txt index 510847c8a..b4d4a3523 100644 --- a/RELEASE_NOTES.txt +++ b/RELEASE_NOTES.txt @@ -1,4 +1,4 @@ -RAWTHERAPEE 5.9-dev RELEASE NOTES +RAWTHERAPEE 5.10-dev RELEASE NOTES This is a development version of RawTherapee. We update the code almost daily. Every few months, once enough changes have accumulated and the code is stabilized, we make a new official release. Every code change between these releases is known as a "development" version, and this is one of them. @@ -22,7 +22,7 @@ In order to use RawTherapee efficiently you should know that: -NEW FEATURES SINCE 5.9 +NEW FEATURES SINCE 5.10 - TODO - Added or improved support for cameras, raw formats and color profiles: @@ -32,12 +32,12 @@ NEW FEATURES SINCE 5.9 NEWS RELEVANT TO PACKAGE MAINTAINERS -New since 5.9: +New since 5.10: - TODO In general: - To get the source code, either clone from git or use the tarball from https://rawtherapee.com/shared/source/ . Do not use the auto-generated GitHub release tarballs. -- Requires GTK+ version >=3.16, though >=3.22.24 is recommended. +- Requires GTK+ version >=3.22.24 in Windows, else >=3.16 (though >=3.22.24 is recommended). - GTK+ versions 3.24.2 - 3.24.6 have an issue where combobox menu scroll-arrows are missing when the combobox list does not fit vertically on the screen. As a result, users would not be able to scroll in the following comboboxes: Processing Profiles, Film Simulation, and the camera and lens profiles in Profiled Lens Correction. - RawTherapee 5 requires GCC-4.9 or higher, or Clang. - Do not use -ffast-math, it will not make RawTherapee faster but will introduce artifacts. 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/com.rawtherapee.RawTherapee.appdata.xml b/com.rawtherapee.RawTherapee.appdata.xml index 7e4c0b3a5..7e30dc2f8 100644 --- a/com.rawtherapee.RawTherapee.appdata.xml +++ b/com.rawtherapee.RawTherapee.appdata.xml @@ -22,6 +22,7 @@ https://rawpedia.rawtherapee.com/Main_Page#Localization rawtherapee.desktop + diff --git a/rtdata/CMakeLists.txt b/rtdata/CMakeLists.txt index eb4b5e934..e14862d7f 100644 --- a/rtdata/CMakeLists.txt +++ b/rtdata/CMakeLists.txt @@ -3,14 +3,11 @@ file(GLOB SOUNDFILES "sounds/*") file(GLOB INPUTICCFILES "iccprofiles/input/*") file(GLOB OUTPUTICCFILES "iccprofiles/output/*") file(GLOB DCPFILES "dcpprofiles/*") -file(GLOB FONTS "fonts/*") set(PROFILESDIR "profiles") set(THEMEDIR "themes") - -file(GLOB IMG_SVG LIST_DIRECTORIES false "images/svg/*") -file(GLOB IMG_PNG LIST_DIRECTORIES false "images/png/*") -file(GLOB IMG_ICO LIST_DIRECTORIES false "images/*") +set(ICONTHEMEDIR "icons") +set(IMAGESDIR "images") if(WIN32) set(OPTIONSFILE "options/options.win") @@ -27,14 +24,7 @@ endif() if(UNIX) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/rawtherapee.desktop.in" "${CMAKE_CURRENT_BINARY_DIR}/rawtherapee.desktop") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/rawtherapee.desktop" DESTINATION ${DESKTOPDIR}) - install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/images/png/rawtherapee-logo-16.png" DESTINATION "${ICONSDIR}/hicolor/16x16/apps" RENAME rawtherapee.png) - install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/images/png/rawtherapee-logo-24.png" DESTINATION "${ICONSDIR}/hicolor/24x24/apps" RENAME rawtherapee.png) - install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/images/png/rawtherapee-logo-32.png" DESTINATION "${ICONSDIR}/hicolor/32x32/apps" RENAME rawtherapee.png) - install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/images/png/rawtherapee-logo-48.png" DESTINATION "${ICONSDIR}/hicolor/48x48/apps" RENAME rawtherapee.png) - install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/images/png/rawtherapee-logo-64.png" DESTINATION "${ICONSDIR}/hicolor/64x64/apps" RENAME rawtherapee.png) - install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/images/png/rawtherapee-logo-128.png" DESTINATION "${ICONSDIR}/hicolor/128x128/apps" RENAME rawtherapee.png) - install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/images/png/rawtherapee-logo-256.png" DESTINATION "${ICONSDIR}/hicolor/256x256/apps" RENAME rawtherapee.png) - install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/images/rt-logo.svg" DESTINATION "${ICONSDIR}/hicolor/scalable/apps" RENAME rawtherapee.svg) + install(DIRECTORY "${ICONTHEMEDIR}/hicolor" DESTINATION "${ICONSDIR}") endif() install(FILES ${LANGUAGEFILES} DESTINATION "${DATADIR}/languages") @@ -43,16 +33,11 @@ install(FILES ${INPUTICCFILES} DESTINATION "${DATADIR}/iccprofiles/input") install(FILES ${OUTPUTICCFILES} DESTINATION "${DATADIR}/iccprofiles/output") install(FILES ${DCPFILES} DESTINATION "${DATADIR}/dcpprofiles") install(FILES ${OPTIONSFILE} DESTINATION "${DATADIR}" PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ RENAME options) -if(WIN32) - install(FILES ${FONTS} DESTINATION "${DATADIR}/fonts") -endif() install(DIRECTORY "${PROFILESDIR}" DESTINATION "${DATADIR}" FILES_MATCHING PATTERN "*.pp3") install(DIRECTORY "${THEMEDIR}" DESTINATION "${DATADIR}") - -install(FILES ${IMG_SVG} DESTINATION "${DATADIR}/images") -install(FILES ${IMG_PNG} DESTINATION "${DATADIR}/images") -install(FILES ${IMG_ICO} DESTINATION "${DATADIR}/images") +install(DIRECTORY "${ICONTHEMEDIR}/rawtherapee" DESTINATION "${DATADIR}/${ICONTHEMEDIR}") +install(DIRECTORY "${IMAGESDIR}" DESTINATION "${DATADIR}") if(APPLE) # CMake escapes first item quote character. Do not remove 'DUMMY_VARIABLE=' diff --git a/rtdata/dcpprofiles/CANON EOS 250D.dcp b/rtdata/dcpprofiles/CANON EOS 250D.dcp new file mode 100644 index 000000000..7791eb0cb Binary files /dev/null and b/rtdata/dcpprofiles/CANON EOS 250D.dcp differ diff --git a/rtdata/dcpprofiles/CANON EOS 800D.dcp b/rtdata/dcpprofiles/CANON EOS 800D.dcp new file mode 100644 index 000000000..23bec089c Binary files /dev/null and b/rtdata/dcpprofiles/CANON EOS 800D.dcp differ diff --git a/rtdata/dcpprofiles/CANON EOS M50.dcp b/rtdata/dcpprofiles/CANON EOS M50.dcp new file mode 100644 index 000000000..38e0e7859 Binary files /dev/null and b/rtdata/dcpprofiles/CANON EOS M50.dcp differ diff --git a/rtdata/dcpprofiles/CANON POWERSHOT G5 X MARK II.dcp b/rtdata/dcpprofiles/CANON POWERSHOT G5 X MARK II.dcp new file mode 100644 index 000000000..d6a0b3b1e Binary files /dev/null and b/rtdata/dcpprofiles/CANON POWERSHOT G5 X MARK II.dcp differ diff --git a/rtdata/dcpprofiles/FUJIFILM X-A7.dcp b/rtdata/dcpprofiles/FUJIFILM X-A7.dcp new file mode 100644 index 000000000..8ecaf3439 Binary files /dev/null and b/rtdata/dcpprofiles/FUJIFILM X-A7.dcp differ diff --git a/rtdata/dcpprofiles/FUJIFILM X-E3.dcp b/rtdata/dcpprofiles/FUJIFILM X-E3.dcp new file mode 100644 index 000000000..0235ce96b Binary files /dev/null and b/rtdata/dcpprofiles/FUJIFILM X-E3.dcp differ diff --git a/rtdata/dcpprofiles/FUJIFILM X-S10.dcp b/rtdata/dcpprofiles/FUJIFILM X-S10.dcp new file mode 100644 index 000000000..685f58e39 Binary files /dev/null and b/rtdata/dcpprofiles/FUJIFILM X-S10.dcp differ diff --git a/rtdata/dcpprofiles/NIKON D3300.dcp b/rtdata/dcpprofiles/NIKON D3300.dcp new file mode 100644 index 000000000..ed6ddf808 Binary files /dev/null and b/rtdata/dcpprofiles/NIKON D3300.dcp differ diff --git a/rtdata/dcpprofiles/NIKON Z 5.dcp b/rtdata/dcpprofiles/NIKON Z 5.dcp new file mode 100644 index 000000000..34a118478 Binary files /dev/null and b/rtdata/dcpprofiles/NIKON Z 5.dcp differ diff --git a/rtdata/dcpprofiles/NIKON Z 6_2.dcp b/rtdata/dcpprofiles/NIKON Z 6_2.dcp new file mode 100644 index 000000000..1e4a205fd Binary files /dev/null and b/rtdata/dcpprofiles/NIKON Z 6_2.dcp differ diff --git a/rtdata/dcpprofiles/OLYMPUS E-M1.dcp b/rtdata/dcpprofiles/OLYMPUS E-M1.dcp new file mode 100644 index 000000000..84d126ecb Binary files /dev/null and b/rtdata/dcpprofiles/OLYMPUS E-M1.dcp differ diff --git a/rtdata/dcpprofiles/PANASONIC DMC-LX100.dcp b/rtdata/dcpprofiles/PANASONIC DMC-LX100.dcp new file mode 100644 index 000000000..7ed0e10ea Binary files /dev/null and b/rtdata/dcpprofiles/PANASONIC DMC-LX100.dcp differ diff --git a/rtdata/dcpprofiles/SONY DSC-RX100M6.dcp b/rtdata/dcpprofiles/SONY DSC-RX100M6.dcp new file mode 100644 index 000000000..230eaa1a6 Binary files /dev/null and b/rtdata/dcpprofiles/SONY DSC-RX100M6.dcp differ diff --git a/rtdata/dcpprofiles/SONY ILCE-7.dcp b/rtdata/dcpprofiles/SONY ILCE-7.dcp new file mode 100644 index 000000000..ecf577920 Binary files /dev/null and b/rtdata/dcpprofiles/SONY ILCE-7.dcp differ diff --git a/rtdata/dcpprofiles/SONY ILCE-7C.dcp b/rtdata/dcpprofiles/SONY ILCE-7C.dcp new file mode 100644 index 000000000..43f6b14ae Binary files /dev/null and b/rtdata/dcpprofiles/SONY ILCE-7C.dcp differ diff --git a/rtdata/dcpprofiles/SONY ILCE-7SM3.dcp b/rtdata/dcpprofiles/SONY ILCE-7SM3.dcp new file mode 100644 index 000000000..89cd481ba Binary files /dev/null and b/rtdata/dcpprofiles/SONY ILCE-7SM3.dcp differ diff --git a/rtdata/dcpprofiles/camera_model_aliases.json b/rtdata/dcpprofiles/camera_model_aliases.json index 32db0db52..49e981121 100644 --- a/rtdata/dcpprofiles/camera_model_aliases.json +++ b/rtdata/dcpprofiles/camera_model_aliases.json @@ -1,6 +1,7 @@ { "Canon EOS 100D": ["Canon EOS Kiss X7", "Canon EOS REBEL SL1"], "Canon EOS 200D": ["Canon EOS Kiss X9", "Canon EOS Rebel SL2"], + "Canon EOS 250D": ["Canon EOS Kiss X10", "Canon EOS Rebel SL3"], "Canon EOS 300D": ["Canon EOS Kiss Digital", "Canon EOS Digital Rebel"], "Canon EOS 350D": ["Canon EOS 350D DIGITAL", "Canon EOS Kiss Digital N", "Canon EOS DIGITAL REBEL XT"], "Canon EOS 400D": ["Canon EOS 400D DIGITAL", "Canon EOS Kiss Digital X", "Canon EOS DIGITAL REBEL XTi"], diff --git a/rtdata/fonts/DroidSansMonoSlashed.ttf b/rtdata/fonts/DroidSansMonoSlashed.ttf deleted file mode 100644 index 8c44b47ed..000000000 Binary files a/rtdata/fonts/DroidSansMonoSlashed.ttf and /dev/null differ diff --git a/rtdata/images/png/rawtherapee-logo-128.png b/rtdata/icons/hicolor/128x128/apps/rawtherapee.png similarity index 100% rename from rtdata/images/png/rawtherapee-logo-128.png rename to rtdata/icons/hicolor/128x128/apps/rawtherapee.png diff --git a/rtdata/images/png/rawtherapee-logo-16.png b/rtdata/icons/hicolor/16x16/apps/rawtherapee.png similarity index 100% rename from rtdata/images/png/rawtherapee-logo-16.png rename to rtdata/icons/hicolor/16x16/apps/rawtherapee.png diff --git a/rtdata/images/png/rawtherapee-logo-24.png b/rtdata/icons/hicolor/24x24/apps/rawtherapee.png similarity index 100% rename from rtdata/images/png/rawtherapee-logo-24.png rename to rtdata/icons/hicolor/24x24/apps/rawtherapee.png diff --git a/rtdata/images/png/rawtherapee-logo-256.png b/rtdata/icons/hicolor/256x256/apps/rawtherapee.png similarity index 100% rename from rtdata/images/png/rawtherapee-logo-256.png rename to rtdata/icons/hicolor/256x256/apps/rawtherapee.png diff --git a/rtdata/images/png/rawtherapee-logo-32.png b/rtdata/icons/hicolor/32x32/apps/rawtherapee.png similarity index 100% rename from rtdata/images/png/rawtherapee-logo-32.png rename to rtdata/icons/hicolor/32x32/apps/rawtherapee.png diff --git a/rtdata/images/png/rawtherapee-logo-48.png b/rtdata/icons/hicolor/48x48/apps/rawtherapee.png similarity index 100% rename from rtdata/images/png/rawtherapee-logo-48.png rename to rtdata/icons/hicolor/48x48/apps/rawtherapee.png diff --git a/rtdata/images/png/rawtherapee-logo-64.png b/rtdata/icons/hicolor/64x64/apps/rawtherapee.png similarity index 100% rename from rtdata/images/png/rawtherapee-logo-64.png rename to rtdata/icons/hicolor/64x64/apps/rawtherapee.png diff --git a/rtdata/icons/hicolor/index.theme b/rtdata/icons/hicolor/index.theme new file mode 100644 index 000000000..1215a9989 --- /dev/null +++ b/rtdata/icons/hicolor/index.theme @@ -0,0 +1,48 @@ +[Icon Theme] +Name=Hicolor +Comment=RawTherapee app icon +Hidden=true +Directories=16x16/apps,24x24/apps,32x32/apps,48x48/apps,64x64/apps,128x128/apps,256x256/apps,scalable/apps + + +[16x16/apps] +Size=16 +Context=ApplicationIcons +Type=Threshold + +[24x24/apps] +Size=24 +Context=ApplicationIcons +Type=Threshold + +[32x32/apps] +Size=32 +Context=ApplicationIcons +Type=Threshold + +[48x48/apps] +Size=48 +Context=ApplicationIcons +Type=Threshold + +[64x64/apps] +Size=64 +Context=ApplicationIcons +Type=Threshold + +[128x128/apps] +Size=128 +Context=ApplicationIcons +Type=Threshold + +[256x256/apps] +Size=256 +Context=ApplicationIcons +Type=Threshold + +[scalable/apps] +MinSize=16 +Size=128 +MaxSize=256 +Context=ApplicationIcons +Type=Scalable diff --git a/rtdata/images/rt-logo.svg b/rtdata/icons/hicolor/scalable/apps/rawtherapee.svg similarity index 100% rename from rtdata/images/rt-logo.svg rename to rtdata/icons/hicolor/scalable/apps/rawtherapee.svg diff --git a/rtdata/images/png/empty.png b/rtdata/icons/rawtherapee/24x24/apps/empty.png similarity index 100% rename from rtdata/images/png/empty.png rename to rtdata/icons/rawtherapee/24x24/apps/empty.png diff --git a/rtdata/icons/rawtherapee/index.theme b/rtdata/icons/rawtherapee/index.theme new file mode 100644 index 000000000..1095b2219 --- /dev/null +++ b/rtdata/icons/rawtherapee/index.theme @@ -0,0 +1,18 @@ +[Icon Theme] +Name=RawTherapee +Comment=RawTherapee icon theme +Inherits=Adwaita +Directories=24x24/apps,scalable/apps + + +[24x24/apps] +Size=24 +Context=Applications +Type=Threshold + +[scalable/apps] +MinSize=16 +Size=128 +MaxSize=256 +Context=Applications +Type=Scalable diff --git a/rtdata/icons/rawtherapee/scalable/apps/add-small.svg b/rtdata/icons/rawtherapee/scalable/apps/add-small.svg new file mode 100644 index 000000000..9d5cb01c6 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/add-small.svg @@ -0,0 +1,77 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/add.svg b/rtdata/icons/rawtherapee/scalable/apps/add.svg new file mode 100644 index 000000000..b8c21fdae --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/add.svg @@ -0,0 +1,74 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/aperture.svg b/rtdata/icons/rawtherapee/scalable/apps/aperture.svg similarity index 55% rename from rtdata/images/svg/aperture.svg rename to rtdata/icons/rawtherapee/scalable/apps/aperture.svg index 5820ee283..c08244c62 100644 --- a/rtdata/images/svg/aperture.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/aperture.svg @@ -2,68 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -107,289 +55,224 @@ + id="layer1"> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:0.95796239;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" + id="path870" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + id="path1175" /> + id="path1171" /> + id="path1167" /> + id="path1163" /> + id="path1159" /> + id="path994" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#ff8181;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#dfb220;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#20df20;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#20dfdf;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#2020df;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#ef8fef;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> diff --git a/rtdata/images/svg/arrow-down-small.svg b/rtdata/icons/rawtherapee/scalable/apps/arrow-down-small.svg similarity index 62% rename from rtdata/images/svg/arrow-down-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/arrow-down-small.svg index d17ba4329..2911187fc 100644 --- a/rtdata/images/svg/arrow-down-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/arrow-down-small.svg @@ -2,181 +2,122 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + id="ExperimentalArrow"> + style="fill:context-stroke;stroke:#000000;stroke-opacity:1.0" /> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> @@ -188,7 +129,7 @@ image/svg+xml - + Maciej Dworak @@ -222,11 +163,9 @@ diff --git a/rtdata/images/svg/arrow-left-small.svg b/rtdata/icons/rawtherapee/scalable/apps/arrow-left-small.svg similarity index 61% rename from rtdata/images/svg/arrow-left-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/arrow-left-small.svg index 54eafbc29..cb5194185 100644 --- a/rtdata/images/svg/arrow-left-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/arrow-left-small.svg @@ -2,181 +2,122 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + id="ExperimentalArrow"> + style="fill:context-stroke;stroke:#000000;stroke-opacity:1.0" /> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> @@ -188,7 +129,7 @@ image/svg+xml - + Maciej Dworak @@ -222,13 +163,10 @@ + id="rect1539" /> diff --git a/rtdata/images/svg/arrow-right-small.svg b/rtdata/icons/rawtherapee/scalable/apps/arrow-right-small.svg similarity index 61% rename from rtdata/images/svg/arrow-right-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/arrow-right-small.svg index 43bfdd4e8..1b6d484e8 100644 --- a/rtdata/images/svg/arrow-right-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/arrow-right-small.svg @@ -2,181 +2,122 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + id="ExperimentalArrow"> + style="fill:context-stroke;stroke:#000000;stroke-opacity:1.0" /> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> @@ -188,7 +129,7 @@ image/svg+xml - + Maciej Dworak @@ -222,13 +163,10 @@ + id="rect1539" /> diff --git a/rtdata/images/svg/arrow-up-small.svg b/rtdata/icons/rawtherapee/scalable/apps/arrow-up-small.svg similarity index 61% rename from rtdata/images/svg/arrow-up-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/arrow-up-small.svg index b5609c5d7..7f3314246 100644 --- a/rtdata/images/svg/arrow-up-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/arrow-up-small.svg @@ -2,181 +2,122 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + id="ExperimentalArrow"> + style="fill:context-stroke;stroke:#000000;stroke-opacity:1.0" /> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> @@ -188,7 +129,7 @@ image/svg+xml - + Maciej Dworak @@ -222,13 +163,10 @@ + id="rect1539" /> diff --git a/rtdata/images/svg/arrow-updown.svg b/rtdata/icons/rawtherapee/scalable/apps/arrow-updown.svg similarity index 51% rename from rtdata/images/svg/arrow-updown.svg rename to rtdata/icons/rawtherapee/scalable/apps/arrow-updown.svg index d5b6c22a5..ed82879a5 100644 --- a/rtdata/images/svg/arrow-updown.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/arrow-updown.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,20 +55,14 @@ + id="layer1"> + id="path2876" /> + id="path4746" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/arrow2-left.svg b/rtdata/icons/rawtherapee/scalable/apps/arrow2-left.svg new file mode 100644 index 000000000..817901f8e --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/arrow2-left.svg @@ -0,0 +1,64 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/arrow2-right.svg b/rtdata/icons/rawtherapee/scalable/apps/arrow2-right.svg new file mode 100644 index 000000000..4a8922d3a --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/arrow2-right.svg @@ -0,0 +1,64 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/atom.svg b/rtdata/icons/rawtherapee/scalable/apps/atom.svg similarity index 69% rename from rtdata/images/svg/atom.svg rename to rtdata/icons/rawtherapee/scalable/apps/atom.svg index 72fb97532..22533a9b4 100644 --- a/rtdata/images/svg/atom.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/atom.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -71,7 +30,7 @@ - + RawTherapee icon. @@ -96,26 +55,20 @@ + id="layer1"> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="M 6.4236453,1.0007171 C 5.1242162,1.0661783 4.2818956,1.3551405 3.4072861,2.1680463 2.0313377,3.6604057 2.0510559,6.0656441 2.8621368,8.5546635 3.6732254,11.043598 5.310644,13.766734 7.6001256,16.249906 c 2.2894736,2.483171 4.8041564,4.263447 7.0989664,5.143206 2.294838,0.879717 4.512477,0.901128 5.888414,-0.591274 1.459941,-1.892872 1.173357,-4.178274 0.629276,-6.11277 l -1.304751,1.308627 c 0.13995,1.28267 0.485305,2.529387 -0.444943,3.586763 -0.742315,0.805094 -2.239588,0.951586 -4.238937,0.184773 C 13.228945,19.002904 10.867343,17.361104 8.7224918,15.034753 6.5776052,12.708445 5.0659363,10.14926 4.3592931,7.9807808 3.8278563,5.7699345 3.7373603,4.2400511 5.122903,3.0223486 5.9515725,2.6063205 7.1829376,2.5856846 8.7705933,3.1940787 9.8156548,3.5945426 10.958198,4.2581661 12.117649,5.1091942 14.341642,6.72193 15.771084,8.4243253 17.384754,10.761068 L 18.45501,9.4589633 C 17.216394,7.4326758 15.418359,5.7024185 13.799195,4.3896672 12.282374,3.1596706 10.75444,2.1300889 9.2997088,1.5724257 8.2993769,1.1887878 7.3233517,0.98582573 6.4236453,1.0007171 Z" /> + id="ellipse4751" /> + style="opacity:1;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:3.77952719;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/bayer.svg b/rtdata/icons/rawtherapee/scalable/apps/bayer.svg new file mode 100644 index 000000000..10bd21541 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/bayer.svg @@ -0,0 +1,151 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/beforeafter.svg b/rtdata/icons/rawtherapee/scalable/apps/beforeafter.svg similarity index 60% rename from rtdata/images/svg/beforeafter.svg rename to rtdata/icons/rawtherapee/scalable/apps/beforeafter.svg index 8c4eaab48..798870b91 100644 --- a/rtdata/images/svg/beforeafter.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/beforeafter.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + + + + + + image/svg+xml + + + + + Lawrence + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/bidirectional-arrow-horizontal-prelight.svg b/rtdata/icons/rawtherapee/scalable/apps/bidirectional-arrow-horizontal-prelight.svg new file mode 100644 index 000000000..1692d094f --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/bidirectional-arrow-horizontal-prelight.svg @@ -0,0 +1,70 @@ + + + + + + + image/svg+xml + + + + + Lawrence + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/bidirectional-arrow-vertical-hicontrast.svg b/rtdata/icons/rawtherapee/scalable/apps/bidirectional-arrow-vertical-hicontrast.svg new file mode 100644 index 000000000..9ea09d595 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/bidirectional-arrow-vertical-hicontrast.svg @@ -0,0 +1,70 @@ + + + + + + + image/svg+xml + + + + + Lawrence + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/bidirectional-arrow-vertical-prelight.svg b/rtdata/icons/rawtherapee/scalable/apps/bidirectional-arrow-vertical-prelight.svg new file mode 100644 index 000000000..b2658187a --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/bidirectional-arrow-vertical-prelight.svg @@ -0,0 +1,70 @@ + + + + + + + image/svg+xml + + + + + Lawrence + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/box.svg b/rtdata/icons/rawtherapee/scalable/apps/box.svg new file mode 100644 index 000000000..bf31f9860 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/box.svg @@ -0,0 +1,67 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/cancel-small.svg b/rtdata/icons/rawtherapee/scalable/apps/cancel-small.svg new file mode 100644 index 000000000..7fab7ab2b --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/cancel-small.svg @@ -0,0 +1,77 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/cancel.svg b/rtdata/icons/rawtherapee/scalable/apps/cancel.svg new file mode 100644 index 000000000..899e2a5ec --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/cancel.svg @@ -0,0 +1,74 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/circle-black-small.svg b/rtdata/icons/rawtherapee/scalable/apps/circle-black-small.svg similarity index 54% rename from rtdata/images/svg/circle-black-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/circle-black-small.svg index 2b314c556..3cfc3579b 100644 --- a/rtdata/images/svg/circle-black-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/circle-black-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/circle-empty-blue-small.svg b/rtdata/icons/rawtherapee/scalable/apps/circle-empty-blue-small.svg similarity index 60% rename from rtdata/images/svg/circle-empty-blue-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/circle-empty-blue-small.svg index e9004ae63..568543846 100644 --- a/rtdata/images/svg/circle-empty-blue-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/circle-empty-blue-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,8 +56,6 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/circle-multicolor-small.svg b/rtdata/icons/rawtherapee/scalable/apps/circle-multicolor-small.svg new file mode 100644 index 000000000..ba109a903 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/circle-multicolor-small.svg @@ -0,0 +1,671 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/circle-orange-small.svg b/rtdata/icons/rawtherapee/scalable/apps/circle-orange-small.svg similarity index 54% rename from rtdata/images/svg/circle-orange-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/circle-orange-small.svg index addf840d1..a86be7111 100644 --- a/rtdata/images/svg/circle-orange-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/circle-orange-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/circle-red-small.svg b/rtdata/icons/rawtherapee/scalable/apps/circle-red-small.svg similarity index 61% rename from rtdata/images/svg/circle-red-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/circle-red-small.svg index a56b0d328..7e1536ac2 100644 --- a/rtdata/images/svg/circle-red-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/circle-red-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,120 +55,99 @@ + id="layer1"> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1.86396921;marker:none;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1.86396921;marker:none;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1.86396921;marker:none;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1.86396921;marker:none;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1.86396921;marker:none;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1.86396921;marker:none;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1.86396921;marker:none;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1.86396921;marker:none;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1.86396921;marker:none;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1.86396921;marker:none;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1.86396921;marker:none;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1.86396921;marker:none;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.55;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1.86396921;marker:none;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.35;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1.86396921;marker:none;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1.86396921;marker:none;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1.86396921;marker:none;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.45;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1.86396921;marker:none;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.65;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1.86396921;marker:none;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1.86396921;marker:none;enable-background:accumulate" /> diff --git a/rtdata/images/svg/color-picker-add-hicontrast.svg b/rtdata/icons/rawtherapee/scalable/apps/color-picker-add-hicontrast.svg similarity index 68% rename from rtdata/images/svg/color-picker-add-hicontrast.svg rename to rtdata/icons/rawtherapee/scalable/apps/color-picker-add-hicontrast.svg index 09870ff48..93b68b655 100644 --- a/rtdata/images/svg/color-picker-add-hicontrast.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/color-picker-add-hicontrast.svg @@ -2,59 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + id="rect2927" /> + id="path17041-7" /> + id="path822" /> + id="path3821" /> + id="path3823" /> diff --git a/rtdata/images/svg/color-picker-add.svg b/rtdata/icons/rawtherapee/scalable/apps/color-picker-add.svg similarity index 67% rename from rtdata/images/svg/color-picker-add.svg rename to rtdata/icons/rawtherapee/scalable/apps/color-picker-add.svg index b42b8371d..f35c8346a 100644 --- a/rtdata/images/svg/color-picker-add.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/color-picker-add.svg @@ -2,59 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.32020855" /> + id="path6419-3-9-4-4" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.32020855" /> + id="path822" /> diff --git a/rtdata/images/svg/color-picker-bars.svg b/rtdata/icons/rawtherapee/scalable/apps/color-picker-bars.svg similarity index 64% rename from rtdata/images/svg/color-picker-bars.svg rename to rtdata/icons/rawtherapee/scalable/apps/color-picker-bars.svg index f6c57ea40..0be923d08 100644 --- a/rtdata/images/svg/color-picker-bars.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/color-picker-bars.svg @@ -2,59 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.32020855" /> + id="path6419-3-9-4-4" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.32020855" /> + id="path822" /> diff --git a/rtdata/images/svg/color-picker-hicontrast.svg b/rtdata/icons/rawtherapee/scalable/apps/color-picker-hicontrast.svg similarity index 71% rename from rtdata/images/svg/color-picker-hicontrast.svg rename to rtdata/icons/rawtherapee/scalable/apps/color-picker-hicontrast.svg index 20ece03b7..8e70dc54f 100644 --- a/rtdata/images/svg/color-picker-hicontrast.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/color-picker-hicontrast.svg @@ -2,59 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + id="path17041-7" /> + id="path3821" /> + id="path3823" /> diff --git a/rtdata/images/svg/color-picker-hide.svg b/rtdata/icons/rawtherapee/scalable/apps/color-picker-hide.svg similarity index 67% rename from rtdata/images/svg/color-picker-hide.svg rename to rtdata/icons/rawtherapee/scalable/apps/color-picker-hide.svg index be180885e..bf6d31680 100644 --- a/rtdata/images/svg/color-picker-hide.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/color-picker-hide.svg @@ -2,59 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + id="path9921-9-3-9-8" /> + style="opacity:0.3;fill:#cccccc;fill-opacity:1.0;stroke:#cccccc;stroke-width:1.00151598;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1.0" /> + id="path17041" /> + id="path822" /> diff --git a/rtdata/images/svg/color-picker-small.svg b/rtdata/icons/rawtherapee/scalable/apps/color-picker-small.svg similarity index 68% rename from rtdata/images/svg/color-picker-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/color-picker-small.svg index d83400653..f085e9c2d 100644 --- a/rtdata/images/svg/color-picker-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/color-picker-small.svg @@ -2,59 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -99,21 +56,15 @@ + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:#cccccc;stroke-width:1.00151598;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1.0" /> + id="path822" /> @@ -121,13 +72,11 @@ id="path17041" transform="translate(0,8)" d="M 8.5996094,4.6132812 C 7.9891853,5.2309506 7.3674012,5.8422033 6.7597656,6.4707031 6.0490574,7.1848845 5.3334202,7.8974278 4.6464844,8.6445312 a 0.2448101,0.24497104 0 0 0 -0.035156,0.048828 C 4.4758783,8.9404628 4.4084807,9.1951286 4.328125,9.4121094 4.2477692,9.6290908 4.1597161,9.8016252 4.0136719,9.9238281 a 0.2448101,0.24497104 0 0 0 -0.037109,0.041016 c -0.414866,0.5579799 -0.1942661,1.3358159 0.3261715,1.7128899 0.4295663,0.352432 1.0465094,0.292563 1.4453125,-0.04492 l -0.017578,0.01367 c 0.2791087,-0.197793 0.554147,-0.364305 0.8417968,-0.414062 A 0.2448101,0.24497104 0 0 0 6.625,11.216797 C 7.4370634,10.886847 7.886835,10.1655 8.4121094,9.7011719 a 0.2448101,0.24497104 0 0 0 0.00977,-0.011719 C 9.3185591,8.7927604 10.214748,7.8962737 11.111328,7 11.098918,7.0008725 11.088758,7.00741 11.076168,7.00781 10.6583,6.9873298 10.291674,6.8102187 9.9609375,6.5683594 8.7783993,7.7536562 7.6035634,8.9481747 6.4023438,10.103516 c -0.1447329,0.07969 -0.3434276,0.127975 -0.5703126,0.193359 -0.2332819,0.06723 -0.5032928,0.164694 -0.7011718,0.408203 a 0.2448101,0.24497104 0 0 0 -0.013672,0.01953 c -0.018269,0.02776 -0.066987,0.06555 -0.1015625,0.07617 -0.034575,0.01062 -0.034649,0.0086 -0.044922,0 a 0.2448101,0.24497104 0 0 0 -0.035156,-0.02539 c -0.022238,-0.01269 -0.062217,-0.06429 -0.070312,-0.103516 -0.0081,-0.03923 -0.0087,-0.03651 0.00781,-0.04883 a 0.2448101,0.24497104 0 0 0 0.027344,-0.02149 c 0.2194594,-0.216848 0.450492,-0.497389 0.5,-0.8769526 L 5.3984375,9.75 C 5.4691719,9.4499134 5.5532474,9.1916878 5.7363281,9.0585938 A 0.2448101,0.24497104 0 0 0 5.765625,9.0332031 C 6.8638741,7.924874 7.9727833,6.823097 9.0761719,5.7167969 8.8267121,5.4055299 8.599334,5.0104373 8.5996094,4.6132812 Z" - style="opacity:0.7;fill:#2a7fff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.3266921" - inkscape:connector-curvature="0" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.3266921" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.3266921" /> diff --git a/rtdata/images/svg/color-picker.svg b/rtdata/icons/rawtherapee/scalable/apps/color-picker.svg similarity index 68% rename from rtdata/images/svg/color-picker.svg rename to rtdata/icons/rawtherapee/scalable/apps/color-picker.svg index d52d96633..22f4cda36 100644 --- a/rtdata/images/svg/color-picker.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/color-picker.svg @@ -2,59 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.32020855" /> + id="path6419-3-9-4-4" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.32020855" /> + id="path822" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/contrastmask-off.svg b/rtdata/icons/rawtherapee/scalable/apps/contrastmask-off.svg new file mode 100644 index 000000000..ae3d093ce --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/contrastmask-off.svg @@ -0,0 +1,85 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/contrastmask-on.svg b/rtdata/icons/rawtherapee/scalable/apps/contrastmask-on.svg new file mode 100644 index 000000000..24432898e --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/contrastmask-on.svg @@ -0,0 +1,85 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/copy.svg b/rtdata/icons/rawtherapee/scalable/apps/copy.svg similarity index 64% rename from rtdata/images/svg/copy.svg rename to rtdata/icons/rawtherapee/scalable/apps/copy.svg index 9471e1ea7..3903eae8c 100644 --- a/rtdata/images/svg/copy.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/copy.svg @@ -2,209 +2,146 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="overflow:visible"> + style="overflow:visible"> + id="ExperimentalArrow"> + style="fill:context-stroke;stroke:#000000;stroke-opacity:1.0" /> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> @@ -249,29 +186,26 @@ + id="layer1"> + id="path8807" /> diff --git a/rtdata/images/svg/crop-auto-small.svg b/rtdata/icons/rawtherapee/scalable/apps/crop-auto-small.svg similarity index 51% rename from rtdata/images/svg/crop-auto-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/crop-auto-small.svg index 6d8ac3ea7..5624463e2 100644 --- a/rtdata/images/svg/crop-auto-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/crop-auto-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,35 +56,27 @@ + id="rect1324" /> + id="path879" /> + id="path877" /> + style="display:inline;opacity:1;fill:#008000;fill-opacity:1.0;stroke:none;stroke-width:0.04999533" /> diff --git a/rtdata/images/svg/crop-auto.svg b/rtdata/icons/rawtherapee/scalable/apps/crop-auto.svg similarity index 52% rename from rtdata/images/svg/crop-auto.svg rename to rtdata/icons/rawtherapee/scalable/apps/crop-auto.svg index bc662e9ea..c74bc4a64 100644 --- a/rtdata/images/svg/crop-auto.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/crop-auto.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.97660822;paint-order:normal" /> + id="path849" /> + id="path847" /> + style="display:inline;opacity:1;fill:#008000;fill-opacity:1.0;stroke:none;stroke-width:0.04999533" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/crop-point-hicontrast.svg b/rtdata/icons/rawtherapee/scalable/apps/crop-point-hicontrast.svg new file mode 100644 index 000000000..7ddece7e0 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/crop-point-hicontrast.svg @@ -0,0 +1,114 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/crop-small.svg b/rtdata/icons/rawtherapee/scalable/apps/crop-small.svg new file mode 100644 index 000000000..0266ae19e --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/crop-small.svg @@ -0,0 +1,69 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/crop.svg b/rtdata/icons/rawtherapee/scalable/apps/crop.svg new file mode 100644 index 000000000..72653e0c0 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/crop.svg @@ -0,0 +1,68 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/crossed-arrows-in.svg b/rtdata/icons/rawtherapee/scalable/apps/crossed-arrows-in.svg similarity index 62% rename from rtdata/images/svg/crossed-arrows-in.svg rename to rtdata/icons/rawtherapee/scalable/apps/crossed-arrows-in.svg index 8a4c71dc8..17c4ea79a 100644 --- a/rtdata/images/svg/crossed-arrows-in.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/crossed-arrows-in.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> diff --git a/rtdata/images/svg/crossed-arrows-out.svg b/rtdata/icons/rawtherapee/scalable/apps/crossed-arrows-out.svg similarity index 58% rename from rtdata/images/svg/crossed-arrows-out.svg rename to rtdata/icons/rawtherapee/scalable/apps/crossed-arrows-out.svg index 5eb5ba4b1..6aa419d86 100644 --- a/rtdata/images/svg/crossed-arrows-out.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/crossed-arrows-out.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + id="path2876" /> + id="path2866" /> + id="path2864" /> + id="path2893" /> diff --git a/rtdata/images/svg/crosshair-adjust.svg b/rtdata/icons/rawtherapee/scalable/apps/crosshair-adjust.svg similarity index 56% rename from rtdata/images/svg/crosshair-adjust.svg rename to rtdata/icons/rawtherapee/scalable/apps/crosshair-adjust.svg index 4cde3415a..26e394a0f 100644 --- a/rtdata/images/svg/crosshair-adjust.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/crosshair-adjust.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,23 +55,18 @@ + id="layer1"> + id="path2866" /> + style="display:inline;opacity:0.9;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.0348262" /> + id="path1448-3" /> diff --git a/rtdata/images/svg/crosshair-hicontrast.svg b/rtdata/icons/rawtherapee/scalable/apps/crosshair-hicontrast.svg similarity index 67% rename from rtdata/images/svg/crosshair-hicontrast.svg rename to rtdata/icons/rawtherapee/scalable/apps/crosshair-hicontrast.svg index a4dcc2592..e27a576a8 100644 --- a/rtdata/images/svg/crosshair-hicontrast.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/crosshair-hicontrast.svg @@ -2,77 +2,25 @@ - - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="path3792" /> image/svg+xml - + Maciej Dworak @@ -116,24 +64,19 @@ + id="layer1"> + id="rect1419" /> + id="rect1440" /> + style="opacity:1;fill:#ffffff;fill-opacity:1.0;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0;paint-order:normal" + id="path1448" /> + style="opacity:1;fill:#ff0000;fill-opacity:1.0;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + id="path1481" /> + style="opacity:1;fill:#ffffff;fill-opacity:1.0;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0;paint-order:normal" /> diff --git a/rtdata/images/svg/crosshair-node-curve.svg b/rtdata/icons/rawtherapee/scalable/apps/crosshair-node-curve.svg similarity index 59% rename from rtdata/images/svg/crosshair-node-curve.svg rename to rtdata/icons/rawtherapee/scalable/apps/crosshair-node-curve.svg index d72c2a929..9630c0bd6 100644 --- a/rtdata/images/svg/crosshair-node-curve.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/crosshair-node-curve.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,39 +55,33 @@ + id="layer1"> + id="rect825" /> + id="rect829" /> + id="path853" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none"> + style="opacity:1;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.9;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/crosshair-small.svg b/rtdata/icons/rawtherapee/scalable/apps/crosshair-small.svg new file mode 100644 index 000000000..d86658cac --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/crosshair-small.svg @@ -0,0 +1,109 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/curve-catmullrom-small.svg b/rtdata/icons/rawtherapee/scalable/apps/curve-catmullrom-small.svg similarity index 63% rename from rtdata/images/svg/curve-catmullrom-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/curve-catmullrom-small.svg index bc6378bb4..137ad3e13 100644 --- a/rtdata/images/svg/curve-catmullrom-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/curve-catmullrom-small.svg @@ -2,66 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -106,54 +56,46 @@ + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:#cccccc;stroke-width:0.80000007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> + style="opacity:0.9;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1.0;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:#cccccc;stroke-width:0.80000007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> + style="opacity:0.9;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1.0;paint-order:normal" /> + id="circle4399" /> + id="circle4405" /> diff --git a/rtdata/images/svg/curve-catmullrom.svg b/rtdata/icons/rawtherapee/scalable/apps/curve-catmullrom.svg similarity index 63% rename from rtdata/images/svg/curve-catmullrom.svg rename to rtdata/icons/rawtherapee/scalable/apps/curve-catmullrom.svg index b59954885..2b9f2f9e8 100644 --- a/rtdata/images/svg/curve-catmullrom.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/curve-catmullrom.svg @@ -2,62 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -101,16 +55,13 @@ + id="layer1"> + id="circle817" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0;paint-order:normal" /> + style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> diff --git a/rtdata/images/svg/curve-controlpoints-small.svg b/rtdata/icons/rawtherapee/scalable/apps/curve-controlpoints-small.svg similarity index 63% rename from rtdata/images/svg/curve-controlpoints-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/curve-controlpoints-small.svg index fc85b8774..104d5ffc9 100644 --- a/rtdata/images/svg/curve-controlpoints-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/curve-controlpoints-small.svg @@ -2,63 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> @@ -116,17 +67,16 @@ cy="19" cx="-15" id="circle828" - style="opacity:0.7;fill:#2a7fff;fill-opacity:1;fill-rule:nonzero;stroke:#2a7fff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:#cccccc;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> diff --git a/rtdata/images/svg/curve-controlpoints.svg b/rtdata/icons/rawtherapee/scalable/apps/curve-controlpoints.svg similarity index 61% rename from rtdata/images/svg/curve-controlpoints.svg rename to rtdata/icons/rawtherapee/scalable/apps/curve-controlpoints.svg index 2d432264c..c3121e735 100644 --- a/rtdata/images/svg/curve-controlpoints.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/curve-controlpoints.svg @@ -2,65 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -104,16 +55,13 @@ + id="path15207" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0;paint-order:normal" /> + id="path15253" /> + id="path15255" /> + style="opacity:0.5;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> + style="opacity:0.5;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.5;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.3;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.3;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1;paint-order:normal" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/curve-flat-small.svg b/rtdata/icons/rawtherapee/scalable/apps/curve-flat-small.svg new file mode 100644 index 000000000..377a73269 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/curve-flat-small.svg @@ -0,0 +1,65 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/curve-flat.svg b/rtdata/icons/rawtherapee/scalable/apps/curve-flat.svg new file mode 100644 index 000000000..47d5af103 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/curve-flat.svg @@ -0,0 +1,64 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/curve-linear-small.svg b/rtdata/icons/rawtherapee/scalable/apps/curve-linear-small.svg new file mode 100644 index 000000000..286c9207b --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/curve-linear-small.svg @@ -0,0 +1,65 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/curve-linear.svg b/rtdata/icons/rawtherapee/scalable/apps/curve-linear.svg similarity index 54% rename from rtdata/images/svg/curve-linear.svg rename to rtdata/icons/rawtherapee/scalable/apps/curve-linear.svg index b016121aa..34a7207b8 100644 --- a/rtdata/images/svg/curve-linear.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/curve-linear.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + id="path7133" /> diff --git a/rtdata/images/svg/curve-nurbs-small.svg b/rtdata/icons/rawtherapee/scalable/apps/curve-nurbs-small.svg similarity index 57% rename from rtdata/images/svg/curve-nurbs-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/curve-nurbs-small.svg index 1ff3a1a76..6519af88b 100644 --- a/rtdata/images/svg/curve-nurbs-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/curve-nurbs-small.svg @@ -2,63 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -103,23 +56,19 @@ + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> diff --git a/rtdata/images/svg/curve-nurbs.svg b/rtdata/icons/rawtherapee/scalable/apps/curve-nurbs.svg similarity index 60% rename from rtdata/images/svg/curve-nurbs.svg rename to rtdata/icons/rawtherapee/scalable/apps/curve-nurbs.svg index 1d7ef10ce..e4b73b9ed 100644 --- a/rtdata/images/svg/curve-nurbs.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/curve-nurbs.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + id="path4882" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0;paint-order:normal" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.5;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/curve-parametric-small.svg b/rtdata/icons/rawtherapee/scalable/apps/curve-parametric-small.svg new file mode 100644 index 000000000..0b2f22b9b --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/curve-parametric-small.svg @@ -0,0 +1,86 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/curve-parametric.svg b/rtdata/icons/rawtherapee/scalable/apps/curve-parametric.svg new file mode 100644 index 000000000..ce228bec6 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/curve-parametric.svg @@ -0,0 +1,86 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/curve-spline-small.svg b/rtdata/icons/rawtherapee/scalable/apps/curve-spline-small.svg similarity index 59% rename from rtdata/images/svg/curve-spline-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/curve-spline-small.svg index 990df0c0d..63633af65 100644 --- a/rtdata/images/svg/curve-spline-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/curve-spline-small.svg @@ -2,63 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="path818" /> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + id="path815" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0;paint-order:normal" /> diff --git a/rtdata/images/svg/detail.svg b/rtdata/icons/rawtherapee/scalable/apps/detail.svg similarity index 63% rename from rtdata/images/svg/detail.svg rename to rtdata/icons/rawtherapee/scalable/apps/detail.svg index 89aab821b..9b1fe5acd 100644 --- a/rtdata/images/svg/detail.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/detail.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="opacity:0.7;fill:#cccccc;fill-rule:evenodd;stroke:none;fill-opacity:1.0" /> + style="opacity:0.1;fill:#cccccc;fill-rule:evenodd;stroke:none;fill-opacity:1.0" /> + style="opacity:0.7;fill:#cccccc;fill-rule:evenodd;stroke:none;fill-opacity:1.0" /> + style="opacity:0.7;fill:#cccccc;fill-rule:evenodd;stroke:none;stroke-width:0.02394956;fill-opacity:1.0" /> + style="opacity:0.2;fill:#cccccc;fill-rule:evenodd;stroke:none;stroke-width:0.02394956;fill-opacity:1.0" /> + style="opacity:0.2;fill:#cccccc;fill-rule:evenodd;stroke:none;stroke-width:0.02394956;fill-opacity:1.0" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke-width:0.75" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke-width:0.5" /> + style="opacity:0.2;fill:#cccccc;fill-opacity:1.0;stroke-width:0.75" /> + style="opacity:0.1;fill:#cccccc;fill-opacity:1.0;stroke-width:0.5" /> + style="opacity:0.1;fill:#cccccc;fill-opacity:1.0;stroke-width:0.5" /> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -99,17 +55,14 @@ + id="layer1"> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1;paint-order:normal" /> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -99,15 +55,13 @@ + id="layer1"> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -98,11 +55,9 @@ + id="layer1"> diff --git a/rtdata/images/svg/device-optical.svg b/rtdata/icons/rawtherapee/scalable/apps/device-optical.svg similarity index 76% rename from rtdata/images/svg/device-optical.svg rename to rtdata/icons/rawtherapee/scalable/apps/device-optical.svg index de73e9422..5b374de3a 100644 --- a/rtdata/images/svg/device-optical.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/device-optical.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,21 +55,18 @@ + id="layer1"> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> diff --git a/rtdata/images/svg/device-usb.svg b/rtdata/icons/rawtherapee/scalable/apps/device-usb.svg similarity index 66% rename from rtdata/images/svg/device-usb.svg rename to rtdata/icons/rawtherapee/scalable/apps/device-usb.svg index 116a6e1f5..bc68214eb 100644 --- a/rtdata/images/svg/device-usb.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/device-usb.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,11 +55,9 @@ + id="layer1"> diff --git a/rtdata/images/svg/distortion-auto-small.svg b/rtdata/icons/rawtherapee/scalable/apps/distortion-auto-small.svg similarity index 76% rename from rtdata/images/svg/distortion-auto-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/distortion-auto-small.svg index 6a8ac0a03..dd9726fb6 100644 --- a/rtdata/images/svg/distortion-auto-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/distortion-auto-small.svg @@ -2,66 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -106,36 +56,28 @@ + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1.0;paint-order:normal" + id="path1207" /> + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1.0;paint-order:normal" + id="path838" /> + style="display:inline;opacity:1;fill:#008000;fill-opacity:1.0;stroke:none;stroke-width:0.04999533" /> diff --git a/rtdata/images/svg/distortion-auto.svg b/rtdata/icons/rawtherapee/scalable/apps/distortion-auto.svg similarity index 76% rename from rtdata/images/svg/distortion-auto.svg rename to rtdata/icons/rawtherapee/scalable/apps/distortion-auto.svg index 8cfadb130..2d14f873f 100644 --- a/rtdata/images/svg/distortion-auto.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/distortion-auto.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.72779661;marker:none;enable-background:accumulate" /> + style="display:inline;opacity:1;fill:#008000;fill-opacity:1.0;stroke:none;stroke-width:0.04999533" /> diff --git a/rtdata/images/svg/distortion-barrel-small.svg b/rtdata/icons/rawtherapee/scalable/apps/distortion-barrel-small.svg similarity index 53% rename from rtdata/images/svg/distortion-barrel-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/distortion-barrel-small.svg index b769bd0aa..70bdae4ec 100644 --- a/rtdata/images/svg/distortion-barrel-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/distortion-barrel-small.svg @@ -2,68 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -108,20 +56,14 @@ + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1.0;paint-order:normal" + id="path1207" /> + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1.0;paint-order:normal" + d="m 1.5,17.5 c 4.3333333,0.666667 8.666667,0.666667 13,0 m -13,-3 c 4.3333333,-0.666667 8.666667,-0.666667 13,0 m -4,-4 c 0.650292,3.616036 0.682877,7.280165 0,11 m -5,-11 c -0.6584443,3.641034 -0.6748477,7.307062 0,11 M 2,11.5 c 4.2825076,-1.305586 7.61369,-1.360845 12,0 0.666667,3 0.666667,6 0,9 -4.413583,1.374278 -7.7421039,1.291863 -12,0 -0.676645,-3.026341 -0.6566267,-6.025562 0,-9 z" /> diff --git a/rtdata/images/svg/distortion-barrel.svg b/rtdata/icons/rawtherapee/scalable/apps/distortion-barrel.svg similarity index 60% rename from rtdata/images/svg/distortion-barrel.svg rename to rtdata/icons/rawtherapee/scalable/apps/distortion-barrel.svg index 012651e87..762f0771b 100644 --- a/rtdata/images/svg/distortion-barrel.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/distortion-barrel.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,13 +55,10 @@ + id="layer1"> diff --git a/rtdata/images/svg/distortion-pincushion-small.svg b/rtdata/icons/rawtherapee/scalable/apps/distortion-pincushion-small.svg similarity index 54% rename from rtdata/images/svg/distortion-pincushion-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/distortion-pincushion-small.svg index 8c26277d2..8f262e176 100644 --- a/rtdata/images/svg/distortion-pincushion-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/distortion-pincushion-small.svg @@ -2,66 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1.0;paint-order:normal" + id="path1207" /> + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1.0;paint-order:normal" + d="M 2.8112464,17.975283 C 7.1188978,17.315578 8.8287055,17.32088 13.188262,17.99448 M 2.7853074,13.943943 c 4.3076514,0.659705 6.0609769,0.7413 10.4205336,0.0677 m -2.922632,-2.196722 c -0.6422099,3.591664 -0.6435523,4.629432 0.04721,8.376771 M 5.7102407,11.813858 c 0.6666667,3.666667 0.5279002,4.730262 -0.1387665,8.396929 M 1.5,10.5 c 4.3333333,2 8.666667,2 13,0 -1.90259,3.567911 -2.095481,7.224565 0,11 -4.413626,-2.041021 -8.7421418,-1.958561 -13,0 2.0486318,-3.719835 1.9508767,-7.383964 0,-11 z" /> diff --git a/rtdata/images/svg/distortion-pincushion.svg b/rtdata/icons/rawtherapee/scalable/apps/distortion-pincushion.svg similarity index 75% rename from rtdata/images/svg/distortion-pincushion.svg rename to rtdata/icons/rawtherapee/scalable/apps/distortion-pincushion.svg index c893eb99a..50b3a923c 100644 --- a/rtdata/images/svg/distortion-pincushion.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/distortion-pincushion.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,15 +55,12 @@ + id="layer1"> diff --git a/rtdata/images/svg/draw.svg b/rtdata/icons/rawtherapee/scalable/apps/draw.svg similarity index 54% rename from rtdata/images/svg/draw.svg rename to rtdata/icons/rawtherapee/scalable/apps/draw.svg index 30ea04ea4..db922ba0c 100644 --- a/rtdata/images/svg/draw.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/draw.svg @@ -1,57 +1,15 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + id="path1658" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/edit-point.svg b/rtdata/icons/rawtherapee/scalable/apps/edit-point.svg new file mode 100644 index 000000000..24374ed02 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/edit-point.svg @@ -0,0 +1,106 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/edit-small.svg b/rtdata/icons/rawtherapee/scalable/apps/edit-small.svg new file mode 100644 index 000000000..359c1973f --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/edit-small.svg @@ -0,0 +1,77 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/edit.svg b/rtdata/icons/rawtherapee/scalable/apps/edit.svg new file mode 100644 index 000000000..c569c5ea0 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/edit.svg @@ -0,0 +1,86 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/equilizer-narrow.svg b/rtdata/icons/rawtherapee/scalable/apps/equilizer-narrow.svg new file mode 100644 index 000000000..758d248d1 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/equilizer-narrow.svg @@ -0,0 +1,264 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/equilizer-wide.svg b/rtdata/icons/rawtherapee/scalable/apps/equilizer-wide.svg new file mode 100644 index 000000000..8662e4bcb --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/equilizer-wide.svg @@ -0,0 +1,188 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/expander-closed-small.svg b/rtdata/icons/rawtherapee/scalable/apps/expander-closed-small.svg new file mode 100644 index 000000000..f050fd36e --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/expander-closed-small.svg @@ -0,0 +1,74 @@ + + + + + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/expander-open-small.svg b/rtdata/icons/rawtherapee/scalable/apps/expander-open-small.svg new file mode 100644 index 000000000..957366a06 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/expander-open-small.svg @@ -0,0 +1,74 @@ + + + + + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/exposure.svg b/rtdata/icons/rawtherapee/scalable/apps/exposure.svg similarity index 51% rename from rtdata/images/svg/exposure.svg rename to rtdata/icons/rawtherapee/scalable/apps/exposure.svg index c0edc9e9b..cbcf4df6f 100644 --- a/rtdata/images/svg/exposure.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/exposure.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,24 +55,20 @@ + id="layer1"> + id="rect977" /> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.38199139px;font-family:'Arial Black';-inkscape-font-specification:'Arial Black, ';fill:#ffffff;fill-opacity:1.0;stroke-width:0.99999994px" + d="M 2.2878589,9.0000003 H 4.1418834 V 11.099591 H 6.1678042 V 9.0000003 h 1.86221 V 15 h -1.86221 V 12.572988 H 4.1418834 V 15 H 2.2878589 Z" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.38199139px;font-family:'Arial Black';-inkscape-font-specification:'Arial Black, ';fill:#ffffff;fill-opacity:1.0;stroke-width:0.99999994px" + d="m 9.2946799,9.0000003 h 2.7544341 q 0.814461,0 1.313779,0.2210095 0.50341,0.2210096 0.830832,0.6343793 0.327421,0.4133699 0.474761,0.9618009 0.14734,0.548431 0.14734,1.162346 0,0.961801 -0.22101,1.493861 -0.216917,0.527967 -0.60573,0.888131 -0.388813,0.356071 -0.834925,0.474761 Q 12.544339,15 12.049114,15 H 9.2946799 Z M 11.148704,10.3588 v 3.278308 h 0.454298 q 0.581173,0 0.826739,-0.126876 0.245566,-0.130969 0.38472,-0.450205 0.139155,-0.323328 0.139155,-1.043656 0,-0.953615 -0.311051,-1.305593 Q 12.331515,10.3588 11.611187,10.3588 Z" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.38199139px;font-family:'Arial Black';-inkscape-font-specification:'Arial Black, ';fill:#ffffff;fill-opacity:1.0;stroke-width:0.99999994px" + d="M 15.810368,15 V 9.0000003 h 3.090041 q 0.859481,0 1.313779,0.1473397 0.454297,0.1473397 0.732605,0.5484311 0.278309,0.3969989 0.278309,0.9699859 0,0.499318 -0.212824,0.863575 -0.212824,0.360163 -0.585266,0.585266 -0.237381,0.143247 -0.650751,0.23738 0.331515,0.110505 0.482947,0.22101 0.102319,0.07367 0.294679,0.315143 0.196453,0.241473 0.261938,0.372442 L 21.712141,15 h -2.095498 l -0.99045,-1.833561 Q 18.437926,12.810368 18.290586,12.703956 18.09004,12.564802 17.836289,12.564802 H 17.672578 V 15 Z m 1.86221,-3.568895 h 0.781719 q 0.126876,0 0.491132,-0.08186 0.184175,-0.03683 0.298772,-0.188268 0.118691,-0.151432 0.118691,-0.347885 0,-0.290587 -0.184175,-0.446112 -0.184175,-0.155525 -0.691678,-0.155525 h -0.814461 z" /> diff --git a/rtdata/images/svg/filetype-ps.svg b/rtdata/icons/rawtherapee/scalable/apps/filetype-ps.svg similarity index 72% rename from rtdata/images/svg/filetype-ps.svg rename to rtdata/icons/rawtherapee/scalable/apps/filetype-ps.svg index f10eabffd..56ecde611 100644 --- a/rtdata/images/svg/filetype-ps.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/filetype-ps.svg @@ -2,58 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.10554028px;font-family:'Arial Black';-inkscape-font-specification:'Arial Black, ';fill:#ffffff;fill-opacity:1.0;stroke-width:0.99999982px" + d="m 6.591689,9.098945 h 2.9802109 q 0.9736151,0 1.4564641,0.4630606 0.486808,0.4630604 0.486808,1.3179414 0,0.878628 -0.530343,1.373351 -0.526386,0.494723 -1.6108183,0.494723 H 8.3924805 v 2.153034 H 6.591689 Z m 1.8007915,2.473615 h 0.4393139 q 0.5184696,0 0.7282321,-0.178101 0.2097626,-0.182058 0.2097626,-0.46306 0,-0.273087 -0.1820581,-0.463061 -0.182058,-0.189974 -0.6846965,-0.189974 h -0.510554 z" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.10554028px;font-family:'Arial Black';-inkscape-font-specification:'Arial Black, ';fill:#ffffff;fill-opacity:1.0;stroke-width:0.99999982px" + d="m 12.144459,12.98153 1.705804,-0.10686 q 0.05541,0.415568 0.225594,0.633246 0.277045,0.352242 0.791557,0.352242 0.383905,0 0.58971,-0.1781 0.209762,-0.182058 0.209762,-0.419525 0,-0.225594 -0.197889,-0.403694 -0.197889,-0.1781 -0.918206,-0.336411 -1.179419,-0.265172 -1.682058,-0.704486 -0.506596,-0.439314 -0.506596,-1.120053 0,-0.447229 0.257256,-0.8430074 0.261214,-0.3997361 0.779683,-0.6253298 0.522428,-0.2295514 1.42876,-0.2295514 1.112137,0 1.693931,0.4155672 0.585752,0.4116095 0.69657,1.3139844 l -1.689973,0.09894 q -0.06728,-0.39182 -0.284961,-0.569921 -0.21372,-0.1781 -0.593667,-0.1781 -0.312665,0 -0.470976,0.134565 -0.158312,0.130607 -0.158312,0.32058 0,0.138523 0.130607,0.249341 0.126649,0.114775 0.601583,0.21372 1.175462,0.253298 1.682058,0.514512 0.510554,0.257256 0.740105,0.641161 0.23351,0.383905 0.23351,0.858839 0,0.558047 -0.308707,1.029023 -0.308707,0.470977 -0.862797,0.716359 Q 15.682717,15 14.839709,15 13.359498,15 12.789578,14.430079 12.219657,13.860158 12.144459,12.98153 Z" /> diff --git a/rtdata/images/svg/filter-clear.svg b/rtdata/icons/rawtherapee/scalable/apps/filter-clear.svg similarity index 62% rename from rtdata/images/svg/filter-clear.svg rename to rtdata/icons/rawtherapee/scalable/apps/filter-clear.svg index 27af953db..6ecaae628 100644 --- a/rtdata/images/svg/filter-clear.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/filter-clear.svg @@ -2,66 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -105,17 +55,13 @@ + id="layer1"> + style="fill:none;fill-rule:evenodd;stroke:#c00000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" + d="M 22,10 12,20 m 0,-10 10,10" /> diff --git a/rtdata/images/svg/filter-original.svg b/rtdata/icons/rawtherapee/scalable/apps/filter-original.svg similarity index 55% rename from rtdata/images/svg/filter-original.svg rename to rtdata/icons/rawtherapee/scalable/apps/filter-original.svg index c14a57a99..6c5b68cb6 100644 --- a/rtdata/images/svg/filter-original.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/filter-original.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,23 +55,17 @@ + id="layer1"> + id="path1049" /> + id="path1052" /> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -98,11 +55,9 @@ + id="layer1"> + style="opacity:0.2;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.04394949" /> + style="opacity:0.9;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.04394949" /> + style="opacity:0.2;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.04394949" /> + id="rect1095" /> diff --git a/rtdata/images/svg/filter.svg b/rtdata/icons/rawtherapee/scalable/apps/filter.svg similarity index 59% rename from rtdata/images/svg/filter.svg rename to rtdata/icons/rawtherapee/scalable/apps/filter.svg index 684ffc35e..c106ea0d2 100644 --- a/rtdata/images/svg/filter.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/filter.svg @@ -2,67 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + id="path816" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/flip-horizontal.svg b/rtdata/icons/rawtherapee/scalable/apps/flip-horizontal.svg new file mode 100644 index 000000000..53011fcd1 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/flip-horizontal.svg @@ -0,0 +1,88 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/flip-vertical.svg b/rtdata/icons/rawtherapee/scalable/apps/flip-vertical.svg new file mode 100644 index 000000000..a8bb5a435 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/flip-vertical.svg @@ -0,0 +1,88 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/focusscreen-off.svg b/rtdata/icons/rawtherapee/scalable/apps/focusscreen-off.svg similarity index 54% rename from rtdata/images/svg/focusscreen-off.svg rename to rtdata/icons/rawtherapee/scalable/apps/focusscreen-off.svg index 0197b8b5d..88694a939 100644 --- a/rtdata/images/svg/focusscreen-off.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/focusscreen-off.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,24 +55,20 @@ + id="layer1"> + id="path8457" /> + id="path8455" /> diff --git a/rtdata/images/svg/focusscreen-on.svg b/rtdata/icons/rawtherapee/scalable/apps/focusscreen-on.svg similarity index 55% rename from rtdata/images/svg/focusscreen-on.svg rename to rtdata/icons/rawtherapee/scalable/apps/focusscreen-on.svg index b6a6149f7..6d585c82d 100644 --- a/rtdata/images/svg/focusscreen-on.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/focusscreen-on.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,9 +55,7 @@ + id="layer1"> + style="opacity:0.3;fill:#1ce434;fill-opacity:1.0;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="opacity:0.8;fill:#1ce434;fill-opacity:1.0;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="opacity:0.5;fill:#1ce434;fill-opacity:1.0;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> diff --git a/rtdata/images/svg/folder-closed-home-small.svg b/rtdata/icons/rawtherapee/scalable/apps/folder-closed-home-small.svg similarity index 64% rename from rtdata/images/svg/folder-closed-home-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/folder-closed-home-small.svg index e2988a681..ab30d780c 100644 --- a/rtdata/images/svg/folder-closed-home-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/folder-closed-home-small.svg @@ -2,61 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.5;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2.85361719;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2.7568562;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + style="display:inline;opacity:0.5;fill:#ffffff;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:4.52244794pt" + d="M 4,21 H 6.9090909 V 17.363636 H 9.0909091 V 21 H 12 v -3.636364 h 1.454545 L 8,14 2.5454545,17.363636 H 4 C 3.99789,18.81946 3.927319,19.546354 4,21 Z" /> diff --git a/rtdata/images/svg/folder-closed-home.svg b/rtdata/icons/rawtherapee/scalable/apps/folder-closed-home.svg similarity index 62% rename from rtdata/images/svg/folder-closed-home.svg rename to rtdata/icons/rawtherapee/scalable/apps/folder-closed-home.svg index d4bf64e15..3fb5168b3 100644 --- a/rtdata/images/svg/folder-closed-home.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/folder-closed-home.svg @@ -2,58 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + id="path1047" /> + id="rect1030" /> + style="display:inline;opacity:0.5;fill:#ffffff;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:4.52244794pt" + d="m 6,19 h 4 v -5 h 3 v 5 h 4 v -5 h 2 L 11.5,8 4,14 h 2 c -0.0029,2.001757 -0.099937,3.001237 0,5 z" /> + style="opacity:0.5;fill:#cccccc;fill-opacity:1.0;stroke:#cccccc;stroke-width:1.99999988;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0;paint-order:normal" /> + style="display:inline;opacity:0.7;fill:#ffffff;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:4.52244794pt" + id="path828" /> diff --git a/rtdata/images/svg/folder-closed-recent-small.svg b/rtdata/icons/rawtherapee/scalable/apps/folder-closed-recent-small.svg similarity index 67% rename from rtdata/images/svg/folder-closed-recent-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/folder-closed-recent-small.svg index e412e386c..b78ce69f0 100644 --- a/rtdata/images/svg/folder-closed-recent-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/folder-closed-recent-small.svg @@ -2,61 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.5;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2.85361719;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2.7568562;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> diff --git a/rtdata/images/svg/folder-closed-recent.svg b/rtdata/icons/rawtherapee/scalable/apps/folder-closed-recent.svg similarity index 67% rename from rtdata/images/svg/folder-closed-recent.svg rename to rtdata/icons/rawtherapee/scalable/apps/folder-closed-recent.svg index 84da8e236..8fab002eb 100644 --- a/rtdata/images/svg/folder-closed-recent.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/folder-closed-recent.svg @@ -2,58 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + id="path1047" /> + id="rect1030" /> + style="opacity:1;fill:#cccccc;fill-opacity:1.0;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:#cccccc;stroke-width:1.99999988;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="display:inline;opacity:0.7;fill:#ffffff;fill-opacity:1.0;stroke:none;stroke-width:1;enable-background:new" /> diff --git a/rtdata/images/svg/folder-closed-small.svg b/rtdata/icons/rawtherapee/scalable/apps/folder-closed-small.svg similarity index 65% rename from rtdata/images/svg/folder-closed-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/folder-closed-small.svg index f86f2157f..b35e607ca 100644 --- a/rtdata/images/svg/folder-closed-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/folder-closed-small.svg @@ -2,61 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -101,25 +56,19 @@ + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.5;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2.85361719;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2.7568562;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> diff --git a/rtdata/images/svg/folder-closed.svg b/rtdata/icons/rawtherapee/scalable/apps/folder-closed.svg similarity index 66% rename from rtdata/images/svg/folder-closed.svg rename to rtdata/icons/rawtherapee/scalable/apps/folder-closed.svg index 74166166c..14aec7062 100644 --- a/rtdata/images/svg/folder-closed.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/folder-closed.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.5;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1.85864949;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1.79562616;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> diff --git a/rtdata/images/svg/folder-open-recent-small.svg b/rtdata/icons/rawtherapee/scalable/apps/folder-open-recent-small.svg similarity index 66% rename from rtdata/images/svg/folder-open-recent-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/folder-open-recent-small.svg index dc2f2ec3f..b6f98a566 100644 --- a/rtdata/images/svg/folder-open-recent-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/folder-open-recent-small.svg @@ -2,65 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="path1026" /> + id="rect1030-7" /> diff --git a/rtdata/images/svg/folder-open-recent.svg b/rtdata/icons/rawtherapee/scalable/apps/folder-open-recent.svg similarity index 65% rename from rtdata/images/svg/folder-open-recent.svg rename to rtdata/icons/rawtherapee/scalable/apps/folder-open-recent.svg index c0baf0ccf..6c787a733 100644 --- a/rtdata/images/svg/folder-open-recent.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/folder-open-recent.svg @@ -2,61 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="opacity:1;fill:#cccccc;fill-opacity:1.0;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0;paint-order:normal" /> + style="display:inline;opacity:0.7;fill:#ffffff;fill-opacity:1.0;stroke:none;stroke-width:1;enable-background:new" /> + style="opacity:1;fill:#cccccc;fill-opacity:1.0;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0;paint-order:normal" /> + id="path1026" /> + id="rect1030" /> diff --git a/rtdata/images/svg/folder-open-small.svg b/rtdata/icons/rawtherapee/scalable/apps/folder-open-small.svg similarity index 64% rename from rtdata/images/svg/folder-open-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/folder-open-small.svg index f25394737..cd46e4db6 100644 --- a/rtdata/images/svg/folder-open-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/folder-open-small.svg @@ -2,65 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="path1026" /> + id="rect1030-7" /> diff --git a/rtdata/images/svg/folder-open.svg b/rtdata/icons/rawtherapee/scalable/apps/folder-open.svg similarity index 65% rename from rtdata/images/svg/folder-open.svg rename to rtdata/icons/rawtherapee/scalable/apps/folder-open.svg index 324a4bb9e..21545f938 100644 --- a/rtdata/images/svg/folder-open.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/folder-open.svg @@ -2,61 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + id="path1026" /> + id="rect1030" /> diff --git a/rtdata/images/svg/folder-subfolder.svg b/rtdata/icons/rawtherapee/scalable/apps/folder-subfolder.svg similarity index 100% rename from rtdata/images/svg/folder-subfolder.svg rename to rtdata/icons/rawtherapee/scalable/apps/folder-subfolder.svg diff --git a/rtdata/images/svg/fullscreen-enter.svg b/rtdata/icons/rawtherapee/scalable/apps/fullscreen-enter.svg similarity index 57% rename from rtdata/images/svg/fullscreen-enter.svg rename to rtdata/icons/rawtherapee/scalable/apps/fullscreen-enter.svg index 33e8bf568..7f0d34909 100644 --- a/rtdata/images/svg/fullscreen-enter.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/fullscreen-enter.svg @@ -2,60 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + id="path2866" /> + style="display:inline;opacity:0.9;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.0348262" /> + id="path3607" /> + style="display:inline;opacity:0.9;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.0348262" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0;paint-order:normal" /> diff --git a/rtdata/images/svg/fullscreen-leave.svg b/rtdata/icons/rawtherapee/scalable/apps/fullscreen-leave.svg similarity index 57% rename from rtdata/images/svg/fullscreen-leave.svg rename to rtdata/icons/rawtherapee/scalable/apps/fullscreen-leave.svg index 3eee818a9..e5f4fef5d 100644 --- a/rtdata/images/svg/fullscreen-leave.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/fullscreen-leave.svg @@ -2,60 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + id="path2866" /> + style="display:inline;opacity:0.9;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.0348262" /> + id="path3607" /> + style="display:inline;opacity:0.9;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.0348262" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0;paint-order:normal" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/gamut-hist.svg b/rtdata/icons/rawtherapee/scalable/apps/gamut-hist.svg new file mode 100644 index 000000000..ae9fbbc6c --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/gamut-hist.svg @@ -0,0 +1,68 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/gamut-plus.svg b/rtdata/icons/rawtherapee/scalable/apps/gamut-plus.svg similarity index 52% rename from rtdata/images/svg/gamut-plus.svg rename to rtdata/icons/rawtherapee/scalable/apps/gamut-plus.svg index c27796b70..cf3a74db3 100644 --- a/rtdata/images/svg/gamut-plus.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/gamut-plus.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,16 +55,13 @@ + id="layer1"> + id="path17368" /> diff --git a/rtdata/images/svg/gamut-softproof.svg b/rtdata/icons/rawtherapee/scalable/apps/gamut-softproof.svg similarity index 61% rename from rtdata/images/svg/gamut-softproof.svg rename to rtdata/icons/rawtherapee/scalable/apps/gamut-softproof.svg index ca37ca2a0..5898265a3 100644 --- a/rtdata/images/svg/gamut-softproof.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/gamut-softproof.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,15 +55,11 @@ + id="layer1"> + id="path4674" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.02833264px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + style="opacity:0.5;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.02833264px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> diff --git a/rtdata/images/svg/gamut-warning.svg b/rtdata/icons/rawtherapee/scalable/apps/gamut-warning.svg similarity index 64% rename from rtdata/images/svg/gamut-warning.svg rename to rtdata/icons/rawtherapee/scalable/apps/gamut-warning.svg index 9924857c3..a4d3bac09 100644 --- a/rtdata/images/svg/gamut-warning.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/gamut-warning.svg @@ -2,58 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> ! + style="fill:#cccccc;fill-opacity:1;stroke-width:0.95393">! diff --git a/rtdata/images/svg/gamut_srgb_prophoto_xy.svg b/rtdata/icons/rawtherapee/scalable/apps/gamut_srgb_prophoto_xy.svg similarity index 54% rename from rtdata/images/svg/gamut_srgb_prophoto_xy.svg rename to rtdata/icons/rawtherapee/scalable/apps/gamut_srgb_prophoto_xy.svg index 951b6611d..9297e0b0d 100644 --- a/rtdata/images/svg/gamut_srgb_prophoto_xy.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/gamut_srgb_prophoto_xy.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,28 +55,23 @@ + id="layer1"> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.03138535px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.03138535px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.03138535px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> diff --git a/rtdata/images/svg/gears-pause.svg b/rtdata/icons/rawtherapee/scalable/apps/gears-pause.svg similarity index 78% rename from rtdata/images/svg/gears-pause.svg rename to rtdata/icons/rawtherapee/scalable/apps/gears-pause.svg index b472a82f4..abcec7081 100644 --- a/rtdata/images/svg/gears-pause.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/gears-pause.svg @@ -2,58 +2,16 @@ - - - + width="24px" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1" /> + id="path6600" /> + id="rect1457" /> + id="path6613" /> + id="path1555" /> + id="path1557" /> + id="rect3267" /> diff --git a/rtdata/images/svg/gears-play.svg b/rtdata/icons/rawtherapee/scalable/apps/gears-play.svg similarity index 78% rename from rtdata/images/svg/gears-play.svg rename to rtdata/icons/rawtherapee/scalable/apps/gears-play.svg index 83c23557d..ebd5472cf 100644 --- a/rtdata/images/svg/gears-play.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/gears-play.svg @@ -2,65 +2,16 @@ - - - + width="24px" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1" /> + id="path6684" /> + id="path6691" /> + transform="matrix(-0.55642817,-1.3172307,1.3172307,-0.55642817,9.8702419,42.575431)" /> + transform="matrix(-0.55642817,-1.3172307,1.3172307,-0.55642817,9.8702419,42.575431)" /> + id="path1557" /> + style="display:inline;opacity:1;fill:#008000;fill-opacity:1.0;stroke:none;stroke-width:0.04999533" /> diff --git a/rtdata/images/svg/gears-small.svg b/rtdata/icons/rawtherapee/scalable/apps/gears-small.svg similarity index 79% rename from rtdata/images/svg/gears-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/gears-small.svg index 60cfdc609..89032cd2b 100644 --- a/rtdata/images/svg/gears-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/gears-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,8 +56,6 @@ + id="rect3267" /> + id="rect1457" /> + style="display:block;overflow:visible;visibility:visible;opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2.38783646;marker:none;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.5;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:3.08768296;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> diff --git a/rtdata/images/svg/gears.svg b/rtdata/icons/rawtherapee/scalable/apps/gears.svg similarity index 78% rename from rtdata/images/svg/gears.svg rename to rtdata/icons/rawtherapee/scalable/apps/gears.svg index 3a7785a6f..18f4008b7 100644 --- a/rtdata/images/svg/gears.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/gears.svg @@ -2,58 +2,16 @@ - - - + width="24px" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,33 +55,28 @@ + id="layer1" /> + style="display:block;overflow:visible;visibility:visible;opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1.54668486;marker:none;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.5;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + id="path1555" /> + id="path1557" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/goto-end-small.svg b/rtdata/icons/rawtherapee/scalable/apps/goto-end-small.svg new file mode 100644 index 000000000..d1d961a17 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/goto-end-small.svg @@ -0,0 +1,76 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/goto-start-small.svg b/rtdata/icons/rawtherapee/scalable/apps/goto-start-small.svg new file mode 100644 index 000000000..73ea31011 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/goto-start-small.svg @@ -0,0 +1,75 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/hand-closed-hicontrast.svg b/rtdata/icons/rawtherapee/scalable/apps/hand-closed-hicontrast.svg similarity index 82% rename from rtdata/images/svg/hand-closed-hicontrast.svg rename to rtdata/icons/rawtherapee/scalable/apps/hand-closed-hicontrast.svg index 0d6b00f95..0f180564f 100644 --- a/rtdata/images/svg/hand-closed-hicontrast.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/hand-closed-hicontrast.svg @@ -2,63 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + id="rect2901" /> + id="path840" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" /> + id="path852" /> + id="path844" /> + id="path861" /> diff --git a/rtdata/images/svg/hand-open-hicontrast.svg b/rtdata/icons/rawtherapee/scalable/apps/hand-open-hicontrast.svg similarity index 83% rename from rtdata/images/svg/hand-open-hicontrast.svg rename to rtdata/icons/rawtherapee/scalable/apps/hand-open-hicontrast.svg index 310eda2d1..996213632 100644 --- a/rtdata/images/svg/hand-open-hicontrast.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/hand-open-hicontrast.svg @@ -2,58 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,30 +55,22 @@ + id="layer1"> + id="path2954" /> + style="opacity:1;fill:#ffffff;fill-opacity:1.0;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0;paint-order:markers fill stroke" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#000000;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + id="path825" /> diff --git a/rtdata/images/svg/hand-open.svg b/rtdata/icons/rawtherapee/scalable/apps/hand-open.svg similarity index 83% rename from rtdata/images/svg/hand-open.svg rename to rtdata/icons/rawtherapee/scalable/apps/hand-open.svg index a7597b482..d0dad0da7 100644 --- a/rtdata/images/svg/hand-open.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/hand-open.svg @@ -2,58 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + id="path2954" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#000000;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + id="path825" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/histogram-bar-off-small.svg b/rtdata/icons/rawtherapee/scalable/apps/histogram-bar-off-small.svg new file mode 100644 index 000000000..7361523db --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/histogram-bar-off-small.svg @@ -0,0 +1,89 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/histogram-bar-on-small.svg b/rtdata/icons/rawtherapee/scalable/apps/histogram-bar-on-small.svg new file mode 100644 index 000000000..c8e8f10cf --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/histogram-bar-on-small.svg @@ -0,0 +1,89 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/histogram-blue-off-small.svg b/rtdata/icons/rawtherapee/scalable/apps/histogram-blue-off-small.svg similarity index 53% rename from rtdata/images/svg/histogram-blue-off-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/histogram-blue-off-small.svg index e78f3c19c..25e32d489 100644 --- a/rtdata/images/svg/histogram-blue-off-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/histogram-blue-off-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,11 +56,9 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,11 +56,9 @@ - - - + width="16" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="opacity:0.3;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="opacity:1;fill:none;fill-opacity:0.3;stroke:#000000;stroke-width:0.999999;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,11 +56,9 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,11 +56,9 @@ + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/histogram-green-on-small.svg b/rtdata/icons/rawtherapee/scalable/apps/histogram-green-on-small.svg new file mode 100644 index 000000000..b8b28dce0 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/histogram-green-on-small.svg @@ -0,0 +1,68 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/histogram-mode-linear-small.svg b/rtdata/icons/rawtherapee/scalable/apps/histogram-mode-linear-small.svg similarity index 59% rename from rtdata/images/svg/histogram-mode-linear-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/histogram-mode-linear-small.svg index 52b914762..5517f2fff 100644 --- a/rtdata/images/svg/histogram-mode-linear-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/histogram-mode-linear-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> diff --git a/rtdata/images/svg/histogram-mode-logx-small.svg b/rtdata/icons/rawtherapee/scalable/apps/histogram-mode-logx-small.svg similarity index 63% rename from rtdata/images/svg/histogram-mode-logx-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/histogram-mode-logx-small.svg index 0eb016d00..cc1574aed 100644 --- a/rtdata/images/svg/histogram-mode-logx-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/histogram-mode-logx-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> diff --git a/rtdata/images/svg/histogram-mode-logxy-small.svg b/rtdata/icons/rawtherapee/scalable/apps/histogram-mode-logxy-small.svg similarity index 60% rename from rtdata/images/svg/histogram-mode-logxy-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/histogram-mode-logxy-small.svg index e0b69c4e5..7f72b1e55 100644 --- a/rtdata/images/svg/histogram-mode-logxy-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/histogram-mode-logxy-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> diff --git a/rtdata/images/svg/histogram-red-off-small.svg b/rtdata/icons/rawtherapee/scalable/apps/histogram-red-off-small.svg similarity index 53% rename from rtdata/images/svg/histogram-red-off-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/histogram-red-off-small.svg index ec4200483..60b67ddec 100644 --- a/rtdata/images/svg/histogram-red-off-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/histogram-red-off-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,11 +56,9 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,11 +56,9 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,11 +56,9 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,11 +56,9 @@ + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/histogram-type-histogram-small.svg b/rtdata/icons/rawtherapee/scalable/apps/histogram-type-histogram-small.svg similarity index 55% rename from rtdata/images/svg/histogram-type-histogram-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/histogram-type-histogram-small.svg index 1d2f6547e..f8399c527 100644 --- a/rtdata/images/svg/histogram-type-histogram-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/histogram-type-histogram-small.svg @@ -1,57 +1,15 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="path851" /> + style="opacity:0.3;fill:#cccccc;stroke-linecap:square;fill-opacity:1.0" /> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Lawrence Lee @@ -96,11 +54,9 @@ diff --git a/rtdata/images/svg/histogram-type-vectorscope-hc-small.svg b/rtdata/icons/rawtherapee/scalable/apps/histogram-type-vectorscope-hc-small.svg similarity index 52% rename from rtdata/images/svg/histogram-type-vectorscope-hc-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/histogram-type-vectorscope-hc-small.svg index ef2e8b51f..056197557 100644 --- a/rtdata/images/svg/histogram-type-vectorscope-hc-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/histogram-type-vectorscope-hc-small.svg @@ -1,57 +1,15 @@ - - - + width="16" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Lawrence Lee @@ -96,8 +54,6 @@ + style="opacity:0.3;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="opacity:1;fill:none;fill-opacity:1;stroke:#cccccc;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="fill:none;stroke:#cccccc;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0" /> + style="opacity:1;fill:none;fill-opacity:0.3;stroke:#000000;stroke-width:0.999999;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> diff --git a/rtdata/images/svg/histogram-type-vectorscope-hs-small.svg b/rtdata/icons/rawtherapee/scalable/apps/histogram-type-vectorscope-hs-small.svg similarity index 51% rename from rtdata/images/svg/histogram-type-vectorscope-hs-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/histogram-type-vectorscope-hs-small.svg index 62bbf9586..46901f74c 100644 --- a/rtdata/images/svg/histogram-type-vectorscope-hs-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/histogram-type-vectorscope-hs-small.svg @@ -1,57 +1,15 @@ - - - + width="16" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Lawrence Lee @@ -96,8 +54,6 @@ + style="opacity:0.3;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="opacity:1;fill:none;fill-opacity:1;stroke:#cccccc;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="fill:none;stroke:#cccccc;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0" /> + style="opacity:1;fill:none;fill-opacity:0.3;stroke:#000000;stroke-width:0.999999;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> diff --git a/rtdata/images/svg/histogram-type-waveform-small.svg b/rtdata/icons/rawtherapee/scalable/apps/histogram-type-waveform-small.svg similarity index 54% rename from rtdata/images/svg/histogram-type-waveform-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/histogram-type-waveform-small.svg index 5147ab2fc..1ea706e50 100644 --- a/rtdata/images/svg/histogram-type-waveform-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/histogram-type-waveform-small.svg @@ -1,57 +1,15 @@ - - - + width="16" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Lawrence Lee @@ -96,27 +54,24 @@ + style="fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + style="opacity:0.3;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="opacity:1;fill:none;fill-opacity:0.3;stroke:#000000;stroke-width:0.999999;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> diff --git a/rtdata/images/svg/info.svg b/rtdata/icons/rawtherapee/scalable/apps/info.svg similarity index 62% rename from rtdata/images/svg/info.svg rename to rtdata/icons/rawtherapee/scalable/apps/info.svg index 8805fcad4..e18ec4f98 100644 --- a/rtdata/images/svg/info.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/info.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> i + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:18.522px;font-family:Georgia;-inkscape-font-specification:'Georgia Bold';fill:#ffffff;fill-opacity:1;stroke-width:1px">i diff --git a/rtdata/images/svg/intent-absolute.svg b/rtdata/icons/rawtherapee/scalable/apps/intent-absolute.svg similarity index 54% rename from rtdata/images/svg/intent-absolute.svg rename to rtdata/icons/rawtherapee/scalable/apps/intent-absolute.svg index 055759ad1..ba059358e 100644 --- a/rtdata/images/svg/intent-absolute.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/intent-absolute.svg @@ -2,67 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + id="path1194" /> + id="path1196" /> + id="path1198" /> + id="path1200" /> + id="path1202" /> + id="path1204" /> + id="path1206" /> + id="path1208" /> + id="path1210" /> + id="path1212" /> + id="path1214" /> + id="path1216" /> + id="path1234" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path1326" /> diff --git a/rtdata/images/svg/intent-perceptual.svg b/rtdata/icons/rawtherapee/scalable/apps/intent-perceptual.svg similarity index 56% rename from rtdata/images/svg/intent-perceptual.svg rename to rtdata/icons/rawtherapee/scalable/apps/intent-perceptual.svg index 2e845cd39..4640e737f 100644 --- a/rtdata/images/svg/intent-perceptual.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/intent-perceptual.svg @@ -2,67 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + id="path1194" /> + id="path1196" /> + id="path1198" /> + id="path1200" /> + id="path1202" /> + id="path1204" /> + id="path1206" /> + id="path1208" /> + id="path1210" /> + id="path1212" /> + id="path1214" /> + id="path1216" /> + id="path1234" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path1322" /> + id="path1324" /> + id="path1326" /> diff --git a/rtdata/images/svg/intent-relative.svg b/rtdata/icons/rawtherapee/scalable/apps/intent-relative.svg similarity index 54% rename from rtdata/images/svg/intent-relative.svg rename to rtdata/icons/rawtherapee/scalable/apps/intent-relative.svg index 04e553796..0ba10bbf8 100644 --- a/rtdata/images/svg/intent-relative.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/intent-relative.svg @@ -2,67 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + id="path1194" /> + id="path1196" /> + id="path1198" /> + id="path1200" /> + id="path1202" /> + id="path1204" /> + id="path1206" /> + id="path1208" /> + id="path1210" /> + id="path1212" /> + id="path1214" /> + id="path1216" /> + id="path1234" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path1326" /> diff --git a/rtdata/images/svg/intent-saturation.svg b/rtdata/icons/rawtherapee/scalable/apps/intent-saturation.svg similarity index 56% rename from rtdata/images/svg/intent-saturation.svg rename to rtdata/icons/rawtherapee/scalable/apps/intent-saturation.svg index 569c54962..4ffd0c108 100644 --- a/rtdata/images/svg/intent-saturation.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/intent-saturation.svg @@ -2,67 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + id="path1194" /> + id="path1196" /> + id="path1198" /> + id="path1200" /> + id="path1202" /> + id="path1204" /> + id="path1206" /> + id="path1208" /> + id="path1210" /> + id="path1212" /> + id="path1214" /> + id="path1216" /> + id="path1234" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path1322" /> + id="path1324" /> + id="path1326" /> diff --git a/rtdata/images/svg/magnifier-1to1-small.svg b/rtdata/icons/rawtherapee/scalable/apps/magnifier-1to1-small.svg similarity index 59% rename from rtdata/images/svg/magnifier-1to1-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/magnifier-1to1-small.svg index 68aa7d6c2..f75599891 100644 --- a/rtdata/images/svg/magnifier-1to1-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/magnifier-1to1-small.svg @@ -2,58 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -98,46 +56,36 @@ + id="circle818" /> + id="path846" /> + id="path848" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:125%;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L';letter-spacing:0px;word-spacing:0px;opacity:0.9;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:125%;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L';letter-spacing:0px;word-spacing:0px;opacity:0.9;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:#cccccc;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> + id="path848" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:125%;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L';letter-spacing:0px;word-spacing:0px;opacity:0.9;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:125%;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L';letter-spacing:0px;word-spacing:0px;opacity:0.9;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> diff --git a/rtdata/images/svg/magnifier-crop.svg b/rtdata/icons/rawtherapee/scalable/apps/magnifier-crop.svg similarity index 56% rename from rtdata/images/svg/magnifier-crop.svg rename to rtdata/icons/rawtherapee/scalable/apps/magnifier-crop.svg index 54d6e3e9e..0578d3f2d 100644 --- a/rtdata/images/svg/magnifier-crop.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/magnifier-crop.svg @@ -2,59 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:#cccccc;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> + id="rect1322" /> + style="opacity:0.9;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.97660822;paint-order:normal" /> + style="opacity:0.9;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.97660822;paint-order:normal" /> diff --git a/rtdata/images/svg/magnifier-fit.svg b/rtdata/icons/rawtherapee/scalable/apps/magnifier-fit.svg similarity index 65% rename from rtdata/images/svg/magnifier-fit.svg rename to rtdata/icons/rawtherapee/scalable/apps/magnifier-fit.svg index 1d531e2d7..41ecf8f96 100644 --- a/rtdata/images/svg/magnifier-fit.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/magnifier-fit.svg @@ -2,59 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:#cccccc;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> + id="rect921" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.9;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + id="path819" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.9;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> diff --git a/rtdata/images/svg/magnifier-minus-small.svg b/rtdata/icons/rawtherapee/scalable/apps/magnifier-minus-small.svg similarity index 58% rename from rtdata/images/svg/magnifier-minus-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/magnifier-minus-small.svg index 08871ed77..cf8e5e61f 100644 --- a/rtdata/images/svg/magnifier-minus-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/magnifier-minus-small.svg @@ -2,58 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -98,24 +56,20 @@ + id="circle818" /> + style="opacity:0.9;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" + d="M 4.0142425,15 H 9.9857576" /> diff --git a/rtdata/images/svg/magnifier-minus.svg b/rtdata/icons/rawtherapee/scalable/apps/magnifier-minus.svg similarity index 59% rename from rtdata/images/svg/magnifier-minus.svg rename to rtdata/icons/rawtherapee/scalable/apps/magnifier-minus.svg index 567845d57..7580620c2 100644 --- a/rtdata/images/svg/magnifier-minus.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/magnifier-minus.svg @@ -2,59 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -98,11 +55,9 @@ + id="layer1"> + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:#cccccc;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> + style="opacity:0.9;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" + d="m 6,10 h 8" /> diff --git a/rtdata/images/svg/magnifier-plus-small.svg b/rtdata/icons/rawtherapee/scalable/apps/magnifier-plus-small.svg similarity index 59% rename from rtdata/images/svg/magnifier-plus-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/magnifier-plus-small.svg index a93e8cd8e..99828597e 100644 --- a/rtdata/images/svg/magnifier-plus-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/magnifier-plus-small.svg @@ -2,58 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -98,24 +56,20 @@ + id="circle818" /> + style="opacity:0.9;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" + d="M 4.0142425,15 H 9.9857576 M 7.0000001,12.014242 v 5.971515" /> diff --git a/rtdata/images/svg/magnifier-plus.svg b/rtdata/icons/rawtherapee/scalable/apps/magnifier-plus.svg similarity index 59% rename from rtdata/images/svg/magnifier-plus.svg rename to rtdata/icons/rawtherapee/scalable/apps/magnifier-plus.svg index a98c19bad..8ff545e7a 100644 --- a/rtdata/images/svg/magnifier-plus.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/magnifier-plus.svg @@ -2,59 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -98,11 +55,9 @@ + id="layer1"> + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:#cccccc;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> + style="opacity:0.9;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" + d="m 6,10 h 8 M 10,6 v 8" /> diff --git a/rtdata/images/svg/magnifier.svg b/rtdata/icons/rawtherapee/scalable/apps/magnifier.svg similarity index 63% rename from rtdata/images/svg/magnifier.svg rename to rtdata/icons/rawtherapee/scalable/apps/magnifier.svg index 3b7ae2fd2..2e216d703 100644 --- a/rtdata/images/svg/magnifier.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/magnifier.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:#cccccc;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> diff --git a/rtdata/images/svg/metadata.svg b/rtdata/icons/rawtherapee/scalable/apps/metadata.svg similarity index 69% rename from rtdata/images/svg/metadata.svg rename to rtdata/icons/rawtherapee/scalable/apps/metadata.svg index 695d2af1a..78c9d8836 100644 --- a/rtdata/images/svg/metadata.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/metadata.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,9 +55,7 @@ + id="layer1"> @@ -108,16 +65,16 @@ height="310.3132" width="51.57206" id="rect3325-3" - style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#2a7fff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none" /> + style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none" /> + style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none" /> + style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/node-move-nw-se-hicontrast.svg b/rtdata/icons/rawtherapee/scalable/apps/node-move-nw-se-hicontrast.svg new file mode 100644 index 000000000..e577c6293 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/node-move-nw-se-hicontrast.svg @@ -0,0 +1,78 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/node-move-sw-ne-hicontrast.svg b/rtdata/icons/rawtherapee/scalable/apps/node-move-sw-ne-hicontrast.svg new file mode 100644 index 000000000..707895b3b --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/node-move-sw-ne-hicontrast.svg @@ -0,0 +1,78 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/node-move-x-hicontrast.svg b/rtdata/icons/rawtherapee/scalable/apps/node-move-x-hicontrast.svg new file mode 100644 index 000000000..f62f5368e --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/node-move-x-hicontrast.svg @@ -0,0 +1,74 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/node-move-xy-hicontrast.svg b/rtdata/icons/rawtherapee/scalable/apps/node-move-xy-hicontrast.svg new file mode 100644 index 000000000..7d0bd110d --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/node-move-xy-hicontrast.svg @@ -0,0 +1,108 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/node-move-y-hicontrast.svg b/rtdata/icons/rawtherapee/scalable/apps/node-move-y-hicontrast.svg new file mode 100644 index 000000000..f0718b688 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/node-move-y-hicontrast.svg @@ -0,0 +1,78 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/one-to-one-small.svg b/rtdata/icons/rawtherapee/scalable/apps/one-to-one-small.svg similarity index 57% rename from rtdata/images/svg/one-to-one-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/one-to-one-small.svg index 8b08f99d0..7ff044aff 100644 --- a/rtdata/images/svg/one-to-one-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/one-to-one-small.svg @@ -2,58 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:550px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';letter-spacing:-60px;word-spacing:0px;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.02110476;stroke-opacity:1" + d="M 5.6806,21.24916 H 3.7403 v -7.37477 c -0.7089,0.66854 -0.8974,0.72796 -1.8595,1.04829 v -1.77579 c 0.5064,-0.16713 0.4095,-0.0478 1.0033,-0.51208 0.5938,-0.46889 1.0012,-1.0144 1.2222,-1.63651 h 1.5743 v 10.25086" /> + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:550px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';letter-spacing:-60px;word-spacing:0px;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.02110476;stroke-opacity:1" + id="path11693" /> + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:550px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';letter-spacing:-60px;word-spacing:0px;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.02110476;stroke-opacity:1" + id="path11687" /> + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:550px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';letter-spacing:-60px;word-spacing:0px;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.02110476;stroke-opacity:1" + d="M 7,17.95685 V 16 h 1.9403 v 1.95685 H 7" /> + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:550px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';letter-spacing:-60px;word-spacing:0px;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.02110476;stroke-opacity:1" + d="M 26.3822,20.10325 H 24.882 v -5.70208 c -0.5481,0.51691 -0.6939,0.56285 -1.4378,0.81053 v -1.37302 c 0.3916,-0.12922 0.3166,-0.037 0.7758,-0.39593 0.4591,-0.36254 0.7741,-0.78432 0.9449,-1.26533 h 1.2173 v 7.92583" /> + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:550px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';letter-spacing:-60px;word-spacing:0px;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.02110476;stroke-opacity:1" + id="path42317" /> + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:550px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';letter-spacing:-60px;word-spacing:0px;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.02110476;stroke-opacity:1" + id="path42319" /> + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:550px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';letter-spacing:-60px;word-spacing:0px;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.02110476;stroke-opacity:1" + d="m 27.3807,17.55768 v -1.51301 h 1.5002 v 1.51301 h -1.5002" /> + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:550px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';letter-spacing:-60px;word-spacing:0px;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.02110476;stroke-opacity:1" + d="m -14.5192,19.51664 v -1.33606 h 1.336 v 1.33606 h -1.336" /> + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:550px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';letter-spacing:-60px;word-spacing:0px;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.02110476;stroke-opacity:1" + id="path11695-3" /> + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:550px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';letter-spacing:-60px;word-spacing:0px;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.02110476;stroke-opacity:1" + d="m -10.2779,20.01486 h -1.5465 v -7.78227 h 1.5465 v 7.78227" /> + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:550px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';letter-spacing:-60px;word-spacing:0px;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.02110476;stroke-opacity:1" + id="path3061" /> + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:550px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';letter-spacing:-60px;word-spacing:0px;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.02110476;stroke-opacity:1" + id="path3861" /> + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:550px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';letter-spacing:-60px;word-spacing:0px;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.02110476;stroke-opacity:1" + d="m -34.7301,17.15962 v -1.83786 h 1.8378 v 1.83786 h -1.8378" /> + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:550px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';letter-spacing:-60px;word-spacing:0px;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.02110476;stroke-opacity:1" + id="path3865" /> + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:550px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';letter-spacing:-60px;word-spacing:0px;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.02110476;stroke-opacity:1" + d="m -36.5992,21.47631 h -2.1273 V 10.77115 h 2.1273 v 10.70516" /> + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';letter-spacing:-2px;word-spacing:0px;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1;paint-order:normal" /> + id="path848" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:125%;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L';letter-spacing:0px;word-spacing:0px;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;opacity:0.7" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:125%;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L';letter-spacing:0px;word-spacing:0px;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;opacity:0.7" /> diff --git a/rtdata/images/svg/padlock-locked-small.svg b/rtdata/icons/rawtherapee/scalable/apps/padlock-locked-small.svg similarity index 60% rename from rtdata/images/svg/padlock-locked-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/padlock-locked-small.svg index 27f1bc510..1ab5c85d4 100644 --- a/rtdata/images/svg/padlock-locked-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/padlock-locked-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.17045528;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> diff --git a/rtdata/images/svg/padlock-unlocked-small.svg b/rtdata/icons/rawtherapee/scalable/apps/padlock-unlocked-small.svg similarity index 60% rename from rtdata/images/svg/padlock-unlocked-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/padlock-unlocked-small.svg index 0c282c8cf..8e0f284c8 100644 --- a/rtdata/images/svg/padlock-unlocked-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/padlock-unlocked-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,31 +56,23 @@ + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.17045528;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> diff --git a/rtdata/images/svg/palette-brush.svg b/rtdata/icons/rawtherapee/scalable/apps/palette-brush.svg similarity index 62% rename from rtdata/images/svg/palette-brush.svg rename to rtdata/icons/rawtherapee/scalable/apps/palette-brush.svg index 30eaac0d6..79614edf9 100644 --- a/rtdata/images/svg/palette-brush.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/palette-brush.svg @@ -2,63 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -102,31 +55,22 @@ + id="layer1"> + id="path3964" /> + id="rect886" /> + id="rect889" /> + id="path892" /> diff --git a/rtdata/images/svg/panel-to-bottom.svg b/rtdata/icons/rawtherapee/scalable/apps/panel-to-bottom.svg similarity index 53% rename from rtdata/images/svg/panel-to-bottom.svg rename to rtdata/icons/rawtherapee/scalable/apps/panel-to-bottom.svg index 8e63c0309..63494a4a4 100644 --- a/rtdata/images/svg/panel-to-bottom.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/panel-to-bottom.svg @@ -2,59 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:#cccccc;stroke-width:1;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> diff --git a/rtdata/images/svg/perspective-horizontal-left-small.svg b/rtdata/icons/rawtherapee/scalable/apps/perspective-horizontal-left-small.svg similarity index 56% rename from rtdata/images/svg/perspective-horizontal-left-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/perspective-horizontal-left-small.svg index c4797a6a2..1a386806a 100644 --- a/rtdata/images/svg/perspective-horizontal-left-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/perspective-horizontal-left-small.svg @@ -2,58 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -98,26 +56,18 @@ + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1.0;paint-order:normal" + id="path1207" /> + id="rect1209" /> + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:1.00157475;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1.0;paint-order:normal" + d="m 6.6071429,11.622449 v 8.755102 m 5.1937041,-8.013144 v 7.271186 M 14.15,17.269231 2.3313953,17.918605 M 14.15,14.730769 2.3313953,14.081395 M 14.15,19.3 2.3313953,20.988372 V 11.011628 L 14.15,12.7 Z" /> diff --git a/rtdata/images/svg/perspective-horizontal-left.svg b/rtdata/icons/rawtherapee/scalable/apps/perspective-horizontal-left.svg similarity index 67% rename from rtdata/images/svg/perspective-horizontal-left.svg rename to rtdata/icons/rawtherapee/scalable/apps/perspective-horizontal-left.svg index 18ce37ea3..3c7939410 100644 --- a/rtdata/images/svg/perspective-horizontal-left.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/perspective-horizontal-left.svg @@ -2,58 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" + d="M 56,2 V 22 M 48,2 V 22 M 42,16 H 62 M 42,8 H 62 M 42,2 H 62 V 22 H 42 Z" /> diff --git a/rtdata/images/svg/perspective-horizontal-right-small.svg b/rtdata/icons/rawtherapee/scalable/apps/perspective-horizontal-right-small.svg similarity index 56% rename from rtdata/images/svg/perspective-horizontal-right-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/perspective-horizontal-right-small.svg index 4721117c8..e10aa2880 100644 --- a/rtdata/images/svg/perspective-horizontal-right-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/perspective-horizontal-right-small.svg @@ -2,58 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -98,26 +56,18 @@ + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1.0;paint-order:normal" + id="path1207" /> + id="rect1209" /> + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:1.00157475;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1.0;paint-order:normal" + d="m 9.8742524,11.622449 v 8.755102 M 4.6805483,12.364407 v 7.271186 M 2.3313953,17.269231 14.15,17.918605 M 2.3313953,14.730769 14.15,14.081395 M 2.3313953,19.3 14.15,20.988372 V 11.011628 L 2.3313953,12.7 Z" /> diff --git a/rtdata/images/svg/perspective-horizontal-right.svg b/rtdata/icons/rawtherapee/scalable/apps/perspective-horizontal-right.svg similarity index 67% rename from rtdata/images/svg/perspective-horizontal-right.svg rename to rtdata/icons/rawtherapee/scalable/apps/perspective-horizontal-right.svg index 809e94123..9e16927ae 100644 --- a/rtdata/images/svg/perspective-horizontal-right.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/perspective-horizontal-right.svg @@ -2,59 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" + d="M 56,2 V 22 M 48,2 V 22 M 42,16 H 62 M 42,8 H 62 M 42,2 H 62 V 22 H 42 Z" /> diff --git a/rtdata/images/svg/perspective-horizontal-vertical.svg b/rtdata/icons/rawtherapee/scalable/apps/perspective-horizontal-vertical.svg similarity index 67% rename from rtdata/images/svg/perspective-horizontal-vertical.svg rename to rtdata/icons/rawtherapee/scalable/apps/perspective-horizontal-vertical.svg index 0c5046879..fe267866f 100644 --- a/rtdata/images/svg/perspective-horizontal-vertical.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/perspective-horizontal-vertical.svg @@ -2,57 +2,16 @@ - - - + width="24px" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,21 +55,14 @@ + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" + d="M 56,2 V 22 M 48,2 V 22 M 42,16 H 62 M 42,8 H 62 M 42,2 H 62 V 22 H 42 Z" /> diff --git a/rtdata/images/svg/perspective-vertical-bottom-small.svg b/rtdata/icons/rawtherapee/scalable/apps/perspective-vertical-bottom-small.svg similarity index 56% rename from rtdata/images/svg/perspective-vertical-bottom-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/perspective-vertical-bottom-small.svg index 80f023b74..14e4c4474 100644 --- a/rtdata/images/svg/perspective-vertical-bottom-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/perspective-vertical-bottom-small.svg @@ -2,58 +2,16 @@ - - - + width="16" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -98,26 +56,18 @@ + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1.0;paint-order:normal" + d="m 21.5,18.5 h 13 m -13,-5 h 13 m -4,-3 v 11 m -5,-11 v 11 m -4,-11 h 13 v 11 h -13 z" /> + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1.0;paint-order:normal" + id="path992" /> + id="path1014" /> diff --git a/rtdata/images/svg/perspective-vertical-bottom.svg b/rtdata/icons/rawtherapee/scalable/apps/perspective-vertical-bottom.svg similarity index 67% rename from rtdata/images/svg/perspective-vertical-bottom.svg rename to rtdata/icons/rawtherapee/scalable/apps/perspective-vertical-bottom.svg index 4cc5bf0f3..aec86fbcd 100644 --- a/rtdata/images/svg/perspective-vertical-bottom.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/perspective-vertical-bottom.svg @@ -2,57 +2,16 @@ - - - + width="24px" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" + d="M 56,2 V 22 M 48,2 V 22 M 42,16 H 62 M 42,8 H 62 M 42,2 H 62 V 22 H 42 Z" /> diff --git a/rtdata/images/svg/perspective-vertical-top-small.svg b/rtdata/icons/rawtherapee/scalable/apps/perspective-vertical-top-small.svg similarity index 56% rename from rtdata/images/svg/perspective-vertical-top-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/perspective-vertical-top-small.svg index 1ec0fafa7..ba15938ce 100644 --- a/rtdata/images/svg/perspective-vertical-top-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/perspective-vertical-top-small.svg @@ -2,58 +2,16 @@ - - - + width="16" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -98,26 +56,18 @@ + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1.0;paint-order:normal" + d="m 21.5,18.5 h 13 m -13,-5 h 13 m -4,-3 v 11 m -5,-11 v 11 m -4,-11 h 13 v 11 h -13 z" /> + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1.0;paint-order:normal" + id="path992" /> + id="path1014" /> diff --git a/rtdata/images/svg/perspective-vertical-top.svg b/rtdata/icons/rawtherapee/scalable/apps/perspective-vertical-top.svg similarity index 67% rename from rtdata/images/svg/perspective-vertical-top.svg rename to rtdata/icons/rawtherapee/scalable/apps/perspective-vertical-top.svg index 34f75fe7f..d2fe215f7 100644 --- a/rtdata/images/svg/perspective-vertical-top.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/perspective-vertical-top.svg @@ -2,57 +2,16 @@ - - - + width="24px" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" + d="M 56,2 V 22 M 48,2 V 22 M 42,16 H 62 M 42,8 H 62 M 42,2 H 62 V 22 H 42 Z" /> diff --git a/rtdata/images/svg/power-inconsistent-small.svg b/rtdata/icons/rawtherapee/scalable/apps/power-inconsistent-small.svg similarity index 53% rename from rtdata/images/svg/power-inconsistent-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/power-inconsistent-small.svg index 305f504cd..4f3fc18d2 100644 --- a/rtdata/images/svg/power-inconsistent-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/power-inconsistent-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="path5608" /> + id="path2553" /> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,18 +54,14 @@ + id="path5608" /> + id="path2553" /> diff --git a/rtdata/images/svg/power-on-small.svg b/rtdata/icons/rawtherapee/scalable/apps/power-on-small.svg similarity index 64% rename from rtdata/images/svg/power-on-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/power-on-small.svg index 271c8e53e..a8b6e559a 100644 --- a/rtdata/images/svg/power-on-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/power-on-small.svg @@ -1,60 +1,15 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + transform="translate(0,-8)"> + id="path5608-3" /> + id="path2553-6" /> + id="path5608-36" /> + id="path2553-7" /> diff --git a/rtdata/images/svg/preferences.svg b/rtdata/icons/rawtherapee/scalable/apps/preferences.svg similarity index 58% rename from rtdata/images/svg/preferences.svg rename to rtdata/icons/rawtherapee/scalable/apps/preferences.svg index db6794736..e742d74a7 100644 --- a/rtdata/images/svg/preferences.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/preferences.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,15 +55,13 @@ + id="layer1"> + style="opacity:1;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.03404313" /> + style="opacity:0.9;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.04394949" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.03930962" /> + id="rect1095" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/profile-partial.svg b/rtdata/icons/rawtherapee/scalable/apps/profile-partial.svg new file mode 100644 index 000000000..5d58013ba --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/profile-partial.svg @@ -0,0 +1,92 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/questionmark.svg b/rtdata/icons/rawtherapee/scalable/apps/questionmark.svg similarity index 65% rename from rtdata/images/svg/questionmark.svg rename to rtdata/icons/rawtherapee/scalable/apps/questionmark.svg index 4c4b59590..855873047 100644 --- a/rtdata/images/svg/questionmark.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/questionmark.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,27 +55,24 @@ + id="layer1"> ? + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:18.522px;font-family:Georgia;-inkscape-font-specification:'Georgia Bold';fill:#ffffff;fill-opacity:1;stroke-width:1px">? diff --git a/rtdata/images/svg/redo-all.svg b/rtdata/icons/rawtherapee/scalable/apps/redo-all.svg similarity index 58% rename from rtdata/images/svg/redo-all.svg rename to rtdata/icons/rawtherapee/scalable/apps/redo-all.svg index f9dbaad23..0d9dac982 100644 --- a/rtdata/images/svg/redo-all.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/redo-all.svg @@ -2,66 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -105,28 +55,22 @@ + id="layer1"> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:#cccccc;stroke-width:1.58443224;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.35;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1.58443224;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + style="opacity:0.35;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1.58443224;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1;paint-order:normal" /> diff --git a/rtdata/images/svg/redo-small.svg b/rtdata/icons/rawtherapee/scalable/apps/redo-small.svg similarity index 54% rename from rtdata/images/svg/redo-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/redo-small.svg index 639aebb42..6c0fabd46 100644 --- a/rtdata/images/svg/redo-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/redo-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="path815" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/redo.svg b/rtdata/icons/rawtherapee/scalable/apps/redo.svg new file mode 100644 index 000000000..394ae22e2 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/redo.svg @@ -0,0 +1,64 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/refresh-red-small.svg b/rtdata/icons/rawtherapee/scalable/apps/refresh-red-small.svg similarity index 57% rename from rtdata/images/svg/refresh-red-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/refresh-red-small.svg index 498faafe8..22222eb69 100644 --- a/rtdata/images/svg/refresh-red-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/refresh-red-small.svg @@ -2,62 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -102,39 +56,27 @@ + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#c00000;stroke-width:2.13567448;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0;paint-order:normal" /> + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#c00000;stroke-width:2.13567448;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0;paint-order:normal" /> + style="display:inline;opacity:0.7;fill:#c00000;fill-opacity:1.0;stroke:none;stroke-width:0.03718871" /> + id="path829" /> diff --git a/rtdata/images/svg/refresh-small.svg b/rtdata/icons/rawtherapee/scalable/apps/refresh-small.svg similarity index 56% rename from rtdata/images/svg/refresh-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/refresh-small.svg index d9ca603ef..d1c6c821f 100644 --- a/rtdata/images/svg/refresh-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/refresh-small.svg @@ -2,62 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="display:inline;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.04338683" /> + id="path829" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/refresh.svg b/rtdata/icons/rawtherapee/scalable/apps/refresh.svg new file mode 100644 index 000000000..8d4aa1c73 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/refresh.svg @@ -0,0 +1,76 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/remove-small.svg b/rtdata/icons/rawtherapee/scalable/apps/remove-small.svg new file mode 100644 index 000000000..796a415a7 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/remove-small.svg @@ -0,0 +1,77 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/remove.svg b/rtdata/icons/rawtherapee/scalable/apps/remove.svg new file mode 100644 index 000000000..b3487a896 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/remove.svg @@ -0,0 +1,74 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/rotate-aroundnode-hicontrast.svg b/rtdata/icons/rawtherapee/scalable/apps/rotate-aroundnode-hicontrast.svg similarity index 56% rename from rtdata/images/svg/rotate-aroundnode-hicontrast.svg rename to rtdata/icons/rawtherapee/scalable/apps/rotate-aroundnode-hicontrast.svg index fda645c55..28d0eecf3 100644 --- a/rtdata/images/svg/rotate-aroundnode-hicontrast.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/rotate-aroundnode-hicontrast.svg @@ -2,62 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -101,17 +55,15 @@ + id="layer1"> diff --git a/rtdata/images/svg/rotate-aroundnode.svg b/rtdata/icons/rawtherapee/scalable/apps/rotate-aroundnode.svg similarity index 56% rename from rtdata/images/svg/rotate-aroundnode.svg rename to rtdata/icons/rawtherapee/scalable/apps/rotate-aroundnode.svg index 67ac406fa..a515aae6a 100644 --- a/rtdata/images/svg/rotate-aroundnode.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/rotate-aroundnode.svg @@ -2,62 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + id="path1597" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.5;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + style="opacity:0.9;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1" /> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + id="path2866" /> + style="display:inline;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.0348262" /> + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0;paint-order:normal" /> + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2, 2;stroke-dashoffset:10;stroke-opacity:1.0;paint-order:normal" /> 90° + id="tspan16">90° diff --git a/rtdata/images/svg/rotate-left-small.svg b/rtdata/icons/rawtherapee/scalable/apps/rotate-left-small.svg similarity index 50% rename from rtdata/images/svg/rotate-left-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/rotate-left-small.svg index d85b5e8ea..fad01fe23 100644 --- a/rtdata/images/svg/rotate-left-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/rotate-left-small.svg @@ -2,65 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -105,49 +56,33 @@ + id="path1029" /> + style="opacity:0.9;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.54308969" /> + id="path1085" /> + id="path1096" /> + id="path1103" /> diff --git a/rtdata/images/svg/rotate-left.svg b/rtdata/icons/rawtherapee/scalable/apps/rotate-left.svg similarity index 55% rename from rtdata/images/svg/rotate-left.svg rename to rtdata/icons/rawtherapee/scalable/apps/rotate-left.svg index c66020379..7c1e5fa1c 100644 --- a/rtdata/images/svg/rotate-left.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/rotate-left.svg @@ -2,61 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -100,40 +55,30 @@ + id="layer1"> + id="path7246" /> + id="path7240" /> + id="path7236" /> + id="path7234" /> + id="path9832" /> + style="opacity:0.9;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.99999994" /> diff --git a/rtdata/images/svg/rotate-right-90.svg b/rtdata/icons/rawtherapee/scalable/apps/rotate-right-90.svg similarity index 64% rename from rtdata/images/svg/rotate-right-90.svg rename to rtdata/icons/rawtherapee/scalable/apps/rotate-right-90.svg index bb2e66482..edc9afa38 100644 --- a/rtdata/images/svg/rotate-right-90.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/rotate-right-90.svg @@ -2,63 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + id="path2866" /> + style="display:inline;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.0348262" /> + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0;paint-order:normal" /> + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2, 2;stroke-dashoffset:10;stroke-opacity:1.0;paint-order:normal" /> + id="path1734" /> 90° + id="tspan16">90° diff --git a/rtdata/images/svg/rotate-right-small.svg b/rtdata/icons/rawtherapee/scalable/apps/rotate-right-small.svg similarity index 51% rename from rtdata/images/svg/rotate-right-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/rotate-right-small.svg index 89e6d4ac2..ba1410815 100644 --- a/rtdata/images/svg/rotate-right-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/rotate-right-small.svg @@ -2,65 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -105,48 +56,34 @@ + id="path1029" /> + style="opacity:0.9;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.54308969" /> + id="path1085" /> + id="path1096" /> + id="path1103" /> diff --git a/rtdata/images/svg/rotate-right.svg b/rtdata/icons/rawtherapee/scalable/apps/rotate-right.svg similarity index 55% rename from rtdata/images/svg/rotate-right.svg rename to rtdata/icons/rawtherapee/scalable/apps/rotate-right.svg index 26a46a3f6..4d5763e1e 100644 --- a/rtdata/images/svg/rotate-right.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/rotate-right.svg @@ -2,61 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + id="path7246" /> + id="path7240" /> + id="path7236" /> + id="path7234" /> + id="path9832" /> + style="opacity:0.9;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.99999994" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/rotate-straighten-small.svg b/rtdata/icons/rawtherapee/scalable/apps/rotate-straighten-small.svg new file mode 100644 index 000000000..5a63b665e --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/rotate-straighten-small.svg @@ -0,0 +1,81 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/rotate-straighten.svg b/rtdata/icons/rawtherapee/scalable/apps/rotate-straighten.svg new file mode 100644 index 000000000..e833ae8b1 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/rotate-straighten.svg @@ -0,0 +1,160 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + 90° + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/save-small.svg b/rtdata/icons/rawtherapee/scalable/apps/save-small.svg similarity index 61% rename from rtdata/images/svg/save-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/save-small.svg index 3398e27c8..94de504b8 100644 --- a/rtdata/images/svg/save-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/save-small.svg @@ -2,58 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1;paint-order:normal" /> + id="path1601" /> + transform="matrix(1.4285714,0,0,-1.4285714,60.571429,23.428571)" /> + transform="matrix(1.4285714,0,0,-1.4285714,60.571429,23.428571)" /> + style="opacity:1;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1.14285719;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> diff --git a/rtdata/images/svg/save.svg b/rtdata/icons/rawtherapee/scalable/apps/save.svg similarity index 59% rename from rtdata/images/svg/save.svg rename to rtdata/icons/rawtherapee/scalable/apps/save.svg index eae40ed09..818b8d52d 100644 --- a/rtdata/images/svg/save.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/save.svg @@ -2,60 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + id="path35160" /> + id="path35158" /> + id="path35156" /> + id="rect34888" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1;paint-order:normal" /> + id="path8807-3" /> + id="path35172" /> + transform="matrix(1,0,0,-1,-20,24)" /> + transform="matrix(1,0,0,-1,-20,24)" /> + style="opacity:1;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:1.71428573;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + id="path35202" /> + transform="matrix(1,0,0,-1,-100,24)" /> + transform="matrix(1,0,0,-1,-100,24)" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1;paint-order:normal" /> + style="opacity:1;fill:#008000;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2.55999184;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + id="path35191" /> + transform="matrix(1,0,0,-1,-60,24)" /> + id="path35000" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1;paint-order:normal" /> + id="path35006" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1;paint-order:normal" /> + style="opacity:1;fill:#008000;fill-opacity:1.0;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:1;fill:#008000;fill-opacity:1.0;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:1;fill:#008000;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:3.83998775;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> @@ -343,30 +266,26 @@ height="5" width="3" id="rect35070" - style="opacity:0.7;fill:#2a7fff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1;paint-order:normal" /> + id="path35084" /> + id="path35092" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1;paint-order:normal" /> + style="opacity:1;fill:#008000;fill-opacity:1.0;stroke:none;stroke-width:1.28571427;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> diff --git a/rtdata/images/svg/saved-no-small.svg b/rtdata/icons/rawtherapee/scalable/apps/saved-no-small.svg similarity index 67% rename from rtdata/images/svg/saved-no-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/saved-no-small.svg index 02b245aa1..20b6dfb43 100644 --- a/rtdata/images/svg/saved-no-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/saved-no-small.svg @@ -2,58 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1;paint-order:normal" /> + id="path1631" /> + id="path1629" /> + id="path1627" /> + id="path1610" /> + style="fill:none;fill-rule:evenodd;stroke:#c00000;stroke-width:1.88826501;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" + d="m 10.832397,10.667603 -5.6647946,5.664794 m 0,-5.664794 5.6647946,5.664794" /> diff --git a/rtdata/images/svg/saved-yes-small.svg b/rtdata/icons/rawtherapee/scalable/apps/saved-yes-small.svg similarity index 64% rename from rtdata/images/svg/saved-yes-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/saved-yes-small.svg index f545e9b18..3dee64650 100644 --- a/rtdata/images/svg/saved-yes-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/saved-yes-small.svg @@ -2,58 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -98,8 +56,6 @@ + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1;paint-order:normal" /> + style="opacity:1;fill:#008000;fill-opacity:1.0;stroke:none;stroke-width:1.45144057" /> + id="path1677" /> + id="path1664" /> + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - @@ -43,13 +21,11 @@ image/svg+xml - + + style="fill:#ffffff;fill-opacity:0.58823532;stroke:none" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/spot-normal.svg b/rtdata/icons/rawtherapee/scalable/apps/spot-normal.svg new file mode 100644 index 000000000..67b954642 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/spot-normal.svg @@ -0,0 +1,44 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/rtdata/images/svg/spot-prelight.svg b/rtdata/icons/rawtherapee/scalable/apps/spot-prelight.svg similarity index 54% rename from rtdata/images/svg/spot-prelight.svg rename to rtdata/icons/rawtherapee/scalable/apps/spot-prelight.svg index 9cfc1acfa..e53acfcbf 100644 --- a/rtdata/images/svg/spot-prelight.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/spot-prelight.svg @@ -2,39 +2,17 @@ + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - @@ -48,8 +26,6 @@ + style="fill:#ffffff;fill-opacity:1.0;stroke:none" /> diff --git a/rtdata/images/svg/square-toggle-black-off-narrow.svg b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-black-off-narrow.svg similarity index 52% rename from rtdata/images/svg/square-toggle-black-off-narrow.svg rename to rtdata/icons/rawtherapee/scalable/apps/square-toggle-black-off-narrow.svg index 23d835032..86c7fa8c7 100644 --- a/rtdata/images/svg/square-toggle-black-off-narrow.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-black-off-narrow.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,11 +55,9 @@ + id="layer1"> + style="opacity:1;fill:#1a1a1a;fill-opacity:1.0;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> diff --git a/rtdata/images/svg/square-toggle-black-on-narrow.svg b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-black-on-narrow.svg similarity index 52% rename from rtdata/images/svg/square-toggle-black-on-narrow.svg rename to rtdata/icons/rawtherapee/scalable/apps/square-toggle-black-on-narrow.svg index 431f8bd58..43f6cee0e 100644 --- a/rtdata/images/svg/square-toggle-black-on-narrow.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-black-on-narrow.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,11 +55,9 @@ + id="layer1"> + style="opacity:1;fill:#1a1a1a;fill-opacity:1.0;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> diff --git a/rtdata/images/svg/square-toggle-blue-off-narrow.svg b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-blue-off-narrow.svg similarity index 52% rename from rtdata/images/svg/square-toggle-blue-off-narrow.svg rename to rtdata/icons/rawtherapee/scalable/apps/square-toggle-blue-off-narrow.svg index 4da563f36..201df582a 100644 --- a/rtdata/images/svg/square-toggle-blue-off-narrow.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-blue-off-narrow.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,11 +55,9 @@ + id="layer1"> + style="opacity:1;fill:#3030d0;fill-opacity:1.0;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> diff --git a/rtdata/images/svg/square-toggle-blue-on-narrow.svg b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-blue-on-narrow.svg similarity index 52% rename from rtdata/images/svg/square-toggle-blue-on-narrow.svg rename to rtdata/icons/rawtherapee/scalable/apps/square-toggle-blue-on-narrow.svg index 6aa7e2cb1..3e6d90887 100644 --- a/rtdata/images/svg/square-toggle-blue-on-narrow.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-blue-on-narrow.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,11 +55,9 @@ + id="layer1"> + style="opacity:1;fill:#3030d0;fill-opacity:1.0;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> diff --git a/rtdata/images/svg/square-toggle-gray-off-narrow.svg b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-gray-off-narrow.svg similarity index 52% rename from rtdata/images/svg/square-toggle-gray-off-narrow.svg rename to rtdata/icons/rawtherapee/scalable/apps/square-toggle-gray-off-narrow.svg index 3bc716d8e..779ec1b6e 100644 --- a/rtdata/images/svg/square-toggle-gray-off-narrow.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-gray-off-narrow.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,11 +55,9 @@ + id="layer1"> + style="opacity:1;fill:#777777;fill-opacity:1.0;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> diff --git a/rtdata/images/svg/square-toggle-gray-on-narrow.svg b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-gray-on-narrow.svg similarity index 52% rename from rtdata/images/svg/square-toggle-gray-on-narrow.svg rename to rtdata/icons/rawtherapee/scalable/apps/square-toggle-gray-on-narrow.svg index 6e3ddb2ed..cd7b044e8 100644 --- a/rtdata/images/svg/square-toggle-gray-on-narrow.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-gray-on-narrow.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,11 +55,9 @@ + id="layer1"> + style="opacity:1;fill:#777777;fill-opacity:1.0;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> diff --git a/rtdata/images/svg/square-toggle-green-off-narrow.svg b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-green-off-narrow.svg similarity index 57% rename from rtdata/images/svg/square-toggle-green-off-narrow.svg rename to rtdata/icons/rawtherapee/scalable/apps/square-toggle-green-off-narrow.svg index 814feedf6..695e41e04 100644 --- a/rtdata/images/svg/square-toggle-green-off-narrow.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-green-off-narrow.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,9 +55,7 @@ + id="layer1"> + style="opacity:1;fill:#30d043;fill-opacity:1.0;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> diff --git a/rtdata/images/svg/square-toggle-green-on-narrow.svg b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-green-on-narrow.svg similarity index 57% rename from rtdata/images/svg/square-toggle-green-on-narrow.svg rename to rtdata/icons/rawtherapee/scalable/apps/square-toggle-green-on-narrow.svg index ed178b3b0..e381a32f0 100644 --- a/rtdata/images/svg/square-toggle-green-on-narrow.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-green-on-narrow.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,9 +55,7 @@ + id="layer1"> + style="opacity:1;fill:#30d043;fill-opacity:1.0;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> diff --git a/rtdata/images/svg/square-toggle-luminosity-off-narrow.svg b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-luminosity-off-narrow.svg similarity index 58% rename from rtdata/images/svg/square-toggle-luminosity-off-narrow.svg rename to rtdata/icons/rawtherapee/scalable/apps/square-toggle-luminosity-off-narrow.svg index 9d5ad85ed..45dfafd9c 100644 --- a/rtdata/images/svg/square-toggle-luminosity-off-narrow.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-luminosity-off-narrow.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> L + id="tspan16">L diff --git a/rtdata/images/svg/square-toggle-luminosity-on-narrow.svg b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-luminosity-on-narrow.svg similarity index 58% rename from rtdata/images/svg/square-toggle-luminosity-on-narrow.svg rename to rtdata/icons/rawtherapee/scalable/apps/square-toggle-luminosity-on-narrow.svg index f7e83e8bb..7422df22c 100644 --- a/rtdata/images/svg/square-toggle-luminosity-on-narrow.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-luminosity-on-narrow.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> L + id="tspan12">L diff --git a/rtdata/images/svg/square-toggle-red-off-narrow.svg b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-red-off-narrow.svg similarity index 52% rename from rtdata/images/svg/square-toggle-red-off-narrow.svg rename to rtdata/icons/rawtherapee/scalable/apps/square-toggle-red-off-narrow.svg index b05b91ae5..7ccb866f2 100644 --- a/rtdata/images/svg/square-toggle-red-off-narrow.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-red-off-narrow.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,11 +55,9 @@ + id="layer1"> + style="opacity:1;fill:#d03030;fill-opacity:1.0;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> diff --git a/rtdata/images/svg/square-toggle-red-on-narrow.svg b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-red-on-narrow.svg similarity index 52% rename from rtdata/images/svg/square-toggle-red-on-narrow.svg rename to rtdata/icons/rawtherapee/scalable/apps/square-toggle-red-on-narrow.svg index 52382d0df..b5a36ac78 100644 --- a/rtdata/images/svg/square-toggle-red-on-narrow.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-red-on-narrow.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,11 +55,9 @@ + id="layer1"> + style="opacity:1;fill:#d03030;fill-opacity:1.0;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> diff --git a/rtdata/images/svg/square-toggle-theme-off-narrow.svg b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-theme-off-narrow.svg similarity index 58% rename from rtdata/images/svg/square-toggle-theme-off-narrow.svg rename to rtdata/icons/rawtherapee/scalable/apps/square-toggle-theme-off-narrow.svg index 311552709..b7a2f6ec1 100644 --- a/rtdata/images/svg/square-toggle-theme-off-narrow.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-theme-off-narrow.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> T + id="tspan12">T diff --git a/rtdata/images/svg/square-toggle-theme-on-narrow.svg b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-theme-on-narrow.svg similarity index 58% rename from rtdata/images/svg/square-toggle-theme-on-narrow.svg rename to rtdata/icons/rawtherapee/scalable/apps/square-toggle-theme-on-narrow.svg index 3c8efd85b..16983479e 100644 --- a/rtdata/images/svg/square-toggle-theme-on-narrow.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-theme-on-narrow.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> T + id="tspan12">T diff --git a/rtdata/images/svg/square-toggle-white-off-narrow.svg b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-white-off-narrow.svg similarity index 52% rename from rtdata/images/svg/square-toggle-white-off-narrow.svg rename to rtdata/icons/rawtherapee/scalable/apps/square-toggle-white-off-narrow.svg index 99e675f83..5290de8a6 100644 --- a/rtdata/images/svg/square-toggle-white-off-narrow.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-white-off-narrow.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,11 +55,9 @@ + id="layer1"> + style="opacity:1;fill:#e6e6e6;fill-opacity:1.0;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> diff --git a/rtdata/images/svg/square-toggle-white-on-narrow.svg b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-white-on-narrow.svg similarity index 52% rename from rtdata/images/svg/square-toggle-white-on-narrow.svg rename to rtdata/icons/rawtherapee/scalable/apps/square-toggle-white-on-narrow.svg index 97b5e5e41..15155f1ae 100644 --- a/rtdata/images/svg/square-toggle-white-on-narrow.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/square-toggle-white-on-narrow.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,11 +55,9 @@ + id="layer1"> + style="opacity:1;fill:#e6e6e6;fill-opacity:1.0;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> diff --git a/rtdata/images/svg/star-gold-hollow-narrow.svg b/rtdata/icons/rawtherapee/scalable/apps/star-gold-hollow-narrow.svg similarity index 51% rename from rtdata/images/svg/star-gold-hollow-narrow.svg rename to rtdata/icons/rawtherapee/scalable/apps/star-gold-hollow-narrow.svg index 82ab83a4a..e3f7b74d9 100644 --- a/rtdata/images/svg/star-gold-hollow-narrow.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/star-gold-hollow-narrow.svg @@ -2,64 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -104,25 +56,11 @@ + transform="matrix(0.56919272,-0.18374267,0.18494192,0.56550181,-2.5126125,8.8701237)" /> diff --git a/rtdata/images/svg/star-gold-hollow-small.svg b/rtdata/icons/rawtherapee/scalable/apps/star-gold-hollow-small.svg similarity index 52% rename from rtdata/images/svg/star-gold-hollow-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/star-gold-hollow-small.svg index ecdcf65f7..9914f9869 100644 --- a/rtdata/images/svg/star-gold-hollow-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/star-gold-hollow-small.svg @@ -2,64 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + transform="matrix(0.86350439,-0.28029946,0.28056958,0.86267304,-3.3971484,4.0671628)" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/star-gold-narrow.svg b/rtdata/icons/rawtherapee/scalable/apps/star-gold-narrow.svg new file mode 100644 index 000000000..56b18d5ae --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/star-gold-narrow.svg @@ -0,0 +1,66 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/star-gold-small.svg b/rtdata/icons/rawtherapee/scalable/apps/star-gold-small.svg new file mode 100644 index 000000000..fa588ae59 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/star-gold-small.svg @@ -0,0 +1,66 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/star-hollow-narrow.svg b/rtdata/icons/rawtherapee/scalable/apps/star-hollow-narrow.svg new file mode 100644 index 000000000..b305a320b --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/star-hollow-narrow.svg @@ -0,0 +1,66 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/star-hollow-small.svg b/rtdata/icons/rawtherapee/scalable/apps/star-hollow-small.svg new file mode 100644 index 000000000..03dd8e8b1 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/star-hollow-small.svg @@ -0,0 +1,66 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/star-narrow.svg b/rtdata/icons/rawtherapee/scalable/apps/star-narrow.svg new file mode 100644 index 000000000..8c8400439 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/star-narrow.svg @@ -0,0 +1,66 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/star-small.svg b/rtdata/icons/rawtherapee/scalable/apps/star-small.svg new file mode 100644 index 000000000..a1e44d60c --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/star-small.svg @@ -0,0 +1,66 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/star.svg b/rtdata/icons/rawtherapee/scalable/apps/star.svg similarity index 53% rename from rtdata/images/svg/star.svg rename to rtdata/icons/rawtherapee/scalable/apps/star.svg index af9ca870e..e5304fdf5 100644 --- a/rtdata/images/svg/star.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/star.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + transform="matrix(1.5183042,-0.49285198,0.49332694,1.5168424,-8.0396646,-7.2232632)" /> diff --git a/rtdata/images/svg/template-16.svg b/rtdata/icons/rawtherapee/scalable/apps/template-16.svg similarity index 56% rename from rtdata/images/svg/template-16.svg rename to rtdata/icons/rawtherapee/scalable/apps/template-16.svg index d38151609..2af54c644 100644 --- a/rtdata/images/svg/template-16.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/template-16.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> diff --git a/rtdata/images/svg/template-24.svg b/rtdata/icons/rawtherapee/scalable/apps/template-24.svg similarity index 55% rename from rtdata/images/svg/template-24.svg rename to rtdata/icons/rawtherapee/scalable/apps/template-24.svg index 88d934fc5..9d95f52af 100644 --- a/rtdata/images/svg/template-24.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/template-24.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1" /> diff --git a/rtdata/images/svg/template-narrow.svg b/rtdata/icons/rawtherapee/scalable/apps/template-narrow.svg similarity index 51% rename from rtdata/images/svg/template-narrow.svg rename to rtdata/icons/rawtherapee/scalable/apps/template-narrow.svg index 9a6321317..dc8602564 100644 --- a/rtdata/images/svg/template-narrow.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/template-narrow.svg @@ -2,64 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -104,7 +56,5 @@ diff --git a/rtdata/images/svg/tick-green-hollow-small.svg b/rtdata/icons/rawtherapee/scalable/apps/tick-green-hollow-small.svg similarity index 58% rename from rtdata/images/svg/tick-green-hollow-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/tick-green-hollow-small.svg index fcac2954d..9ff9cbde8 100644 --- a/rtdata/images/svg/tick-green-hollow-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/tick-green-hollow-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,14 +56,10 @@ + style="opacity:0.7;fill:none;fill-opacity:1;stroke:#008000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> diff --git a/rtdata/images/svg/tick-green-hollow.svg b/rtdata/icons/rawtherapee/scalable/apps/tick-green-hollow.svg similarity index 57% rename from rtdata/images/svg/tick-green-hollow.svg rename to rtdata/icons/rawtherapee/scalable/apps/tick-green-hollow.svg index 9b1eca47d..0286260eb 100644 --- a/rtdata/images/svg/tick-green-hollow.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/tick-green-hollow.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="opacity:0.7;fill:none;fill-opacity:1;stroke:#008000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0;paint-order:normal" /> diff --git a/rtdata/images/svg/tick-green-small.svg b/rtdata/icons/rawtherapee/scalable/apps/tick-green-small.svg similarity index 55% rename from rtdata/images/svg/tick-green-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/tick-green-small.svg index edf2dd4b4..afe11e7c5 100644 --- a/rtdata/images/svg/tick-green-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/tick-green-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="opacity:0.7;fill:#008000;fill-opacity:1.0;stroke:none;stroke-width:2.30911016" /> diff --git a/rtdata/images/svg/tick-green.svg b/rtdata/icons/rawtherapee/scalable/apps/tick-green.svg similarity index 55% rename from rtdata/images/svg/tick-green.svg rename to rtdata/icons/rawtherapee/scalable/apps/tick-green.svg index fa250d9fe..158fd7d8b 100644 --- a/rtdata/images/svg/tick-green.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/tick-green.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + style="opacity:0.7;fill:#008000;fill-opacity:1.0;stroke:none;stroke-width:2.30911016" /> diff --git a/rtdata/images/svg/tick-hollow-small.svg b/rtdata/icons/rawtherapee/scalable/apps/tick-hollow-small.svg similarity index 54% rename from rtdata/images/svg/tick-hollow-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/tick-hollow-small.svg index 010fba31e..044caa1b5 100644 --- a/rtdata/images/svg/tick-hollow-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/tick-hollow-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,14 +56,10 @@ + style="opacity:0.7;fill:none;fill-opacity:1;stroke:#cccccc;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> diff --git a/rtdata/images/svg/tick-small.svg b/rtdata/icons/rawtherapee/scalable/apps/tick-small.svg similarity index 55% rename from rtdata/images/svg/tick-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/tick-small.svg index 943c61d76..0ed45e432 100644 --- a/rtdata/images/svg/tick-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/tick-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,14 +56,10 @@ + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:2.30911016" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/tick.svg b/rtdata/icons/rawtherapee/scalable/apps/tick.svg new file mode 100644 index 000000000..287d4121f --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/tick.svg @@ -0,0 +1,64 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/transform.svg b/rtdata/icons/rawtherapee/scalable/apps/transform.svg similarity index 77% rename from rtdata/images/svg/transform.svg rename to rtdata/icons/rawtherapee/scalable/apps/transform.svg index 09b55309d..357504a7f 100644 --- a/rtdata/images/svg/transform.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/transform.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,9 +55,7 @@ + id="layer1"> + id="path1459-8-6" /> + id="path1452-5-3" /> + id="path5382" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1.01634204" /> diff --git a/rtdata/images/svg/trash-delete.svg b/rtdata/icons/rawtherapee/scalable/apps/trash-delete.svg similarity index 63% rename from rtdata/images/svg/trash-delete.svg rename to rtdata/icons/rawtherapee/scalable/apps/trash-delete.svg index 7593e6001..941db86c8 100644 --- a/rtdata/images/svg/trash-delete.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/trash-delete.svg @@ -2,228 +2,146 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - + style="overflow:visible"> + style="overflow:visible"> + id="ExperimentalArrow"> + style="fill:context-stroke;stroke:#000000;stroke-opacity:1.0" /> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> @@ -268,101 +186,78 @@ + id="layer1"> + id="path976" /> + id="path974" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1;paint-order:normal" /> + id="path1002" /> + id="path1014" /> + id="path1007" /> + style="opacity:0.9;fill:#ffffff;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1.80579805;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1;paint-order:normal" /> + style="opacity:0.9;fill:#ffffff;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1.88275099;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1;paint-order:normal" /> + id="path1017" /> + id="path1019" /> + style="opacity:0.9;fill:#000000;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1.21462178;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1;paint-order:normal" /> + id="path1028" /> + style="opacity:0.9;fill:#000000;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1.46620023;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2;stroke-opacity:1;paint-order:normal" /> diff --git a/rtdata/images/svg/trash-empty-show.svg b/rtdata/icons/rawtherapee/scalable/apps/trash-empty-show.svg similarity index 73% rename from rtdata/images/svg/trash-empty-show.svg rename to rtdata/icons/rawtherapee/scalable/apps/trash-empty-show.svg index 366b15bd6..2d618c7ac 100644 --- a/rtdata/images/svg/trash-empty-show.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/trash-empty-show.svg @@ -2,210 +2,146 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="overflow:visible"> + style="overflow:visible"> + id="ExperimentalArrow"> + style="fill:context-stroke;stroke:#000000;stroke-opacity:1.0" /> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> @@ -250,38 +186,32 @@ + id="layer1"> + style="opacity:0.7;fill:#cccccc;stroke:none;stroke-width:39.57666016;fill-opacity:1.0" /> + style="opacity:0.7;fill:#cccccc;stroke:none;stroke-width:39.57666016;fill-opacity:1.0" /> + id="path992" /> + id="path3803" /> diff --git a/rtdata/images/svg/trash-empty.svg b/rtdata/icons/rawtherapee/scalable/apps/trash-empty.svg similarity index 67% rename from rtdata/images/svg/trash-empty.svg rename to rtdata/icons/rawtherapee/scalable/apps/trash-empty.svg index 47ceae609..c943d8934 100644 --- a/rtdata/images/svg/trash-empty.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/trash-empty.svg @@ -2,210 +2,146 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="overflow:visible"> + style="overflow:visible"> + id="ExperimentalArrow"> + style="fill:context-stroke;stroke:#000000;stroke-opacity:1.0" /> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> @@ -217,7 +153,7 @@ image/svg+xml - + Maciej Dworak @@ -250,29 +186,24 @@ + id="layer1"> + style="opacity:0.7;fill:#cccccc;stroke:none;stroke-width:39.57666016;fill-opacity:1.0" /> + style="opacity:0.7;fill:#cccccc;stroke:none;stroke-width:39.57666016;fill-opacity:1.0" /> + style="opacity:0.7;fill:#cccccc;stroke:none;stroke-width:39.57666016;fill-opacity:1.0" /> diff --git a/rtdata/images/svg/trash-full-show.svg b/rtdata/icons/rawtherapee/scalable/apps/trash-full-show.svg similarity index 74% rename from rtdata/images/svg/trash-full-show.svg rename to rtdata/icons/rawtherapee/scalable/apps/trash-full-show.svg index 8ec3f9092..215e41a11 100644 --- a/rtdata/images/svg/trash-full-show.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/trash-full-show.svg @@ -2,211 +2,146 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="overflow:visible"> + style="overflow:visible"> + id="ExperimentalArrow"> + style="fill:context-stroke;stroke:#000000;stroke-opacity:1.0" /> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> @@ -218,7 +153,7 @@ image/svg+xml - + Maciej Dworak @@ -251,41 +186,38 @@ + id="layer1"> + id="path3803" /> diff --git a/rtdata/images/svg/trash-full.svg b/rtdata/icons/rawtherapee/scalable/apps/trash-full.svg similarity index 62% rename from rtdata/images/svg/trash-full.svg rename to rtdata/icons/rawtherapee/scalable/apps/trash-full.svg index eae5920e3..07a4a1e3e 100644 --- a/rtdata/images/svg/trash-full.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/trash-full.svg @@ -2,211 +2,146 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="overflow:visible"> + style="overflow:visible"> + id="ExperimentalArrow"> + style="fill:context-stroke;stroke:#000000;stroke-opacity:1.0" /> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> @@ -218,7 +153,7 @@ image/svg+xml - + Maciej Dworak @@ -251,39 +186,27 @@ + id="layer1"> + id="path5310" /> diff --git a/rtdata/images/svg/trash-hide-deleted.svg b/rtdata/icons/rawtherapee/scalable/apps/trash-hide-deleted.svg similarity index 71% rename from rtdata/images/svg/trash-hide-deleted.svg rename to rtdata/icons/rawtherapee/scalable/apps/trash-hide-deleted.svg index e70aa21e1..ff090598f 100644 --- a/rtdata/images/svg/trash-hide-deleted.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/trash-hide-deleted.svg @@ -2,210 +2,146 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="overflow:visible"> + style="overflow:visible"> + id="ExperimentalArrow"> + style="fill:context-stroke;stroke:#000000;stroke-opacity:1.0" /> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> @@ -250,43 +186,33 @@ + id="layer1"> + style="opacity:0.1;fill:#cccccc;stroke:none;stroke-width:1.34910131;fill-opacity:1.0" /> + style="opacity:0.7;fill:#cccccc;stroke:none;stroke-width:1.34910131;fill-opacity:1.0" /> + style="opacity:1;fill:none;fill-rule:evenodd;stroke:#c00000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" + d="m 18.58579,12.41421 -6.34316,6.343152 m 0,-6.343152 6.34316,6.343152" /> diff --git a/rtdata/images/svg/trash-remove-small.svg b/rtdata/icons/rawtherapee/scalable/apps/trash-remove-small.svg similarity index 70% rename from rtdata/images/svg/trash-remove-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/trash-remove-small.svg index a58bafd39..0afdaef37 100644 --- a/rtdata/images/svg/trash-remove-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/trash-remove-small.svg @@ -2,58 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="path8807" /> diff --git a/rtdata/images/svg/trash-remove.svg b/rtdata/icons/rawtherapee/scalable/apps/trash-remove.svg similarity index 66% rename from rtdata/images/svg/trash-remove.svg rename to rtdata/icons/rawtherapee/scalable/apps/trash-remove.svg index 31ca65a56..7d755261c 100644 --- a/rtdata/images/svg/trash-remove.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/trash-remove.svg @@ -2,210 +2,146 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + style="overflow:visible"> + style="overflow:visible"> + id="ExperimentalArrow"> + style="fill:context-stroke;stroke:#000000;stroke-opacity:1.0" /> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> + style="overflow:visible"> @@ -217,7 +153,7 @@ image/svg+xml - + Maciej Dworak @@ -250,39 +186,30 @@ + id="layer1"> + style="opacity:0.7;fill:#cccccc;stroke:none;stroke-width:1.34910131;fill-opacity:1.0" /> + style="opacity:1;fill:#008000;fill-opacity:1.0;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + d="M 20.551716,6.2800579 C 20.245041,5.5113706 19.590094,4.8663289 18.801432,4.5424787 18.403538,4.3782733 17.622605,4.2903615 17.270188,4.3661609 L 17,4.4242737 l 1.997606,9.2876033 1.997608,9.287602 0.205577,-0.04422 c 1.233464,-0.265297 2.27384,-1.628329 2.273116,-2.974575 6.52e-4,-0.225556 -0.420075,-2.267378 -1.43164,-6.941943 -0.788636,-3.6380797 -1.46127,-6.6796912 -1.490551,-6.7586861 z" /> + id="path5310-3" /> + id="rect1539-6" /> diff --git a/rtdata/images/svg/trash-small.svg b/rtdata/icons/rawtherapee/scalable/apps/trash-small.svg similarity index 68% rename from rtdata/images/svg/trash-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/trash-small.svg index 3d2e674c6..405ae1baa 100644 --- a/rtdata/images/svg/trash-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/trash-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,29 +56,24 @@ + style="opacity:0.7;fill:#cccccc;stroke:none;stroke-width:62.19189453;fill-opacity:1.0" /> + style="opacity:0.7;fill:#cccccc;stroke:none;stroke-width:62.19189453;fill-opacity:1.0" /> + style="opacity:0.7;fill:#cccccc;stroke:none;stroke-width:62.19189453;fill-opacity:1.0" /> diff --git a/rtdata/images/svg/undo-all.svg b/rtdata/icons/rawtherapee/scalable/apps/undo-all.svg similarity index 58% rename from rtdata/images/svg/undo-all.svg rename to rtdata/icons/rawtherapee/scalable/apps/undo-all.svg index e648588ef..82d3abaee 100644 --- a/rtdata/images/svg/undo-all.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/undo-all.svg @@ -2,66 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -105,21 +55,17 @@ + id="layer1"> + id="path815" /> diff --git a/rtdata/images/svg/undo-small.svg b/rtdata/icons/rawtherapee/scalable/apps/undo-small.svg similarity index 53% rename from rtdata/images/svg/undo-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/undo-small.svg index f06c73392..5d290f41b 100644 --- a/rtdata/images/svg/undo-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/undo-small.svg @@ -2,58 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="path815" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/undo.svg b/rtdata/icons/rawtherapee/scalable/apps/undo.svg new file mode 100644 index 000000000..2552d5b73 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/undo.svg @@ -0,0 +1,64 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/warning-highlights.svg b/rtdata/icons/rawtherapee/scalable/apps/warning-highlights.svg new file mode 100644 index 000000000..346385d6a --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/warning-highlights.svg @@ -0,0 +1,75 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/warning-shadows.svg b/rtdata/icons/rawtherapee/scalable/apps/warning-shadows.svg new file mode 100644 index 000000000..137cdebd2 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/warning-shadows.svg @@ -0,0 +1,75 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/warning.svg b/rtdata/icons/rawtherapee/scalable/apps/warning.svg new file mode 100644 index 000000000..74a7d1d23 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/warning.svg @@ -0,0 +1,75 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/wavelets.svg b/rtdata/icons/rawtherapee/scalable/apps/wavelets.svg similarity index 56% rename from rtdata/images/svg/wavelets.svg rename to rtdata/icons/rawtherapee/scalable/apps/wavelets.svg index 1d6de039c..9d92638ce 100644 --- a/rtdata/images/svg/wavelets.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/wavelets.svg @@ -2,62 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -101,35 +55,26 @@ + id="layer1"> + style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-mid:none;enable-background:accumulate" /> + style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-mid:none;enable-background:accumulate" /> + style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-mid:none;enable-background:accumulate" /> + style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:52.94812775;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-mid:none;enable-background:accumulate" /> + id="path4443" /> diff --git a/rtdata/images/svg/wb-auto-small.svg b/rtdata/icons/rawtherapee/scalable/apps/wb-auto-small.svg similarity index 71% rename from rtdata/images/svg/wb-auto-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/wb-auto-small.svg index 23e55f560..b0de28748 100644 --- a/rtdata/images/svg/wb-auto-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/wb-auto-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> diff --git a/rtdata/images/svg/wb-auto.svg b/rtdata/icons/rawtherapee/scalable/apps/wb-auto.svg similarity index 70% rename from rtdata/images/svg/wb-auto.svg rename to rtdata/icons/rawtherapee/scalable/apps/wb-auto.svg index 5914ee63e..7011cfe03 100644 --- a/rtdata/images/svg/wb-auto.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/wb-auto.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,16 +55,14 @@ + id="layer1"> diff --git a/rtdata/images/svg/wb-camera-small.svg b/rtdata/icons/rawtherapee/scalable/apps/wb-camera-small.svg similarity index 67% rename from rtdata/images/svg/wb-camera-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/wb-camera-small.svg index 2521d513e..19a241f64 100644 --- a/rtdata/images/svg/wb-camera-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/wb-camera-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,13 +56,10 @@ + style="display:inline;opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:37.76315689;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> diff --git a/rtdata/images/svg/wb-camera.svg b/rtdata/icons/rawtherapee/scalable/apps/wb-camera.svg similarity index 66% rename from rtdata/images/svg/wb-camera.svg rename to rtdata/icons/rawtherapee/scalable/apps/wb-camera.svg index f83342b6b..1f4d0d87d 100644 --- a/rtdata/images/svg/wb-camera.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/wb-camera.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,13 +55,10 @@ + id="layer1"> + style="display:inline;opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:37.76315689;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> diff --git a/rtdata/images/svg/wb-cloudy-small.svg b/rtdata/icons/rawtherapee/scalable/apps/wb-cloudy-small.svg similarity index 59% rename from rtdata/images/svg/wb-cloudy-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/wb-cloudy-small.svg index 0197eab4e..bc9e70be3 100644 --- a/rtdata/images/svg/wb-cloudy-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/wb-cloudy-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,14 +56,10 @@ + id="path10598" /> diff --git a/rtdata/images/svg/wb-cloudy.svg b/rtdata/icons/rawtherapee/scalable/apps/wb-cloudy.svg similarity index 59% rename from rtdata/images/svg/wb-cloudy.svg rename to rtdata/icons/rawtherapee/scalable/apps/wb-cloudy.svg index 5762fa37b..2d4fed852 100644 --- a/rtdata/images/svg/wb-cloudy.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/wb-cloudy.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,14 +55,10 @@ + id="layer1"> + id="path10598" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/wb-custom-small.svg b/rtdata/icons/rawtherapee/scalable/apps/wb-custom-small.svg new file mode 100644 index 000000000..f7f66a447 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/wb-custom-small.svg @@ -0,0 +1,80 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/curve-flat.svg b/rtdata/icons/rawtherapee/scalable/apps/wb-custom.svg similarity index 52% rename from rtdata/images/svg/curve-flat.svg rename to rtdata/icons/rawtherapee/scalable/apps/wb-custom.svg index 89888b4d1..199b55ad1 100644 --- a/rtdata/images/svg/curve-flat.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/wb-custom.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - + id="layer1"> + + + + + diff --git a/rtdata/images/svg/wb-flash-small.svg b/rtdata/icons/rawtherapee/scalable/apps/wb-flash-small.svg similarity index 53% rename from rtdata/images/svg/wb-flash-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/wb-flash-small.svg index 634912538..13fb88b4b 100644 --- a/rtdata/images/svg/wb-flash-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/wb-flash-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,14 +56,10 @@ + id="path3360" /> diff --git a/rtdata/images/svg/wb-flash.svg b/rtdata/icons/rawtherapee/scalable/apps/wb-flash.svg similarity index 52% rename from rtdata/images/svg/wb-flash.svg rename to rtdata/icons/rawtherapee/scalable/apps/wb-flash.svg index fb4b0ca66..cafc33867 100644 --- a/rtdata/images/svg/wb-flash.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/wb-flash.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,14 +55,10 @@ + id="layer1"> + id="path3360" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/wb-fluorescent-small.svg b/rtdata/icons/rawtherapee/scalable/apps/wb-fluorescent-small.svg new file mode 100644 index 000000000..2b1598da1 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/wb-fluorescent-small.svg @@ -0,0 +1,109 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/wb-fluorescent.svg b/rtdata/icons/rawtherapee/scalable/apps/wb-fluorescent.svg new file mode 100644 index 000000000..e2274b902 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/wb-fluorescent.svg @@ -0,0 +1,104 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/wb-lamp-small.svg b/rtdata/icons/rawtherapee/scalable/apps/wb-lamp-small.svg similarity index 50% rename from rtdata/images/svg/wb-lamp-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/wb-lamp-small.svg index 32c172d7f..c553fafae 100644 --- a/rtdata/images/svg/wb-lamp-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/wb-lamp-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,76 +56,54 @@ + id="path10544" /> + style="display:inline;opacity:0.7;fill:none;stroke:#cccccc;stroke-width:1.54013252;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path7762" /> + style="display:inline;opacity:0.7;fill:none;stroke:#cccccc;stroke-width:1.54013252;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path7792" /> + style="display:inline;opacity:0.7;fill:none;stroke:#cccccc;stroke-width:1.54013252;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="display:inline;opacity:0.7;fill:none;stroke:#cccccc;stroke-width:1.54013252;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path7764" /> + id="path7794" /> + style="display:inline;opacity:0.7;fill:none;stroke:#cccccc;stroke-width:1.54013252;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="display:inline;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none;stroke-width:0.02588202" /> diff --git a/rtdata/icons/rawtherapee/scalable/apps/wb-lamp.svg b/rtdata/icons/rawtherapee/scalable/apps/wb-lamp.svg new file mode 100644 index 000000000..59fd8777a --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/wb-lamp.svg @@ -0,0 +1,104 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/wb-led-small.svg b/rtdata/icons/rawtherapee/scalable/apps/wb-led-small.svg new file mode 100644 index 000000000..c4aadfc8f --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/wb-led-small.svg @@ -0,0 +1,113 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/icons/rawtherapee/scalable/apps/wb-led.svg b/rtdata/icons/rawtherapee/scalable/apps/wb-led.svg new file mode 100644 index 000000000..8d4343690 --- /dev/null +++ b/rtdata/icons/rawtherapee/scalable/apps/wb-led.svg @@ -0,0 +1,108 @@ + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/wb-shade-small.svg b/rtdata/icons/rawtherapee/scalable/apps/wb-shade-small.svg similarity index 52% rename from rtdata/images/svg/wb-shade-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/wb-shade-small.svg index 78ed1e6c6..e5c3514fb 100644 --- a/rtdata/images/svg/wb-shade-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/wb-shade-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,36 +56,26 @@ + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> + style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> diff --git a/rtdata/images/svg/wb-shade.svg b/rtdata/icons/rawtherapee/scalable/apps/wb-shade.svg similarity index 55% rename from rtdata/images/svg/wb-shade.svg rename to rtdata/icons/rawtherapee/scalable/apps/wb-shade.svg index 3ac24bd80..d9d775895 100644 --- a/rtdata/images/svg/wb-shade.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/wb-shade.svg @@ -2,64 +2,23 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -141,32 +100,22 @@ + id="layer1"> + id="path916" /> + id="path926" /> + id="path928" /> + id="path930" /> diff --git a/rtdata/images/svg/wb-sun-small.svg b/rtdata/icons/rawtherapee/scalable/apps/wb-sun-small.svg similarity index 52% rename from rtdata/images/svg/wb-sun-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/wb-sun-small.svg index 94abad681..3758cc387 100644 --- a/rtdata/images/svg/wb-sun-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/wb-sun-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,8 +56,6 @@ + id="path10542" /> + style="opacity:0.7;fill:none;stroke:#cccccc;stroke-width:55.93516922;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;stroke:#cccccc;stroke-width:41.95137787;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path10560" /> + style="opacity:0.7;fill:none;stroke:#cccccc;stroke-width:41.95137787;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path10566" /> + style="opacity:0.7;fill:none;stroke:#cccccc;stroke-width:55.93516922;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path10572" /> + id="path10576" /> + style="opacity:0.7;fill:none;stroke:#cccccc;stroke-width:41.95137787;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path10582" /> + style="opacity:0.7;fill:none;stroke:#cccccc;stroke-width:41.95137787;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> diff --git a/rtdata/images/svg/wb-sun.svg b/rtdata/icons/rawtherapee/scalable/apps/wb-sun.svg similarity index 51% rename from rtdata/images/svg/wb-sun.svg rename to rtdata/icons/rawtherapee/scalable/apps/wb-sun.svg index b9c71a3dc..0ea859e7c 100644 --- a/rtdata/images/svg/wb-sun.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/wb-sun.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,75 +55,61 @@ + id="layer1"> + style="opacity:0.7;fill:none;stroke:#cccccc;stroke-width:55.9351689;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path10544" /> + id="path10558" /> + style="opacity:0.7;fill:none;stroke:#cccccc;stroke-width:41.95137668;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path10564" /> + style="opacity:0.7;fill:none;stroke:#cccccc;stroke-width:41.95137668;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path10570" /> + style="opacity:0.7;fill:none;stroke:#cccccc;stroke-width:55.9351689;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:none;stroke:#cccccc;stroke-width:41.95137668;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path10578" /> + style="opacity:0.7;fill:none;stroke:#cccccc;stroke-width:41.95137668;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path10584" /> - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,8 +56,6 @@ + style="opacity:0.7;fill:none;stroke:#cccccc;stroke-width:55.93516922;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path10560" /> + style="opacity:0.7;fill:none;stroke:#cccccc;stroke-width:41.95137787;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path10566" /> + style="opacity:0.7;fill:none;stroke:#cccccc;stroke-width:55.93516922;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path10572" /> + style="opacity:0.7;fill:none;stroke:#cccccc;stroke-width:41.95137787;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path10582" /> + style="opacity:0.7;fill:none;stroke:#cccccc;stroke-width:41.95137787;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + style="opacity:0.7;fill:#cccccc;fill-opacity:1.0;fill-rule:nonzero;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1.0;paint-order:normal" /> diff --git a/rtdata/images/svg/wb-tungsten.svg b/rtdata/icons/rawtherapee/scalable/apps/wb-tungsten.svg similarity index 52% rename from rtdata/images/svg/wb-tungsten.svg rename to rtdata/icons/rawtherapee/scalable/apps/wb-tungsten.svg index 0dabc0935..28030eea7 100644 --- a/rtdata/images/svg/wb-tungsten.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/wb-tungsten.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,63 +55,50 @@ + id="layer1"> + id="path10544" /> + style="opacity:0.7;fill:none;stroke:#cccccc;stroke-width:41.95137668;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path10564" /> + style="opacity:0.7;fill:none;stroke:#cccccc;stroke-width:41.95137668;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path10570" /> + style="opacity:0.7;fill:none;stroke:#cccccc;stroke-width:55.9351689;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path10578" /> + style="opacity:0.7;fill:none;stroke:#cccccc;stroke-width:41.95137668;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" /> + id="path10584" /> + id="path1023" /> diff --git a/rtdata/images/svg/wb-water-small.svg b/rtdata/icons/rawtherapee/scalable/apps/wb-water-small.svg similarity index 66% rename from rtdata/images/svg/wb-water-small.svg rename to rtdata/icons/rawtherapee/scalable/apps/wb-water-small.svg index 2cb62298a..a4d45eeab 100644 --- a/rtdata/images/svg/wb-water-small.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/wb-water-small.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -97,8 +56,6 @@ + style="display:inline;opacity:0.7;fill:#cccccc;fill-opacity:1.0;stroke:none" /> diff --git a/rtdata/images/svg/wb-water.svg b/rtdata/icons/rawtherapee/scalable/apps/wb-water.svg similarity index 64% rename from rtdata/images/svg/wb-water.svg rename to rtdata/icons/rawtherapee/scalable/apps/wb-water.svg index 55a98f099..c716f542f 100644 --- a/rtdata/images/svg/wb-water.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/wb-water.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - + Maciej Dworak @@ -96,18 +55,14 @@ + id="layer1"> + id="path5961" /> diff --git a/rtdata/images/svg/window-add.svg b/rtdata/icons/rawtherapee/scalable/apps/window-add.svg similarity index 60% rename from rtdata/images/svg/window-add.svg rename to rtdata/icons/rawtherapee/scalable/apps/window-add.svg index da0651444..11982690a 100644 --- a/rtdata/images/svg/window-add.svg +++ b/rtdata/icons/rawtherapee/scalable/apps/window-add.svg @@ -2,58 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="layer1"> + id="path850" /> + style="opacity:0.9;fill:none;fill-rule:evenodd;stroke:#cccccc;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1.0" + d="m 3,17 h 8 M 7,13 v 8" /> diff --git a/rtdata/images/svg/ornament1.svg b/rtdata/images/ornament1.svg similarity index 96% rename from rtdata/images/svg/ornament1.svg rename to rtdata/images/ornament1.svg index af3d729e5..592caac39 100644 --- a/rtdata/images/svg/ornament1.svg +++ b/rtdata/images/ornament1.svg @@ -2,57 +2,16 @@ - - - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="path4462" /> + id="path4462-1" /> + id="path4462-18" /> + id="path4462-1-3" /> diff --git a/rtdata/images/svg/splash.svg b/rtdata/images/splash.svg similarity index 61% rename from rtdata/images/svg/splash.svg rename to rtdata/images/splash.svg index a840aac4d..9e91d054e 100644 --- a/rtdata/images/svg/splash.svg +++ b/rtdata/images/splash.svg @@ -7,13 +7,12 @@ viewBox="0 0 160 99.999999" version="1.1" id="svg783" - inkscape:version="1.2.1 (9c6d41e410, 2022-07-14, custom)" + inkscape:version="1.3.1 (91b66b0783, 2023-11-16, custom)" sodipodi:docname="splash.svg" inkscape:export-filename="/tmp/splash.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" enable-background="new" - xml:space="preserve" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink" @@ -21,117 +20,168 @@ xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" - xmlns:dc="http://purl.org/dc/elements/1.1/">RawTherapee splash screen + RawTherapee splash screen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RawTherapee splash screen + + + + + + RawTherapee splash screen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id="path1801" /> + + + diff --git a/rtdata/images/svg/splash_template.svg b/rtdata/images/splash_template.svg similarity index 100% rename from rtdata/images/svg/splash_template.svg rename to rtdata/images/splash_template.svg diff --git a/rtdata/images/svg/add-small.svg b/rtdata/images/svg/add-small.svg deleted file mode 100644 index 13abbdc25..000000000 --- a/rtdata/images/svg/add-small.svg +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/add.svg b/rtdata/images/svg/add.svg deleted file mode 100644 index c45f9f584..000000000 --- a/rtdata/images/svg/add.svg +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/arrow2-left.svg b/rtdata/images/svg/arrow2-left.svg deleted file mode 100644 index f71ee83e3..000000000 --- a/rtdata/images/svg/arrow2-left.svg +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/arrow2-right.svg b/rtdata/images/svg/arrow2-right.svg deleted file mode 100644 index 8c3f60554..000000000 --- a/rtdata/images/svg/arrow2-right.svg +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/bayer.svg b/rtdata/images/svg/bayer.svg deleted file mode 100644 index 1718ce5c4..000000000 --- a/rtdata/images/svg/bayer.svg +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/bidirectional-arrow-horizontal-hicontrast.svg b/rtdata/images/svg/bidirectional-arrow-horizontal-hicontrast.svg deleted file mode 100644 index f2712cee9..000000000 --- a/rtdata/images/svg/bidirectional-arrow-horizontal-hicontrast.svg +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - Lawrence - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/bidirectional-arrow-horizontal-prelight.svg b/rtdata/images/svg/bidirectional-arrow-horizontal-prelight.svg deleted file mode 100644 index 6382cc546..000000000 --- a/rtdata/images/svg/bidirectional-arrow-horizontal-prelight.svg +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - Lawrence - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/bidirectional-arrow-vertical-hicontrast.svg b/rtdata/images/svg/bidirectional-arrow-vertical-hicontrast.svg deleted file mode 100644 index 93cb21a43..000000000 --- a/rtdata/images/svg/bidirectional-arrow-vertical-hicontrast.svg +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - Lawrence - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/bidirectional-arrow-vertical-prelight.svg b/rtdata/images/svg/bidirectional-arrow-vertical-prelight.svg deleted file mode 100644 index 76f4312cb..000000000 --- a/rtdata/images/svg/bidirectional-arrow-vertical-prelight.svg +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - Lawrence - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/cancel-small.svg b/rtdata/images/svg/cancel-small.svg deleted file mode 100644 index 3bbe99bc1..000000000 --- a/rtdata/images/svg/cancel-small.svg +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/cancel.svg b/rtdata/images/svg/cancel.svg deleted file mode 100644 index c42837e61..000000000 --- a/rtdata/images/svg/cancel.svg +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/circle-darkgray-small.svg b/rtdata/images/svg/circle-darkgray-small.svg deleted file mode 100644 index 8183c820f..000000000 --- a/rtdata/images/svg/circle-darkgray-small.svg +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/circle-magenta-small.svg b/rtdata/images/svg/circle-magenta-small.svg deleted file mode 100644 index 9f2e485f9..000000000 --- a/rtdata/images/svg/circle-magenta-small.svg +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/circle-red-green-small.svg b/rtdata/images/svg/circle-red-green-small.svg deleted file mode 100644 index 96cc892dd..000000000 --- a/rtdata/images/svg/circle-red-green-small.svg +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/contrastmask-off.svg b/rtdata/images/svg/contrastmask-off.svg deleted file mode 100644 index ed76efbbb..000000000 --- a/rtdata/images/svg/contrastmask-off.svg +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/contrastmask-on.svg b/rtdata/images/svg/contrastmask-on.svg deleted file mode 100644 index 9e3504128..000000000 --- a/rtdata/images/svg/contrastmask-on.svg +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/crop-point-hicontrast.svg b/rtdata/images/svg/crop-point-hicontrast.svg deleted file mode 100644 index 4a06bfcba..000000000 --- a/rtdata/images/svg/crop-point-hicontrast.svg +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/crop-small.svg b/rtdata/images/svg/crop-small.svg deleted file mode 100644 index 94c0b43df..000000000 --- a/rtdata/images/svg/crop-small.svg +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/crop.svg b/rtdata/images/svg/crop.svg deleted file mode 100644 index 8fd598f60..000000000 --- a/rtdata/images/svg/crop.svg +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/crosshair-small.svg b/rtdata/images/svg/crosshair-small.svg deleted file mode 100644 index 2e5e6596a..000000000 --- a/rtdata/images/svg/crosshair-small.svg +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/curve-flat-small.svg b/rtdata/images/svg/curve-flat-small.svg deleted file mode 100644 index 59585c64a..000000000 --- a/rtdata/images/svg/curve-flat-small.svg +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/curve-linear-small.svg b/rtdata/images/svg/curve-linear-small.svg deleted file mode 100644 index c2a3f7915..000000000 --- a/rtdata/images/svg/curve-linear-small.svg +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/curve-parametric-small.svg b/rtdata/images/svg/curve-parametric-small.svg deleted file mode 100644 index 2334def2d..000000000 --- a/rtdata/images/svg/curve-parametric-small.svg +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/curve-parametric.svg b/rtdata/images/svg/curve-parametric.svg deleted file mode 100644 index 88a1f0389..000000000 --- a/rtdata/images/svg/curve-parametric.svg +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/edit-point.svg b/rtdata/images/svg/edit-point.svg deleted file mode 100644 index 9f686d6e9..000000000 --- a/rtdata/images/svg/edit-point.svg +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/equilizer-narrow.svg b/rtdata/images/svg/equilizer-narrow.svg deleted file mode 100644 index 52dcaed4b..000000000 --- a/rtdata/images/svg/equilizer-narrow.svg +++ /dev/null @@ -1,358 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/equilizer-wide.svg b/rtdata/images/svg/equilizer-wide.svg deleted file mode 100644 index 594cca2ab..000000000 --- a/rtdata/images/svg/equilizer-wide.svg +++ /dev/null @@ -1,263 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/expander-closed-small.svg b/rtdata/images/svg/expander-closed-small.svg deleted file mode 100644 index e9cea3b4d..000000000 --- a/rtdata/images/svg/expander-closed-small.svg +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/expander-open-small.svg b/rtdata/images/svg/expander-open-small.svg deleted file mode 100644 index 8355bc2f3..000000000 --- a/rtdata/images/svg/expander-open-small.svg +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/flip-horizontal.svg b/rtdata/images/svg/flip-horizontal.svg deleted file mode 100644 index 67465657f..000000000 --- a/rtdata/images/svg/flip-horizontal.svg +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/flip-vertical.svg b/rtdata/images/svg/flip-vertical.svg deleted file mode 100644 index 39771286a..000000000 --- a/rtdata/images/svg/flip-vertical.svg +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/gamut-hist.svg b/rtdata/images/svg/gamut-hist.svg deleted file mode 100644 index 289dbf396..000000000 --- a/rtdata/images/svg/gamut-hist.svg +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/goto-end-small.svg b/rtdata/images/svg/goto-end-small.svg deleted file mode 100644 index 26d805c5d..000000000 --- a/rtdata/images/svg/goto-end-small.svg +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/goto-start-small.svg b/rtdata/images/svg/goto-start-small.svg deleted file mode 100644 index 35b4e9f8c..000000000 --- a/rtdata/images/svg/goto-start-small.svg +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/histogram-bar-off-small.svg b/rtdata/images/svg/histogram-bar-off-small.svg deleted file mode 100644 index 76016bf46..000000000 --- a/rtdata/images/svg/histogram-bar-off-small.svg +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/histogram-bar-on-small.svg b/rtdata/images/svg/histogram-bar-on-small.svg deleted file mode 100644 index 858569703..000000000 --- a/rtdata/images/svg/histogram-bar-on-small.svg +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/histogram-green-off-small.svg b/rtdata/images/svg/histogram-green-off-small.svg deleted file mode 100644 index 462b1b45f..000000000 --- a/rtdata/images/svg/histogram-green-off-small.svg +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/histogram-green-on-small.svg b/rtdata/images/svg/histogram-green-on-small.svg deleted file mode 100644 index 6c06531c6..000000000 --- a/rtdata/images/svg/histogram-green-on-small.svg +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/histogram-type-histogram-raw-small.svg b/rtdata/images/svg/histogram-type-histogram-raw-small.svg deleted file mode 100644 index d9ef178a5..000000000 --- a/rtdata/images/svg/histogram-type-histogram-raw-small.svg +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/node-move-nw-se-hicontrast.svg b/rtdata/images/svg/node-move-nw-se-hicontrast.svg deleted file mode 100644 index 375c8ea27..000000000 --- a/rtdata/images/svg/node-move-nw-se-hicontrast.svg +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/node-move-sw-ne-hicontrast.svg b/rtdata/images/svg/node-move-sw-ne-hicontrast.svg deleted file mode 100644 index fdda47505..000000000 --- a/rtdata/images/svg/node-move-sw-ne-hicontrast.svg +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/node-move-x-hicontrast.svg b/rtdata/images/svg/node-move-x-hicontrast.svg deleted file mode 100644 index a24af10ef..000000000 --- a/rtdata/images/svg/node-move-x-hicontrast.svg +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/node-move-xy-hicontrast.svg b/rtdata/images/svg/node-move-xy-hicontrast.svg deleted file mode 100644 index 05d291870..000000000 --- a/rtdata/images/svg/node-move-xy-hicontrast.svg +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/node-move-y-hicontrast.svg b/rtdata/images/svg/node-move-y-hicontrast.svg deleted file mode 100644 index 615f3f94a..000000000 --- a/rtdata/images/svg/node-move-y-hicontrast.svg +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/profile-partial.svg b/rtdata/images/svg/profile-partial.svg deleted file mode 100644 index 90d22c74a..000000000 --- a/rtdata/images/svg/profile-partial.svg +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/redo.svg b/rtdata/images/svg/redo.svg deleted file mode 100644 index 14f9f7c00..000000000 --- a/rtdata/images/svg/redo.svg +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/refresh.svg b/rtdata/images/svg/refresh.svg deleted file mode 100644 index 3b0b0cb72..000000000 --- a/rtdata/images/svg/refresh.svg +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/remove-small.svg b/rtdata/images/svg/remove-small.svg deleted file mode 100644 index 1bffa469c..000000000 --- a/rtdata/images/svg/remove-small.svg +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/remove.svg b/rtdata/images/svg/remove.svg deleted file mode 100644 index bccfdb160..000000000 --- a/rtdata/images/svg/remove.svg +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/rotate-straighten-small.svg b/rtdata/images/svg/rotate-straighten-small.svg deleted file mode 100644 index 00da936f8..000000000 --- a/rtdata/images/svg/rotate-straighten-small.svg +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/rotate-straighten.svg b/rtdata/images/svg/rotate-straighten.svg deleted file mode 100644 index 34765aa2b..000000000 --- a/rtdata/images/svg/rotate-straighten.svg +++ /dev/null @@ -1,237 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - 90° - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/spot-normal.svg b/rtdata/images/svg/spot-normal.svg deleted file mode 100644 index d0320e31f..000000000 --- a/rtdata/images/svg/spot-normal.svg +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/rtdata/images/svg/star-gold-narrow.svg b/rtdata/images/svg/star-gold-narrow.svg deleted file mode 100644 index ee54c8214..000000000 --- a/rtdata/images/svg/star-gold-narrow.svg +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/star-gold-small.svg b/rtdata/images/svg/star-gold-small.svg deleted file mode 100644 index 48694c3f1..000000000 --- a/rtdata/images/svg/star-gold-small.svg +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/star-hollow-narrow.svg b/rtdata/images/svg/star-hollow-narrow.svg deleted file mode 100644 index 66b1c233c..000000000 --- a/rtdata/images/svg/star-hollow-narrow.svg +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/star-hollow-small.svg b/rtdata/images/svg/star-hollow-small.svg deleted file mode 100644 index 6d63a6e8b..000000000 --- a/rtdata/images/svg/star-hollow-small.svg +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/star-narrow.svg b/rtdata/images/svg/star-narrow.svg deleted file mode 100644 index 90add16d5..000000000 --- a/rtdata/images/svg/star-narrow.svg +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/star-small.svg b/rtdata/images/svg/star-small.svg deleted file mode 100644 index cd7a9b8ef..000000000 --- a/rtdata/images/svg/star-small.svg +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/tick.svg b/rtdata/images/svg/tick.svg deleted file mode 100644 index 8ab7a2e27..000000000 --- a/rtdata/images/svg/tick.svg +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/undo.svg b/rtdata/images/svg/undo.svg deleted file mode 100644 index bc4282693..000000000 --- a/rtdata/images/svg/undo.svg +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/warning-highlights.svg b/rtdata/images/svg/warning-highlights.svg deleted file mode 100644 index c7aaf80ce..000000000 --- a/rtdata/images/svg/warning-highlights.svg +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/warning-shadows.svg b/rtdata/images/svg/warning-shadows.svg deleted file mode 100644 index f9baa36c1..000000000 --- a/rtdata/images/svg/warning-shadows.svg +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/warning.svg b/rtdata/images/svg/warning.svg deleted file mode 100644 index c24ba0653..000000000 --- a/rtdata/images/svg/warning.svg +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/wb-custom-small.svg b/rtdata/images/svg/wb-custom-small.svg deleted file mode 100644 index f176458a8..000000000 --- a/rtdata/images/svg/wb-custom-small.svg +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/wb-custom.svg b/rtdata/images/svg/wb-custom.svg deleted file mode 100644 index f1d2ec8f7..000000000 --- a/rtdata/images/svg/wb-custom.svg +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/wb-fluorescent-small.svg b/rtdata/images/svg/wb-fluorescent-small.svg deleted file mode 100644 index 67c86ec71..000000000 --- a/rtdata/images/svg/wb-fluorescent-small.svg +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/wb-fluorescent.svg b/rtdata/images/svg/wb-fluorescent.svg deleted file mode 100644 index 8746978e1..000000000 --- a/rtdata/images/svg/wb-fluorescent.svg +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/wb-lamp.svg b/rtdata/images/svg/wb-lamp.svg deleted file mode 100644 index 39f2ccb94..000000000 --- a/rtdata/images/svg/wb-lamp.svg +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/wb-led-small.svg b/rtdata/images/svg/wb-led-small.svg deleted file mode 100644 index 7e20c4576..000000000 --- a/rtdata/images/svg/wb-led-small.svg +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/svg/wb-led.svg b/rtdata/images/svg/wb-led.svg deleted file mode 100644 index 952f5f77f..000000000 --- a/rtdata/images/svg/wb-led.svg +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rtdata/languages/Catala b/rtdata/languages/Catala index 4485966ff..03353cdb7 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;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 - 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 @@ -1968,21 +1978,26 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation !HISTORY_MSG_DEHAZE_SHOW_DEPTH_MAP;Dehaze - Show depth map !HISTORY_MSG_DEHAZE_STRENGTH;Dehaze - Strength +!HISTORY_MSG_DIRPYRDENOISE_GAIN;NR - Compensate for lightness !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 +2017,9 @@ 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_LOCAL_TMO_SATUR;Local Exp Fattal Saturation !HISTORY_MSG_METADATA_MODE;Metadata copy mode !HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold @@ -2047,6 +2065,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 +2109,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;Green 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 Threshold !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !ICCPROFCREATOR_COPYRIGHT;Copyright: !ICCPROFCREATOR_COPYRIGHT_RESET_TOOLTIP;Reset to the default copyright, granted to 'RawTherapee, CC0'. @@ -2199,6 +2239,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 +2261,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 +2279,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 +2318,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 +2332,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 +2373,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 +2429,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 +2536,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 +2603,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. @@ -2615,6 +2704,8 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_DIRPYRDENOISE_LUMINANCE_CONTROL;Luminance control !TP_DIRPYRDENOISE_LUMINANCE_CURVE;Luminance curve !TP_DIRPYRDENOISE_LUMINANCE_FRAME;Luminance +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN;Compensate for lightness +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN_TOOLTIP;Alter the noise reduction strength based on the image lightness. Strength is reduced for dark images and increased for bright images. !TP_DIRPYRDENOISE_MAIN_COLORSPACE;Color space !TP_DIRPYRDENOISE_MAIN_COLORSPACE_LAB;L*a*b* !TP_DIRPYRDENOISE_MAIN_COLORSPACE_RGB;RGB @@ -2671,9 +2762,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 +2774,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 +2788,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 +2803,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 +2845,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 +2895,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 +2921,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 +2954,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 +2982,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 +3017,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 +3045,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 +3089,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 +3097,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 @@ -3009,6 +3111,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_LOCALLAB_FATFRA;Dynamic Range Compression ƒ !TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal – uses the Fattal Tone-mapping algorithm. !TP_LOCALLAB_FATLEVEL;Sigma +!TP_LOCALLAB_FATSAT;Saturation control !TP_LOCALLAB_FATSHFRA;Dynamic Range Compression Mask ƒ !TP_LOCALLAB_FEATH_TOOLTIP;Gradient width as a percentage of the Spot diagonal\nUsed by all graduated filters in all tools.\nNo action if a graduated filter hasn't been activated. !TP_LOCALLAB_FEATVALUE;Feather gradient (Grad. Filters) @@ -3027,6 +3130,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 +3223,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 +3285,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 +3323,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 +3348,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 +3398,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 +3491,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 +3503,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 +3592,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 +3919,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 +4180,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 & 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_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..f18513c15 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 @@ -3057,14 +3068,19 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !HISTORY_MSG_BLURCWAV;Blur chroma !HISTORY_MSG_BLURWAV;Blur luminance !HISTORY_MSG_COMPLEXRETI;Retinex complexity +!HISTORY_MSG_DIRPYRDENOISE_GAIN;NR - Compensate for lightness !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 +3095,9 @@ 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_LOCAL_TMO_SATUR;Local Exp Fattal Saturation !HISTORY_MSG_PERSP_CAM_ANGLE;Perspective - Camera !HISTORY_MSG_PERSP_CAM_FL;Perspective - Camera !HISTORY_MSG_PERSP_CAM_SHIFT;Perspective - Camera @@ -3098,6 +3117,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 +3156,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;Green 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 Threshold !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 +3240,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 +3254,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 +3331,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 +3349,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. @@ -3275,10 +3365,17 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !TP_CROP_PPI;PPI !TP_DIRPYRDENOISE_CHROMINANCE_METHOD_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the 'Preview' method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CHROMINANCE_PMZ;Preview multi-zones +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN;Compensate for lightness +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN_TOOLTIP;Alter the noise reduction strength based on the image lightness. Strength is reduced for dark images and increased for bright images. !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 +3387,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 +3428,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 +3458,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 +3475,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 +3488,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 +3500,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 +3523,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 +3545,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,19 +3564,20 @@ 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_FATSAT;Saturation control !TP_LOCALLAB_FEATH_TOOLTIP;Gradient width as a percentage of the Spot diagonal\nUsed by all graduated filters in all tools.\nNo action if a graduated filter hasn't been activated. !TP_LOCALLAB_FEATVALUE;Feather gradient (Grad. Filters) !TP_LOCALLAB_FFTCOL_MASK;FFTW ƒ @@ -3481,6 +3585,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 +3653,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 +3697,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 +3729,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 +3753,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 +3796,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 +3851,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 +3914,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 +4080,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 +4197,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 & 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_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..232c094e0 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;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 - 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,20 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_COMPLEX;Wavelet complexity !HISTORY_MSG_COMPLEXRETI;Retinex complexity !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation +!HISTORY_MSG_DIRPYRDENOISE_GAIN;NR - Compensate for lightness +!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 +3131,9 @@ 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_LOCAL_TMO_SATUR;Local Exp Fattal Saturation !HISTORY_MSG_PERSP_CAM_ANGLE;Perspective - Camera !HISTORY_MSG_PERSP_CAM_FL;Perspective - Camera !HISTORY_MSG_PERSP_CAM_SHIFT;Perspective - Camera @@ -3128,6 +3147,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 +3171,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;Green 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 Threshold !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 +3211,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 +3271,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,11 +3283,14 @@ 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. !TP_CROP_GTCENTEREDSQUARE;Centered square !TP_DEHAZE_SATURATION;Saturation +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN;Compensate for lightness +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN_TOOLTIP;Alter the noise reduction strength based on the image lightness. Strength is reduced for dark images and increased for bright images. !TP_FILMNEGATIVE_BLUEBALANCE;Cool/Warm !TP_FILMNEGATIVE_COLORSPACE;Inversion color space: !TP_FILMNEGATIVE_COLORSPACE_INPUT;Input color space @@ -3206,11 +3298,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 +3345,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 +3365,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 +3391,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 +3424,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 +3452,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 +3487,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 +3515,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 +3559,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 +3567,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 @@ -3478,6 +3581,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_LOCALLAB_FATFRA;Dynamic Range Compression ƒ !TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal – uses the Fattal Tone-mapping algorithm. !TP_LOCALLAB_FATLEVEL;Sigma +!TP_LOCALLAB_FATSAT;Saturation control !TP_LOCALLAB_FATSHFRA;Dynamic Range Compression Mask ƒ !TP_LOCALLAB_FEATH_TOOLTIP;Gradient width as a percentage of the Spot diagonal\nUsed by all graduated filters in all tools.\nNo action if a graduated filter hasn't been activated. !TP_LOCALLAB_FEATVALUE;Feather gradient (Grad. Filters) @@ -3496,6 +3600,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 +3693,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 +3755,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 +3793,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 +3818,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 +3868,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 +3961,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 +3973,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 +4062,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 +4188,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 +4240,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 & 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_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..ed2e32616 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;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 - 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 @@ -2956,16 +2967,21 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !HISTORY_MSG_COMPLEX;Wavelet complexity !HISTORY_MSG_COMPLEXRETI;Retinex complexity !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation +!HISTORY_MSG_DIRPYRDENOISE_GAIN;NR - Compensate for lightness !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 +2990,9 @@ 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_LOCAL_TMO_SATUR;Local Exp Fattal Saturation !HISTORY_MSG_PERSP_CAM_ANGLE;Perspective - Camera !HISTORY_MSG_PERSP_CAM_FL;Perspective - Camera !HISTORY_MSG_PERSP_CAM_SHIFT;Perspective - Camera @@ -2996,6 +3015,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 +3059,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;Green 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 Threshold !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 +3100,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 +3160,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,11 +3183,14 @@ 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. !TP_CROP_GTCENTEREDSQUARE;Centered square !TP_DEHAZE_SATURATION;Saturation +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN;Compensate for lightness +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN_TOOLTIP;Alter the noise reduction strength based on the image lightness. Strength is reduced for dark images and increased for bright images. !TP_FILMNEGATIVE_BLUEBALANCE;Cool/Warm !TP_FILMNEGATIVE_COLORSPACE;Inversion color space: !TP_FILMNEGATIVE_COLORSPACE_INPUT;Input color space @@ -3106,11 +3198,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 +3245,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 +3266,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 +3292,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 +3325,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 +3353,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 +3388,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 +3416,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 +3460,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 +3468,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 @@ -3379,6 +3482,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !TP_LOCALLAB_FATFRA;Dynamic Range Compression ƒ !TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal – uses the Fattal Tone-mapping algorithm. !TP_LOCALLAB_FATLEVEL;Sigma +!TP_LOCALLAB_FATSAT;Saturation control !TP_LOCALLAB_FATSHFRA;Dynamic Range Compression Mask ƒ !TP_LOCALLAB_FEATH_TOOLTIP;Gradient width as a percentage of the Spot diagonal\nUsed by all graduated filters in all tools.\nNo action if a graduated filter hasn't been activated. !TP_LOCALLAB_FEATVALUE;Feather gradient (Grad. Filters) @@ -3397,6 +3501,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 +3594,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 +3656,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 +3694,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 +3719,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 +3769,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 +3862,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 +3874,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 +3963,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 +4093,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 +4192,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 & 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_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..84c52d64f 100644 --- a/rtdata/languages/Deutsch +++ b/rtdata/languages/Deutsch @@ -1,90 +1,91 @@ -#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 +#086 2023-09, Version RT 5.10 (marter) ABOUT_TAB_BUILD;Version ABOUT_TAB_CREDITS;Danksagungen @@ -145,12 +146,16 @@ EXIFFILTER_IMAGETYPE;Bildtyp EXIFFILTER_ISO;ISO EXIFFILTER_LENS;Objektiv EXIFFILTER_METADATAFILTER;Metadatenfilter einschalten +EXIFFILTER_PATH;Dateipfad EXIFFILTER_SHUTTER;Verschlusszeit +EXIFPANEL_ACTIVATE_ALL_HINT;Alle Attribute auswählen +EXIFPANEL_ACTIVATE_NONE_HINT;alle Attribute abwählen EXIFPANEL_ADDEDIT;Hinzufügen/Ändern EXIFPANEL_ADDEDITHINT;Attribut hinzufügen oder ändern EXIFPANEL_ADDTAGDLG_ENTERVALUE;Wert eingeben EXIFPANEL_ADDTAGDLG_SELECTTAG;Attribut auswählen EXIFPANEL_ADDTAGDLG_TITLE;Attribut hinzufügen/ändern +EXIFPANEL_BASIC_GROUP;Basis EXIFPANEL_KEEP;Behalten EXIFPANEL_KEEPHINT;Gewählte Attribute beim Erzeugen des Bildes behalten EXIFPANEL_REMOVE;Entfernen @@ -159,8 +164,7 @@ EXIFPANEL_RESET;Zurücksetzen EXIFPANEL_RESETALL;Alle zurücksetzen EXIFPANEL_RESETALLHINT;Alle Attribute auf die ursprünglichen Werte zurücksetzen EXIFPANEL_RESETHINT;Gewählte Attribute auf die ursprünglichen Werte zurücksetzen -EXIFPANEL_SHOWALL;Alle anzeigen -EXIFPANEL_SUBDIRECTORY;Unterverzeichnis +EXIFPANEL_VALUE_NOT_SHOWN;keine Anzeige EXPORT_BYPASS;Verarbeitungsschritte überspringen EXPORT_BYPASS_ALL;Alle/Keine auswählen EXPORT_BYPASS_DEFRINGE;Farbsaum entfernen überspringen @@ -249,17 +253,18 @@ FILEBROWSER_POPUPREMOVE;Unwiderruflich löschen FILEBROWSER_POPUPREMOVEINCLPROC;Unwiderruflich löschen\n(einschl. aller Dateien der Stapelverarbeitung) FILEBROWSER_POPUPRENAME;Umbenennen FILEBROWSER_POPUPSELECTALL;Alle auswählen +FILEBROWSER_POPUPSORTBY;Dateien sortieren FILEBROWSER_POPUPTRASH;In den Papierkorb verschieben FILEBROWSER_POPUPUNRANK;Bewertung entfernen FILEBROWSER_POPUPUNTRASH;Aus dem Papierkorb wiederherstellen FILEBROWSER_QUERYBUTTONHINT;Suchfilter zurücksetzen. FILEBROWSER_QUERYHINT;Nur Dateien anzeigen, deren Namen die angegebene Zeichenkette beinhalten.\n\nTaste:\nStrg + f Setzt den Cursor in das Suchfeld\nEnter Suche starten\nEsc Suchfeld löschen\nUmschalt + Esc Suchfeldfeld verlassen FILEBROWSER_QUERYLABEL;Suche: -FILEBROWSER_RANK1_TOOLTIP;Bewertung 1 *\nTaste: Umschalt + 1 -FILEBROWSER_RANK2_TOOLTIP;Bewertung 2 **\nTaste: Umschalt + 2 -FILEBROWSER_RANK3_TOOLTIP;Bewertung 3 ***\nTaste: Umschalt + 3 -FILEBROWSER_RANK4_TOOLTIP;Bewertung 4 ****\nTaste: Umschalt + 4 -FILEBROWSER_RANK5_TOOLTIP;Bewertung 5 *****\nTaste: Umschalt + 5 +FILEBROWSER_RANK1_TOOLTIP;Bewertung 1 *\nTaste: 1 +FILEBROWSER_RANK2_TOOLTIP;Bewertung 2 **\nTaste: 2 +FILEBROWSER_RANK3_TOOLTIP;Bewertung 3 ***\nTaste: 3 +FILEBROWSER_RANK4_TOOLTIP;Bewertung 4 ****\nTaste: 4 +FILEBROWSER_RANK5_TOOLTIP;Bewertung 5 *****\nTaste: 5 FILEBROWSER_RENAMEDLGLABEL;Datei umbenennen FILEBROWSER_RESETDEFAULTPROFILE;Profil auf Vorgabe zurücksetzen FILEBROWSER_SELECTDARKFRAME;Dunkelbild wählen... @@ -270,28 +275,29 @@ FILEBROWSER_SHOWCOLORLABEL3HINT;Nur grün markierte Bilder anzeigen.\nTaste: FILEBROWSER_SHOWCOLORLABEL4HINT;Nur blau markierte Bilder anzeigen.\nTaste: Alt + 4 FILEBROWSER_SHOWCOLORLABEL5HINT;Nur violett markierte Bilder anzeigen.\nTaste: Alt + 5 FILEBROWSER_SHOWDIRHINT;Alle Filter zurücksetzen.\nTaste: d -FILEBROWSER_SHOWEDITEDHINT;Nur bearbeitete Bilder anzeigen.\nTaste: 7 -FILEBROWSER_SHOWEDITEDNOTHINT;Nur unbearbeitete Bilder anzeigen.\nTaste: 6 +FILEBROWSER_SHOWEDITEDHINT;Nur bearbeitete Bilder anzeigen.\nTaste: Umschalt-7 +FILEBROWSER_SHOWEDITEDNOTHINT;Nur unbearbeitete Bilder anzeigen.\nTaste: Umschalt-6 FILEBROWSER_SHOWEXIFINFO;Bildinformationen ein-/ausblenden.\n\nIm Multi-Reitermodus:\nTaste: i\nIm Ein-Reitermodus:\nTaste: Alt + i FILEBROWSER_SHOWNOTTRASHHINT;Nur Bilder außerhalb des Papierkorbs anzeigen. FILEBROWSER_SHOWORIGINALHINT;Zeige nur das Originalbild.\n\nWenn mehrere Bilder mit dem gleichen Dateinamen und unterschiedlichen Dateitypen existieren, ist das Originalbild das Bild, welches in der Liste 'Dateitypen anzeigen' unter Einstellungen > Dateiverwaltung als erstes gefunden wird. -FILEBROWSER_SHOWRANK1HINT;Nur mit 1 Stern bewertete Bilder anzeigen.\nTaste: 1 -FILEBROWSER_SHOWRANK2HINT;Nur mit 2 Sternen bewertete Bilder anzeigen.\nTaste: 2 -FILEBROWSER_SHOWRANK3HINT;Nur mit 3 Sternen bewertete Bilder anzeigen.\nTaste: 3 -FILEBROWSER_SHOWRANK4HINT;Nur mit 4 Sternen bewertete Bilder anzeigen.\nTaste: 4 -FILEBROWSER_SHOWRANK5HINT;Nur mit 5 Sternen bewertete Bilder anzeigen.\nTaste: 5 +FILEBROWSER_SHOWRANK1HINT;Nur mit 1 Stern bewertete Bilder anzeigen.\nTaste: Umschalt-1 +FILEBROWSER_SHOWRANK2HINT;Nur mit 2 Sternen bewertete Bilder anzeigen.\nTaste: Umschalt-2 +FILEBROWSER_SHOWRANK3HINT;Nur mit 3 Sternen bewertete Bilder anzeigen.\nTaste: Umschalt-3 +FILEBROWSER_SHOWRANK4HINT;Nur mit 4 Sternen bewertete Bilder anzeigen.\nTaste: Umschalt-4 +FILEBROWSER_SHOWRANK5HINT;Nur mit 5 Sternen bewertete Bilder anzeigen.\nTaste: Umschalt-5 FILEBROWSER_SHOWRECENTLYSAVEDHINT;Nur gespeicherte Bilder anzeigen.\nTaste: Alt + 7 FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Nur nicht gespeicherte Bilder anzeigen.\nTaste: Alt + 6 FILEBROWSER_SHOWTRASHHINT;Inhalt des Papierkorbs anzeigen.\nTaste: Strg + t FILEBROWSER_SHOWUNCOLORHINT;Nur unmarkierte Bilder anzeigen.\nTaste: Alt + 0 -FILEBROWSER_SHOWUNRANKHINT;Nur unbewertete Bilder anzeigen.\nTaste: 0 +FILEBROWSER_SHOWUNRANKHINT;Nur unbewertete Bilder anzeigen.\nTaste: Umschalt-0 FILEBROWSER_THUMBSIZE;Miniaturbildgröße -FILEBROWSER_UNRANK_TOOLTIP;Bewertung entfernen.\nTaste: Umschalt + 0 +FILEBROWSER_UNRANK_TOOLTIP;Bewertung entfernen.\nTaste: 0 FILEBROWSER_ZOOMINHINT;Miniaturbilder vergrößern.\n\nIm Multi-Reitermodus:\nTaste: +\nIm Ein-Reitermodus:\nTaste: Alt + FILEBROWSER_ZOOMOUTHINT;Miniaturbilder verkleinern.\n\nIm Multi-Reitermodus:\nTaste: -\nIm Ein-Reitermodus:\nTaste: Alt - FILECHOOSER_FILTER_ANY;Alle Dateien FILECHOOSER_FILTER_COLPROF;Farbprofile FILECHOOSER_FILTER_CURVE;Kurvendateien +FILECHOOSER_FILTER_EXECUTABLE;Ausführbare Dateien FILECHOOSER_FILTER_LCP;Objektivkorrekturprofile FILECHOOSER_FILTER_PP;Verarbeitungsprofile FILECHOOSER_FILTER_SAME;Gleiches Format wie aktuelles Bild @@ -319,6 +325,7 @@ GENERAL_NO;Nein GENERAL_NONE;Keine GENERAL_OK;OK GENERAL_OPEN;Öffnen +GENERAL_OTHER;Andere GENERAL_PORTRAIT;Portrait GENERAL_RESET;Zurücksetzen GENERAL_SAVE;Speichern @@ -329,11 +336,11 @@ GENERAL_WARNING;Warnung GIMP_PLUGIN_INFO;Willkommen beim RawTherapee GIMP-Plugin!\nNach den Änderungen bitte das RawTherapee-Fenster schließen.\nDas Bild wird dann automatisch in GIMP importiert. HISTOGRAM_TOOLTIP_B;Blau-Histogramm ein-/ausblenden. HISTOGRAM_TOOLTIP_BAR;RGB-Anzeigeleiste ein-/ausblenden. -HISTOGRAM_TOOLTIP_CHRO;Chromatizität-Histogramm ein/ausblenden. +HISTOGRAM_TOOLTIP_CHRO;Chromatizität-Histogramm ein-/ausblenden. HISTOGRAM_TOOLTIP_CROSSHAIR;Fadenkreuz ein-/ ausblenden HISTOGRAM_TOOLTIP_G;Grün-Histogramm ein-/ausblenden. HISTOGRAM_TOOLTIP_L;CIELab-Luminanz-Histogramm ein-/ausblenden. -HISTOGRAM_TOOLTIP_MODE;Schaltet zwischen linearer, logarithmisch-linearer und\nlogarithmisch-logarithmischer Skalierung um. +HISTOGRAM_TOOLTIP_MODE;Schaltet zwischen linearer, logarithmisch-linearer und logarithmisch-logarithmischer Skalierung um. HISTOGRAM_TOOLTIP_R;Rot-Histogramm ein-/ausblenden. HISTOGRAM_TOOLTIP_SHOW_OPTIONS;Histogrammoptionen ein-/ ausschalten HISTOGRAM_TOOLTIP_TRACE_BRIGHTNESS;Helligkeitsbereich anpassen @@ -817,22 +824,22 @@ HISTORY_MSG_493;(Belichtung - L*a*b*) HISTORY_MSG_494;(RAW - Eingangsschärfung) HISTORY_MSG_496;(Lokal - Spot)\nGelöscht HISTORY_MSG_497;(Lokal - Spot)\nAusgewählt -HISTORY_MSG_498;(Lokal - Spot)\nName -HISTORY_MSG_499;(Lokal - Spot)\nSichtbarkeit +HISTORY_MSG_498;--nicht verwendet-- +HISTORY_MSG_499;--nicht verwendet-- HISTORY_MSG_500;(Lokal - Spot)\nForm HISTORY_MSG_501;(Lokal - Spot)\nMethode HISTORY_MSG_502;(Lokal - Spot)\nForm-Methode -HISTORY_MSG_503;(Lokal - Spot)\nPos X-rechts -HISTORY_MSG_504;(Lokal - Spot)\nPos X-links -HISTORY_MSG_505;(Lokal - Spot)\nPos Y-unten -HISTORY_MSG_506;(Lokal - Spot)\nPos Y-oben +HISTORY_MSG_503;(Lokal - Spot)\nRechts +HISTORY_MSG_504;(Lokal - Spot)\nLinks +HISTORY_MSG_505;(Lokal - Spot)\nUnten +HISTORY_MSG_506;(Lokal - Spot)\nOben HISTORY_MSG_507;(Lokal - Spot)\nMitte HISTORY_MSG_508;(Lokal - Spot)\nSpotgröße HISTORY_MSG_509;(Lokal - Spot)\nQualitäts-Methode HISTORY_MSG_510;(Lokal - Spot)\nÜbergangsgradient\nIntensität HISTORY_MSG_511;(Lokal - Spot)\nKantenerkennung\nSchwellenwert HISTORY_MSG_512;(Lokal - Spot)\nKantenerkennung\nΔE Zerfall -HISTORY_MSG_513;(Lokal - Spot)\nBereich +HISTORY_MSG_513;(Lokal - Spot)\nausschließender Bereich HISTORY_MSG_514;(Lokal - Spot)\nStruktur HISTORY_MSG_515;(Lokal - Lokale Anpassungen) HISTORY_MSG_516;(Lokal - Farbe-Licht) @@ -963,7 +970,7 @@ HISTORY_MSG_641;(Lokal - Schatten/Lichter)\nMaske HISTORY_MSG_642;(Lokal - Schatten/Lichter)\nMaske\nRadius HISTORY_MSG_643;(Lokal - Schatten/Lichter)\nUnschärfe Kantenerkennung HISTORY_MSG_644;(Lokal - Schatten/Lichter)\nInvertieren -HISTORY_MSG_645;(Lokal - Spot)\nKantenerkennung\nBalance ab-L (ΔE) +HISTORY_MSG_645;(Lokal - Spot)\nKantenerkennung\nBalance ab-L HISTORY_MSG_646;(Lokal - Dynamik u. Belichtung)\nMaske\nFarbintensität HISTORY_MSG_647;(Lokal - Dynamik u. Belichtung)\nMaske\nGamma HISTORY_MSG_648;(Lokal - Dynamik u. Belichtung)\nMaske\nSteigung @@ -994,7 +1001,7 @@ HISTORY_MSG_672;(Lokal - Detailebenen)\nMaske CL HISTORY_MSG_673;(Lokal - Detailebenen)\nMaske anwenden HISTORY_MSG_674;(Lokal)\nWerkzeug entfernt HISTORY_MSG_675;(Lokal - Tonwert)\nRadius -HISTORY_MSG_676;(Lokal - Spot)\nÜbergangsgradient\nUnterschied XY +HISTORY_MSG_676;(Lokal - Spot)\nÜbergangsgradient\nUnterschied HISTORY_MSG_677;(Lokal - Tonwert)\nIntensität HISTORY_MSG_678;(Lokal - Tonwert)\nSättigung HISTORY_MSG_679;(Lokal - Retinex)\nMaske C @@ -1097,14 +1104,14 @@ HISTORY_MSG_781;(Lokal - Wavelet)\nWavelet Ebenen HISTORY_MSG_782;(Lokal - Unschärfe)\nMaske\nWavelet Ebenen HISTORY_MSG_783;(Lokal - Farbe-Licht)\nWavelet Ebenenauswahl HISTORY_MSG_784;(Lokal - Spot)\nMaskieren\nΔE Bildmaske -HISTORY_MSG_785;(Lokal - Spot)\nMaskieren\nBereich ΔE-Bildmaske +HISTORY_MSG_785;(Lokal - Spot)\nMaskieren\nBereich Bildmaske HISTORY_MSG_786;(Lokal - Schatten/Lichter)\nMethode -HISTORY_MSG_787;(Lokal - Schatten/Lichter)\nEqualizer Regler -HISTORY_MSG_788;(Lokal - Schatten/Lichter)\nEqualizer Details +HISTORY_MSG_787;(Lokal - Schatten/Lichter)\nTonwert-Equalizer\nWerte +HISTORY_MSG_788;(Lokal - Schatten/Lichter)\nTonwert-Equalizer\nDetails HISTORY_MSG_789;(Lokal - Schatten/Lichter)\nMaske\nIntensität HISTORY_MSG_790;(Lokal - Schatten/Lichter)\nMaske Ankerpunkt HISTORY_MSG_791;(Lokal - Maske)\nShort L-Kurve -HISTORY_MSG_792;(Lokal - Spot)\nMaskieren\nHintergrundfarbe Luminanzmaske +HISTORY_MSG_792;(Lokal - Spot)\nMaskieren\nHintergrund Maske HISTORY_MSG_793;(Lokal - Schatten/Lichter)\nGamma Farbtonkennlinie HISTORY_MSG_794;(Lokal - Schatten/Lichter)\nSteigung Farbtonkennlinie HISTORY_MSG_795;(Lokal - Maske)\nSichern wiederhergestelltes Bild @@ -1177,7 +1184,7 @@ HISTORY_MSG_863;(Lokal - Wavelet)\nOriginal zusammenführen HISTORY_MSG_864;(Lokal - Wavelet)\nDirektionaler Kontrast\nDämpfungsreaktion HISTORY_MSG_865;(Lokal - Wavelet)\nDirektionaler Kontrast\nEbenenbalance HISTORY_MSG_866;(Lokal - Wavelet)\nDirektionaler Kontrast\nKompression -HISTORY_MSG_868;(Lokal - Spot)\nKantenerkennung\nC-H Balance (ΔE) +HISTORY_MSG_868;(Lokal - Spot)\nKantenerkennung\nC-H Balance HISTORY_MSG_869;(Lokal - Rauschminderung)\nLuminanzkurve HISTORY_MSG_870;(Lokal - Lokaler Kontrast)\nMaske\nKurve H HISTORY_MSG_871;(Lokal - Lokaler Kontrast)\nMaske\nKurve C @@ -1436,7 +1443,7 @@ HISTORY_MSG_1127;(Lokal - CIECAM)\nMaske\nGamma HISTORY_MSG_1128;(Lokal - CIECAM)\nMaske\nSteigung HISTORY_MSG_1129;(Lokal - CIECAM)\nJz Cz Hz\nRelative Helligkeit HISTORY_MSG_1130;(Lokal - CIECAM)\nJz Cz Hz\nSättigung -HISTORY_MSG_1131;(Lokal - Maske)\nRauschminderung Chroma +HISTORY_MSG_1131;(Lokal - Maske)\nRauschminderung HISTORY_MSG_1132;(Lokal - CIECAM)\nWavelet Jz\nDämpfungsreaktion HISTORY_MSG_1133;(Lokal - CIECAM)\nWavelet Jz\nEbenen HISTORY_MSG_1134;(Lokal - CIECAM)\nWavelet Jz\nLokaler Kontrast @@ -1485,21 +1492,26 @@ HISTORY_MSG_DEHAZE_ENABLED;(Details - Bildschleier entfernen) HISTORY_MSG_DEHAZE_SATURATION;(Details - Bildschleier entfernen)\nSättigung HISTORY_MSG_DEHAZE_SHOW_DEPTH_MAP;(Details - Bildschleier entfernen)\nMaske anzeigen HISTORY_MSG_DEHAZE_STRENGTH;(Details - Bildschleier entfernen)\nIntensität +HISTORY_MSG_DIRPYRDENOISE_GAIN;(Details - Rauschreduzierung)\nHelligkeitskompensation HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST;(Sensor—Matrix)\nFarbinterpolation\nAuto-Kontrastschwelle HISTORY_MSG_DUALDEMOSAIC_CONTRAST;(RAW - Sensor-Matrix)\nFarbinterpolation\nKontrastschwelle HISTORY_MSG_EDGEFFECT;(Erweitert - Wavelet)\nKantenschärfung\nDämpfungsreaktion +HISTORY_MSG_FF_FROMMETADATA;(RAW- Weißbild)\nFlat-Field - aus den Metadaten HISTORY_MSG_FILMNEGATIVE_BALANCE;(Farbe - Negativfilm)\nAusgabestärke HISTORY_MSG_FILMNEGATIVE_COLORSPACE;(Farbe - Negativfilm)\nFarbraum HISTORY_MSG_FILMNEGATIVE_ENABLED;(Farbe - Negativfilm) HISTORY_MSG_FILMNEGATIVE_REF_SPOT;(Farbe - Negativfilm)\nReferenz Eingabe HISTORY_MSG_FILMNEGATIVE_VALUES;(Farbe - Negativfilm)\nWerte +HISTORY_MSG_GAMUTMUNSEL;Gamut-Munsell HISTORY_MSG_HISTMATCHING;(Belichtung)\nAuto-Tonwertkurve -HISTORY_MSG_HLBL;Farbübertragung - Unschärfe +HISTORY_MSG_HLBL;(Belichtung - Lichterkompression)\nFarbübertragung - Unschärfe +HISTORY_MSG_HLTH;(Belichtung - Lichterkompression)\nInterpolieren - Schwellenwert HISTORY_MSG_ICL_LABGRIDCIEXY;Cie xy-Diagramm HISTORY_MSG_ICM_AINTENT;Absicht Abstraktes Profil HISTORY_MSG_ICM_BLUX;(Farbe - Farbmanagement)\nAbstraktes Profil\nVorgabe Blau X HISTORY_MSG_ICM_BLUY;(Farbe - Farbmanagement)\nAbstraktes Profil\nVorgabe Blau Y HISTORY_MSG_ICM_FBW;(Farbe - Farbmanagement)\nAbstraktes Profil\nSchwarz-Weiß +HISTORY_MSG_ICM_GAMUT;(Farbe - Farbmanagement)\nAbstraktes Profil\nGamut-Kontrolle HISTORY_MSG_ICM_GREX;(Farbe - Farbmanagement)\nAbstraktes Profil\nVorgabe Grün X HISTORY_MSG_ICM_GREY;(Farbe - Farbmanagement)\nAbstraktes Profil\nVorgabe Grün Y HISTORY_MSG_ICM_OUTPUT_PRIMARIES;(Farbe - Farbmanagement)\nAbstraktes Profil\nAusgabeprofil Vorgaben @@ -1519,6 +1531,9 @@ HISTORY_MSG_LOCALCONTRAST_DARKNESS;(Details - Lokaler Kontrast)\nDunkle Bereiche HISTORY_MSG_LOCALCONTRAST_ENABLED;(Details - Lokaler Kontrast) HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;(Details - Lokaler Kontrast)\nHelle Bereiche HISTORY_MSG_LOCALCONTRAST_RADIUS;(Details - Lokaler Kontrast)\nRadius +HISTORY_MSG_LOCALLAB_TE_PIVOT;(Lokal - Schatten/Lichter)\nTonwert-Equalizer\nWichtung +HISTORY_MSG_LOCAL_DEHAZE_BLACK;(Lokal - Dunst entfernen)\nSchwarzpunkt +HISTORY_MSG_LOCAL_GAMUTMUNSEL;(Lokal - Spot)\nSpeziell\nFarbverschiebung vermeiden HISTORY_MSG_METADATA_MODE;(Metadaten)\nKopiermodus HISTORY_MSG_MICROCONTRAST_CONTRAST;(Details - Mikrokontrast)\nKontrastschwelle HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;(RAW - Eingangsschärfung)\nAuto-Schwelle @@ -1564,6 +1579,11 @@ HISTORY_MSG_SPOT_ENTRY;(Details -Flecken entfernen)\nPunkt modifiziert HISTORY_MSG_TEMPOUT;CAM02 Temperatur Automatik HISTORY_MSG_THRESWAV;(Balance) Schwellenwert HISTORY_MSG_TM_FATTAL_ANCHOR;(Belichtung - Dynamikkompression)\nHelligkeitsverschiebung +HISTORY_MSG_TONE_EQUALIZER_BANDS;(Belichtung - Tonwert-Equalizer)\nWerte +HISTORY_MSG_TONE_EQUALIZER_ENABLED;(Belichtung - Tonwert-Equalizer) +HISTORY_MSG_TONE_EQUALIZER_PIVOT;(Belichtung - Tonwert-Equalizer)\nWichtung +HISTORY_MSG_TONE_EQUALIZER_REGULARIZATION;(Belichtung - Tonwert-Equalizer)\nRegulierung +HISTORY_MSG_TONE_EQUALIZER_SHOW_COLOR_MAP;(Belichtung - Tonwert-Equalizer)\nFarbmaske HISTORY_MSG_TRANS_METHOD;(Transformieren - Objektivkorrektur)\nMethode HISTORY_MSG_WAVBALCHROM;(Erweitert - Wavelet)\nRauschreduzierung\nFarb-Equalizer HISTORY_MSG_WAVBALLUM;(Erweitert - Wavelet)\nRauschreduzierung\nEqualizer Luminanz @@ -1603,6 +1623,12 @@ HISTORY_MSG_WAVSTREND;(Erweitert - Wavelet)\nEndretusche - finales Glätten\nInt HISTORY_MSG_WAVTHRDEN;(Erweitert - Wavelet)\nRauschreduzierung\nSchwellenwert HISTORY_MSG_WAVTHREND;(Erweitert - Wavelet)\nEndretusche - finales Glätten\nSchwellenwert Lokaler Kontrast HISTORY_MSG_WAVUSHAMET;(Erweitert - Wavelet)\nSchärfemaske und Klarheit\nMethode +HISTORY_MSG_WBALANCE_OBSERVER10;(Farbe - Weißabgleich)\nBeobachter 10° +HISTORY_MSG_WBITC_CUSTOM;(Farbe - Weißabgleich)\nTemperaturbezogen - Benutzerdefiniert +HISTORY_MSG_WBITC_GREEN;(Farbe - Weißabgleich)\nGrün-Verfeinerung +HISTORY_MSG_WBITC_MINSIZE;(Farbe-Weißabgleich)\nPatch Mindestgröße +HISTORY_MSG_WBITC_OBS;(Farbe - Weißabgleich)\n2-Wege-Algorithmus entfernt +HISTORY_MSG_WBITC_PRIM;(Farbe - Weißabgleich)\nWahl der Abtastung HISTORY_NEWSNAPSHOT;Hinzufügen HISTORY_NEWSNAPSHOT_TOOLTIP;Taste: Alt + s HISTORY_SNAPSHOT;Schnappschuss @@ -1695,14 +1721,14 @@ IPTCPANEL_TRANSREFERENCE;Verarbeitungs-ID IPTCPANEL_TRANSREFERENCEHINT;Geben Sie eine Kennung zur Kontrolle oder Verfolgung des Arbeitsablaufes ein. MAIN_BUTTON_FULLSCREEN;Vollbild\nTaste: F11 MAIN_BUTTON_ICCPROFCREATOR;ICC-Profil erstellen. -MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigiert zum nächsten Miniaturbild in der\nDateiverwaltung oder Filmstreifen bezogen\nauf das ausgewählte Miniaturbild.\nTaste: F4\n\nNavigiert zum nächsten Miniaturbild in der\nDateiverwaltung oder Filmstreifen bezogen\nauf das im Editor geöffnete Bild.\nTaste: Umschalt + F4 -MAIN_BUTTON_NAVPREV_TOOLTIP;Navigiert zum vorherigen Miniaturbild in der\nDateiverwaltung oder Filmstreifen bezogen\nauf das ausgewählte Miniaturbild.\nTaste: F3\n\nNavigiert zum vorherigen Miniaturbild in der\nDateiverwaltung oder Filmstreifen bezogen\nauf das im Editor geöffnete Bild.\nTaste: Umschalt + F3 -MAIN_BUTTON_NAVSYNC_TOOLTIP;Selektiert das Miniaturbild des aktuell geöffneten\nBildes in der Dateiverwaltung und des Filmstreifens.\nEs werden alle aktiven Filter gelöscht.\nTaste: x\n\nWie oben, jedoch ohne Löschung aktiver Filter. Das\nMiniaturbild des geöffneten Bildes wird nicht angezeigt,\nwenn es herausgefiltert wurde.\nTaste: y +MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigiert zum nächsten Miniaturbild in der Dateiverwaltung oder Filmstreifen bezogen auf das ausgewählte Miniaturbild.\nTaste: F4\n\nNavigiert zum nächsten Miniaturbild in der Dateiverwaltung oder Filmstreifen bezogen auf das im Editor geöffnete Bild.\nTaste: Umschalt + F4 +MAIN_BUTTON_NAVPREV_TOOLTIP;Navigiert zum vorherigen Miniaturbild in der Dateiverwaltung oder Filmstreifen bezogen auf das ausgewählte Miniaturbild.\nTaste: F3\n\nNavigiert zum vorherigen Miniaturbild in der Dateiverwaltung oder Filmstreifen bezogen auf das im Editor geöffnete Bild.\nTaste: Umschalt + F3 +MAIN_BUTTON_NAVSYNC_TOOLTIP;Selektiert das Miniaturbild des aktuell geöffneten Bildes in der Dateiverwaltung und des Filmstreifens.\nEs werden alle aktiven Filter gelöscht.\nTaste: x\n\nWie oben, jedoch ohne Löschung aktiver Filter. \nTaste: y\nDas Miniaturbild des geöffneten Bildes wird nicht angezeigt, wenn es herausgefiltert wurde. MAIN_BUTTON_PREFERENCES;Einstellungen MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Bild zur Warteschlange hinzufügen.\nTaste: Strg + b MAIN_BUTTON_SAVE_TOOLTIP;Bild speichern.\nTaste: Strg + s\nProfil (.pp3) speichern.\nTaste: Strg + Umschalt + s MAIN_BUTTON_SENDTOEDITOR;Bild im externen Editor öffnen. -MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Bild im externen Editor öffnen.\nTaste: Strg + e +MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Bild im externen Editor öffnen.\nTaste: Strg + e.\nAktueller Editor: MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;Alle seitlichen Bedienfelder ein-/ausblenden.\nTaste: m MAIN_BUTTON_UNFULLSCREEN;Vollbild beenden.\nTaste: F11 MAIN_FRAME_EDITOR;Editor @@ -1757,16 +1783,16 @@ MAIN_TOOLTIP_BACKCOLOR0;Hintergrundfarbe der Vorschau basierend auf dem Oberf MAIN_TOOLTIP_BACKCOLOR1;Hintergrundfarbe der Vorschau: Schwarz\nTaste: 9 MAIN_TOOLTIP_BACKCOLOR2;Hintergrundfarbe der Vorschau: Weiß\nTaste: 9 MAIN_TOOLTIP_BACKCOLOR3;Hintergrundfarbe der Vorschau: Mittleres Grau\nTaste: 9 -MAIN_TOOLTIP_BEFOREAFTERLOCK;Vorher-Ansicht: Sperren / Entsperren\n\nGesperrt: Friert die Vorher-Ansicht ein,\nsodass sich die Gesamtwirkung mehrerer\nBearbeitungsschritte beurteilen lässt.\n\nEntsperrt: Die Vorher-Ansicht hinkt dem\naktuellen Bild immer einen Bearbeitungs-\nschritt hinterher. +MAIN_TOOLTIP_BEFOREAFTERLOCK;Vorher-Ansicht: Sperren / Entsperren\n\nGesperrt: Friert die Vorher-Ansicht ein, sodass sich die Gesamtwirkung mehrerer Bearbeitungsschritte beurteilen lässt.\n\nEntsperrt: Die Vorher-Ansicht hinkt dem aktuellen Bild immer einen Bearbeitungsschritt hinterher. MAIN_TOOLTIP_HIDEHP;Linkes Bedienfeld ein-/ausblenden.\nTaste: l MAIN_TOOLTIP_INDCLIPPEDH;Anzeige zu heller Bereiche ein-/ausschalten.\nTaste: > MAIN_TOOLTIP_INDCLIPPEDS;Anzeige zu dunkler Bereiche ein-/ausschalten.\nTaste: < MAIN_TOOLTIP_PREVIEWB;Vorschau Blau-Kanal\nTaste: b -MAIN_TOOLTIP_PREVIEWFOCUSMASK;Vorschau Fokusmaske\nTaste: Umschalt + f\n\nPräziser bei Bildern mit geringer Tiefenschärfe,\nniedrigem Rauschen und bei hoher Vergrößerung. +MAIN_TOOLTIP_PREVIEWFOCUSMASK;Vorschau Fokusmaske\nTaste: Umschalt + f\n\nPräziser bei Bildern mit geringer Tiefenschärfe, niedrigem Rauschen und bei hoher Vergrößerung. MAIN_TOOLTIP_PREVIEWG;Vorschau Grün-Kanal\nTaste: g MAIN_TOOLTIP_PREVIEWL;Vorschau Helligkeit\nTaste: v\n\n0.299·R + 0.587·G + 0.114·B MAIN_TOOLTIP_PREVIEWR;Vorschau Rot-Kanal\nTaste: r -MAIN_TOOLTIP_PREVIEWSHARPMASK;Schärfungs-Kontroll-Maske ein-/ausschalten.\n\nFunktioniert nur bei aktivierter Schärfung\nund Zoom >= 100%.\nTaste: p +MAIN_TOOLTIP_PREVIEWSHARPMASK;Schärfungs-Kontroll-Maske ein-/ausschalten.\n\nFunktioniert nur bei aktivierter Schärfung und Zoom >= 100%.\nTaste: p MAIN_TOOLTIP_QINFO;Bildinformationen ein-/ausblenden.\nTaste: i MAIN_TOOLTIP_SHOWHIDELP1;Linkes Bedienfeld ein-/ausblenden.\nTaste: l MAIN_TOOLTIP_SHOWHIDERP1;Rechtes Bedienfeld ein-/ausblenden.\nTaste: Alt + l @@ -1822,6 +1848,7 @@ PARTIALPASTE_FLATFIELDBLURRADIUS;Weißbild: Unschärferadius PARTIALPASTE_FLATFIELDBLURTYPE;Weißbild: Unschärfetyp PARTIALPASTE_FLATFIELDCLIPCONTROL;Weißbild: Kontrolle zu heller Bereiche PARTIALPASTE_FLATFIELDFILE;Weißbild: Datei +PARTIALPASTE_FLATFIELDFROMMETADATA;Weißbild aus den Meta-Daten PARTIALPASTE_GRADIENT;Grauverlaufsfilter PARTIALPASTE_HSVEQUALIZER;Farbton (H)/Sättigung (S)/Dynamik (V) PARTIALPASTE_ICMSETTINGS;ICM-Einstellungen @@ -1869,6 +1896,7 @@ PARTIALPASTE_SHARPENMICRO;Mikrokontrast PARTIALPASTE_SOFTLIGHT;Weiches Licht PARTIALPASTE_SPOT;Flecken entfernen PARTIALPASTE_TM_FATTAL;Dynamikkompression +PARTIALPASTE_TONE_EQUALIZER;Tonwert-Equalizer PARTIALPASTE_VIBRANCE;Dynamik PARTIALPASTE_VIGNETTING;Vignettierungskorrektur PARTIALPASTE_WHITEBALANCE;Weißabgleich @@ -1897,6 +1925,7 @@ PREFERENCES_CACHECLEAR_SAFETY;Nur Dateien im Zwischenspeicher werden gelöscht. PREFERENCES_CACHEMAXENTRIES;Maximale Anzahl der Miniaturbilder im Festplatten-Cache PREFERENCES_CACHEOPTS;Einstellungen des Festplatten-Cache für Miniaturbilder PREFERENCES_CACHETHUMBHEIGHT;Maximale Höhe der Miniaturbilder +PREFERENCES_CAMERAPROFILESDIR;Verzeichnis der Kameraprofile PREFERENCES_CHUNKSIZES;Kacheln pro Thread PREFERENCES_CHUNKSIZE_RAW_AMAZE;AMaZE-Farbinterpolation PREFERENCES_CHUNKSIZE_RAW_CA;RAW-CA-Korrektur @@ -1952,6 +1981,11 @@ PREFERENCES_EXTEDITOR_DIR_CUSTOM;Benutzerdefiniert PREFERENCES_EXTEDITOR_DIR_TEMP;Temp-Ordner Betriebssystem PREFERENCES_EXTEDITOR_FLOAT32;Ausgabe in 32-bit (float) TIFF PREFERENCES_EXTERNALEDITOR;Externer Editor +PREFERENCES_EXTERNALEDITOR_CHANGE;Anwendung wechseln +PREFERENCES_EXTERNALEDITOR_CHANGE_FILE;Ausführbare Datei wechseln +PREFERENCES_EXTERNALEDITOR_COLUMN_COMMAND;Aufruf +PREFERENCES_EXTERNALEDITOR_COLUMN_NAME;Name +PREFERENCES_EXTERNALEDITOR_COLUMN_NATIVE_COMMAND;Nativ PREFERENCES_FBROWSEROPTS;Bildinformationen und Miniaturbilder PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Einzeilige Toolbar PREFERENCES_FLATFIELDFOUND;Gefunden @@ -1964,7 +1998,7 @@ PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Gleiche Miniaturbildgröße in der Dateiver PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Unterschiedliche Miniaturbildgrößen benötigen mehr Verarbeitungszeit beim Wechsel zwischen der Dateiverwaltung und dem Editor PREFERENCES_GIMPPATH;GIMP Installationsverzeichnis PREFERENCES_HISTOGRAMPOSITIONLEFT;Histogramm linksseitig -PREFERENCES_HISTOGRAM_TOOLTIP;Wenn aktiviert, wird das Arbeitsprofil für die Darstellung\ndes Haupthistogramms verwendet, andernfalls das des\ngammakorrigierten Ausgangsprofils. +PREFERENCES_HISTOGRAM_TOOLTIP;Wenn aktiviert, wird das Arbeitsprofil für die Darstellung des Haupthistogramms verwendet, andernfalls das des gammakorrigierten Ausgangsprofils. PREFERENCES_HLTHRESHOLD;Lichter - Schwelle PREFERENCES_ICCDIR;ICC-Profile-Verzeichnis PREFERENCES_IMPROCPARAMS;Standard-Bearbeitungsprofile @@ -1979,6 +2013,10 @@ PREFERENCES_INTENT_SATURATION;Sättigung PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Zeige das eingebettete JPEG als Miniaturbild, wenn die RAW-Datei noch nicht editiert wurde PREFERENCES_LANG;Sprache PREFERENCES_LANGAUTODETECT;Systemsprache verwenden +PREFERENCES_LENSFUNDBDIR;Lensfun Datenbankverzeichnis +PREFERENCES_LENSFUNDBDIR_TOOLTIP;Verzeichnis, in dem sich die Lensfun Datenbank befindet. Kann leer bleiben, um das Standardverzeichnis zu verwenden. +PREFERENCES_LENSPROFILESDIR;Verzeichnis der Objektivprofile +PREFERENCES_LENSPROFILESDIR_TOOLTIP;Verzeichnis, das die Adobe Lens Correction Profiles (LCPs) enthält PREFERENCES_MAXRECENTFOLDERS;Maximale Anzahl der letzten Dateien PREFERENCES_MENUGROUPEXTPROGS;Untermenü 'Öffnen mit' PREFERENCES_MENUGROUPFILEOPERATIONS;Untermenü Dateioperationen @@ -1986,6 +2024,11 @@ PREFERENCES_MENUGROUPLABEL;Untermenü Farbmarkierung PREFERENCES_MENUGROUPPROFILEOPERATIONS;Untermenü Profiloperationen PREFERENCES_MENUGROUPRANK;Untermenü Bewertung PREFERENCES_MENUOPTIONS;Menüoptionen +PREFERENCES_METADATA;Metadaten +PREFERENCES_METADATA_SYNC;Metadaten mit XMP-Dateien synchronisieren +PREFERENCES_METADATA_SYNC_NONE;Aus +PREFERENCES_METADATA_SYNC_READ;nur lesen +PREFERENCES_METADATA_SYNC_READWRITE;Bidirektional PREFERENCES_MONINTENT;Standard Monitor-Wiedergabe PREFERENCES_MONITOR;Monitor PREFERENCES_MONPROFILE;Standardfarbprofil @@ -2049,6 +2092,7 @@ PREFERENCES_STARTUPIMDIR;Bildverzeichnis beim Programmstart PREFERENCES_TAB_BROWSER;Dateiverwaltung PREFERENCES_TAB_COLORMGR;Farbmanagement PREFERENCES_TAB_DYNAMICPROFILE;Dynamisches Profil +PREFERENCES_TAB_FAVORITES;Favoriten PREFERENCES_TAB_GENERAL;Allgemein PREFERENCES_TAB_IMPROC;Bildbearbeitung PREFERENCES_TAB_PERFORMANCE;Performance @@ -2057,17 +2101,31 @@ PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Eingebundenes JPEG PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Bildanzeige PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutrales RAW-Bild PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Eingebundenes JPEG wenn in Originalgröße, sonst neutrales RAW-Bild +PREFERENCES_TOOLPANEL_AVAILABLETOOLS;Verfügbare Werkzeuge +PREFERENCES_TOOLPANEL_CLONE_FAVORITES;Belasse favorisierte Werkzeuge auch im Original-Tab +PREFERENCES_TOOLPANEL_CLONE_FAVORITES_TOOLTIP;Wenn aktiviert, werden favorisierte Werkzeuge in beiden Tabs erscheinen, in den Favoriten und im ursprünglichen Tab.\n\nMerke: Die Aktivierung dieser Option könnte zu geringfügigen Verzögerungen während des Tab-Wechsels führen. +PREFERENCES_TOOLPANEL_FAVORITE;Favorit +PREFERENCES_TOOLPANEL_FAVORITESPANEL;Favorites Panel +PREFERENCES_TOOLPANEL_TOOL;Tool PREFERENCES_TP_LABEL;Werkzeugbereich: PREFERENCES_TP_VSCROLLBAR;Keine vertikale Scrollbar PREFERENCES_USEBUNDLEDPROFILES;Standardprofile verwenden +PREFERENCES_WBA;Weißabgleich +PREFERENCES_WBACORR;Weissabgleich - automatische Temperaturkorrelation +PREFERENCES_WBACORR_TOOLTIP;Diese Einstellungen ermöglichen, abhängig von den Bildern (Art der Rohdatei, Farbmetrik usw.), eine Anpassung des Algorithmus "Temperaturkorrelation", um die besten Gesamtergebnisse zu erzielen. Es gibt keine absolute Regel, diese Parameter mit den erhaltenen Ergebnissen zu verknüpfen.\n\nEs gibt drei Arten von Einstellungen: \n* solche, die für den Benutzer über die GUI zugänglich sind.\n* solche, die nur beim Lesen aus jeder pp3-Datei zugänglich sind\n* diejenigen, auf die der Benutzer in "Optionen" zugreifen kann (siehe Rawpedia)\n Sie können "AWB-Temperatur-Bias" und "Grün-Verfeinerung" verwenden, um die Ergebnisse anzupassen. Jede Veränderung führt zu einer Neuberechnung von Temperatur, Farbton und Bezug.\n\nBitte beachten Sie, dass die drei Indikatoren "Bezugsfaktor", "Patch-Chroma" und ΔE nur zur Information dienen. Nur weil einer dieser Indikatoren besser ist, ist das Ergebnis nicht zwangsläufig besser. +PREFERENCES_WBAENA;Zeige Einstellungen der Temperaturkorrelation bei automatischem Weißabgleich +PREFERENCES_WBAENACUSTOM;Benutzerdefinierte Temperatur und Tönung PREFERENCES_WORKFLOW;Layout +PREFERENCES_XMP_SIDECAR_MODE;Datei-Endung für XMP (Sidecar) +PREFERENCES_XMP_SIDECAR_MODE_EXT;wie Darktable (DATEINAME.ext.xmp für DATEINAME.ext) +PREFERENCES_XMP_SIDECAR_MODE_STD;Standard (DATEINAME.xmp für DATEINAME.ext) PREFERENCES_ZOOMONSCROLL;Bilder zoomen per scrollen PROFILEPANEL_COPYPPASTE;Zu kopierende Parameter PROFILEPANEL_GLOBALPROFILES;Standardprofile PROFILEPANEL_LABEL;Bearbeitungsprofile PROFILEPANEL_LOADDLGLABEL;Bearbeitungsparameter laden... PROFILEPANEL_LOADPPASTE;Zu ladende Parameter -PROFILEPANEL_MODE_TOOLTIP;Ist der Button aktiviert, werden Teilprofile\nals vollständige Profile geladen.\nFehlende Parameter werden durch\nStandardwerte aufgefüllt. +PROFILEPANEL_MODE_TOOLTIP;Ist der Button aktiviert, werden Teilprofile als vollständige Profile geladen.\nFehlende Parameter werden durch Standardwerte aufgefüllt. PROFILEPANEL_MYPROFILES;Meine Profile PROFILEPANEL_PASTEPPASTE;Einzufügende Parameter PROFILEPANEL_PCUSTOM;Benutzerdefiniert @@ -2077,10 +2135,10 @@ PROFILEPANEL_PINTERNAL;Neutral PROFILEPANEL_PLASTSAVED;Zuletzt gespeichert PROFILEPANEL_SAVEDLGLABEL;Bearbeitungsprofil speichern... PROFILEPANEL_SAVEPPASTE;Zu speichernde Parameter -PROFILEPANEL_TOOLTIPCOPY;Profil in Zwischenablage kopieren.\n\nStrg-Taste beim Klicken festhalten, um\nzu kopierende Parameter auszuwählen. -PROFILEPANEL_TOOLTIPLOAD;Profil aus Datei laden.\n\nStrg-Taste beim Klicken festhalten, um\nzu ladende Parameter auszuwählen. -PROFILEPANEL_TOOLTIPPASTE;Profil aus Zwischenablage einfügen.\n\nStrg-Taste beim Klicken festhalten, um\neinzufügende Parameter auszuwählen. -PROFILEPANEL_TOOLTIPSAVE;Profil speichern.\n\nStrg-Taste beim Klicken festhalten, um\nzu speichernde Parameter auszuwählen. +PROFILEPANEL_TOOLTIPCOPY;Profil in Zwischenablage kopieren.\n\nStrg-Taste beim Klicken festhalten, um zu kopierende Parameter auszuwählen. +PROFILEPANEL_TOOLTIPLOAD;Profil aus Datei laden.\n\nStrg-Taste beim Klicken festhalten, um zu ladende Parameter auszuwählen. +PROFILEPANEL_TOOLTIPPASTE;Profil aus Zwischenablage einfügen.\n\nStrg-Taste beim Klicken festhalten, um einzufügende Parameter auszuwählen. +PROFILEPANEL_TOOLTIPSAVE;Profil speichern.\n\nStrg-Taste beim Klicken festhalten, um zu speichernde Parameter auszuwählen. PROGRESSBAR_DECODING;Dekodiere... PROGRESSBAR_GREENEQUIL;Grün-Balance... PROGRESSBAR_HLREC;Lichterrekonstruktion... @@ -2114,7 +2172,7 @@ QUEUE_LOCATION_FOLDER;In dieses Verzeichnis speichern QUEUE_LOCATION_TEMPLATE;Dynamisches Verzeichnis verwenden QUEUE_LOCATION_TEMPLATE_TOOLTIP;Die folgenden Variablen können verwendet werden:\n%f, %d1, %d2, ..., %p1, %p2, ..., %r, %s1, %s2, ...\n\nDiese Variablen beinhalten bestimmte Teile des Verzeichnispfades, in welchem sich das Bild befindet, oder Attribute des Bildes.\n\nWenn zum Beispiel /home/tom/photos/2010-10-31/dsc0042.nef geöffnet wurde, dann haben die Variablen den folgenden Inhalt:\n%d4 = home\n%d3 = tom\n%d2 = photos\n%d1 = 2010-10-31\n%f = dsc0042\n%p1 = /home/tom/photos/2010-10-31\n%p2 = /home/tom/photos\n%p3 = /home/tom\n%p4 = /home\n\nWenn Sie die Ausgabedatei in dasselbe Verzeichnis wie das Originalbild speichern wollen, dann wählen Sie:\n%p1/%f\n\nWenn Sie die Ausgabedatei in ein Unterverzeichnis mit dem Namen 'converted' schreiben wollen, dann wählen Sie:\n%p1/converted/%f\n\nWenn Sie die Ausgabedatei im Verzeichnispfad '/home/tom/photos/converted' speichern wollen, dort jedoch in einem mit dem Namen des Ursprungsverzeichnisses betitelten Unterverzeichnis, dann wählen Sie:\n%p2/converted/%d1/%f\n\nDie Variable %r enthält die Bewertung des Bildes. QUEUE_LOCATION_TITLE;Ausgabeverzeichnis -QUEUE_STARTSTOP_TOOLTIP;Startet/Stoppt die Verarbeitung\nder Warteschlange.\n\nTaste: Strg + s +QUEUE_STARTSTOP_TOOLTIP;Startet/Stoppt die Verarbeitung der Warteschlange.\n\nTaste: Strg + s SAMPLEFORMAT_0;Unbekanntes Datenformat SAMPLEFORMAT_1;8 Bit ohne Vorzeichen SAMPLEFORMAT_2;16 Bit ohne Vorzeichen @@ -2124,6 +2182,7 @@ SAMPLEFORMAT_16;16 Bit Gleitkomma SAMPLEFORMAT_32;24 Bit Gleitkomma SAMPLEFORMAT_64;32 Bit Gleitkomma SAVEDLG_AUTOSUFFIX;Suffix anfügen, wenn die Datei bereits existiert +SAVEDLG_BIGTIFF;BigTIFF (Metadaten werden nicht unterstützt) SAVEDLG_FILEFORMAT;Dateiformat SAVEDLG_FILEFORMAT_FLOAT;Fließkomma SAVEDLG_FORCEFORMATOPTS;Erzwinge Speicheroptionen @@ -2143,6 +2202,13 @@ SAVEDLG_WARNFILENAME;Die Datei wird gespeichert als SHCSELECTOR_TOOLTIP;Um die 3 Regler zurückzusetzen, rechte Maustaste klicken. SOFTPROOF_GAMUTCHECK_TOOLTIP;Markiert Pixel, deren Farbe außerhalb des Farbumfangs liegen in Abhängigkeit des:\n- Druckerprofils, wenn eines eingestellt und Soft-Proofing aktiviert ist.\n- Ausgabeprofils, wenn ein Druckerprofil nicht eingestellt und Soft-Proofing aktiviert ist.\n- Monitorprofils, wenn Soft-Proofing deaktiviert ist. SOFTPROOF_TOOLTIP;Soft-Proofing simuliert das Aussehen des Bildes:\n- für den Druck, wenn ein Druckerprofil unter Einstellungen > Farbmanagement eingestellt ist.\n- wenn es auf einem Bildschirm dargestellt wird, der das aktuelle Ausgabeprofil verwendet und kein Druckerprofil eingestellt ist. +SORT_ASCENDING;Aufsteigend +SORT_BY_DATE;Nach Datum +SORT_BY_EXIF;Nach EXIF +SORT_BY_LABEL;Nach Farbmarkierung +SORT_BY_NAME;Nach Name +SORT_BY_RANK;Nach Bewertung +SORT_DESCENDING;Absteigend TC_PRIM_BLUX;Bx TC_PRIM_BLUY;By TC_PRIM_GREX;Gx @@ -2157,7 +2223,7 @@ THRESHOLDSELECTOR_T;Oben THRESHOLDSELECTOR_TL;Oben-Links THRESHOLDSELECTOR_TR;Oben-Rechts TOOLBAR_TOOLTIP_COLORPICKER;Farbwähler\n\nWenn eingeschaltet:\n- Mit der linken Maustaste können Sie einen Farbwähler setzen.\n- Zum Verschieben, linke Maustaste festhalten.\n- Strg + Umschalttaste + Rechts-Klick entfernt alle Farbwähler.\n- Rechts-Klick auf den Farbwählerbutton blendet die Farbwähler ein/aus\n- Rechts-Klick in einen freien Bereich schaltet auf das Hand-Werkzeug zurück. -TOOLBAR_TOOLTIP_CROP;Ausschnitt wählen.\nTaste: c\n\nZum Verschieben des Ausschnitts,\nUmschalttaste festhalten. +TOOLBAR_TOOLTIP_CROP;Ausschnitt wählen.\nTaste: c\n\nZum Verschieben des Ausschnitts, Umschalttaste festhalten. TOOLBAR_TOOLTIP_HAND;Hand-Werkzeug\nTaste: h TOOLBAR_TOOLTIP_PERSPECTIVE;Perspektivkorrektur\n\nMit dem Editieren der Kontrolllinien können perspektivische Verzerrungen korrigiert werden. Ein erneuter Klick auf diesen Button wendet die Korrektur an. TOOLBAR_TOOLTIP_STRAIGHTEN;Ausrichten/Drehen\nTaste: s\n\nRichtet das Bild entlang einer Leitlinie aus. @@ -2168,12 +2234,12 @@ TP_BWMIX_ALGO_SP;Spezialeffekte TP_BWMIX_ALGO_TOOLTIP;Linear liefert ein lineares Ergebnis.\nSpezialeffekte liefert einen speziellen Effekt durch Mischen von Kanälen. TP_BWMIX_AUTOCH;Auto TP_BWMIX_CC_ENABLED;Komplementärfarbe anpassen. -TP_BWMIX_CC_TOOLTIP;Aktiviert die automatische Anpassung der\nKomplementärfarbe im ROYGCBPM-Modus. +TP_BWMIX_CC_TOOLTIP;Aktiviert die automatische Anpassung der Komplementärfarbe im ROYGCBPM-Modus. TP_BWMIX_CHANNEL;Luminanzequalizer TP_BWMIX_CURVEEDITOR1;'Bevor'-Kurve TP_BWMIX_CURVEEDITOR2;'Danach'-Kurve -TP_BWMIX_CURVEEDITOR_AFTER_TOOLTIP;Die Tonwertkurve wird NACH der Schwarz/Weiß-\nKonvertierung angewendet. -TP_BWMIX_CURVEEDITOR_BEFORE_TOOLTIP;Die Tonwertkurve wird VOR der Schwarz/Weiß-\nKonvertierung angewendet. +TP_BWMIX_CURVEEDITOR_AFTER_TOOLTIP;Die Tonwertkurve wird NACH der Schwarz/Weiß-Konvertierung angewendet. +TP_BWMIX_CURVEEDITOR_BEFORE_TOOLTIP;Die Tonwertkurve wird VOR der Schwarz/Weiß-Konvertierung angewendet. TP_BWMIX_CURVEEDITOR_LH_TOOLTIP;Luminanz als Funktion des Farbtons L=f(H).\nZu hohe Werte können zu Artefakten führen. TP_BWMIX_FILTER;Farbfilter TP_BWMIX_FILTER_BLUE;Blau @@ -2226,7 +2292,7 @@ TP_CACORRECTION_RED;Rot TP_CBDL_AFT;Nach Schwarz/Weiß TP_CBDL_BEF;Vor Schwarz/Weiß TP_CBDL_METHOD;Prozessreihenfolge -TP_CBDL_METHOD_TOOLTIP;Wählen Sie, ob der Detailebenenkontrast nach\ndem Schwarz/Weiß-Werkzeug abgearbeitet wird\n(ermöglicht das Arbeiten im L*a*b*-Farbraum)\noder vor ihm (ermöglicht das Arbeiten im RGB-\nFarbraum). +TP_CBDL_METHOD_TOOLTIP;Wählen Sie, ob der Detailebenenkontrast\nnach dem Schwarz/Weiß-Werkzeug abgearbeitet wird (ermöglicht das Arbeiten im L*a*b*-Farbraum)\noder vorher (ermöglicht das Arbeiten im RGB-Farbraum). TP_CHMIXER_BLUE;Blau-Kanal TP_CHMIXER_GREEN;Grün-Kanal TP_CHMIXER_LABEL;RGB-Kanalmixer @@ -2242,7 +2308,7 @@ TP_COLORAPP_ALGO_ALL;Alle TP_COLORAPP_ALGO_JC;Helligkeit + Buntheit (JC) TP_COLORAPP_ALGO_JS;Helligkeit + Sättigung (JS) TP_COLORAPP_ALGO_QM;Helligkeit + Farbigkeit (QM) -TP_COLORAPP_ALGO_TOOLTIP;Auswahl zwischen Parameter-Teilmengen\nund allen Parametern. +TP_COLORAPP_ALGO_TOOLTIP;Auswahl zwischen Parameter-Teilmengen und allen Parametern. TP_COLORAPP_BADPIXSL;Hot-/Bad-Pixelfilter TP_COLORAPP_BADPIXSL_TOOLTIP;Unterdrückt Hot-/Dead-Pixel (hell gefärbt).\n0 = Kein Effekt\n1 = Median\n2 = Gaussian\nAlternativ kann das Bild angepasst werden, um sehr dunkle Schatten zu vermeiden.\n\nDiese Artefakte sind auf Einschränkungen von CIECAM02 zurückzuführen. TP_COLORAPP_BRIGHT;Helligkeit (Q) @@ -2259,7 +2325,8 @@ TP_COLORAPP_CHROMA_M_TOOLTIP;Die Farbigkeit in CIECAM unterscheidet sich von L*a TP_COLORAPP_CHROMA_S;Sättigung (S) TP_COLORAPP_CHROMA_S_TOOLTIP;Die Sättigung in CIECAM unterscheidet sich von L*a*b* und RGB-Sättigung. TP_COLORAPP_CHROMA_TOOLTIP;Die Buntheit in CIECAM unterscheidet sich von L*a*b* und RGB-Buntheit. -TP_COLORAPP_CIECAT_DEGREE;Adaptation +TP_COLORAPP_CIECAT_DEGREE;Adaptation Szene +TP_COLORAPP_CIECAT_DEGREEOUT;Chromatische Adaptation Wahrnehmung TP_COLORAPP_CONTRAST;Kontrast (J) TP_COLORAPP_CONTRAST_Q;Kontrast (Q) TP_COLORAPP_CONTRAST_Q_TOOLTIP;Kontrast (Q) in CIECAM basiert auf Helligkeit. Er unterscheidet sich vom L*a*b*- und RGB-Kontrast. @@ -2314,8 +2381,8 @@ TP_COLORAPP_SURROUND_AVER;Durchschnitt TP_COLORAPP_SURROUND_DARK;Dunkel TP_COLORAPP_SURROUND_DIM;Gedimmt TP_COLORAPP_SURROUND_EXDARK;Extrem Dunkel (Cutsheet) -TP_COLORAPP_SURROUND_TOOLTIP;Ändert Töne und Farben, um die Betrachtungsbedingungen des Ausgabegeräts zu berücksichtigen. Je dunkler die Betrachtungsbedingungen sind, desto dunkler wird das Bild. Die Bildhelligkeit wird nicht geändert, wenn die Betrachtungsbedingungen auf durchschnittlich eingestellt sind. -TP_COLORAPP_SURSOURCE_TOOLTIP;Ändert Töne und Farben, um die Umgebungsbedingungen der Szenenbeleuchtung zu berücksichtigen. Je dunkler die Umgebungsbedingungen sind, desto heller wird das Bild. Die Bildhelligkeit wird nicht geändert, wenn der Umgebungs-Wert auf Durchschnitt eingestellt ist. +TP_COLORAPP_SURROUND_TOOLTIP;Ändert Töne und Farben, um die Betrachtungsbedingungen des Ausgabegeräts zu berücksichtigen. Je dunkler die Betrachtungsbedingungen sind, desto dunkler wird das Bild. Die Bildhelligkeit wird nicht geändert, wenn die Betrachtungsbedingungen auf 'Durchschnitt' eingestellt sind. +TP_COLORAPP_SURSOURCE_TOOLTIP;Ändert Töne und Farben, um die Umgebungsbedingungen der Szenenbeleuchtung zu berücksichtigen. Je dunkler die Umgebungsbedingungen sind, desto heller wird das Bild. Die Bildhelligkeit wird nicht geändert, wenn der Umgebungs-Wert auf 'Durchschnitt' eingestellt ist. TP_COLORAPP_TCMODE_BRIGHTNESS;Helligkeit (Q) TP_COLORAPP_TCMODE_CHROMA;Buntheit (H) TP_COLORAPP_TCMODE_COLORF;Farbigkeit (M) @@ -2325,6 +2392,7 @@ TP_COLORAPP_TCMODE_LABEL3;Farbkurve Modus TP_COLORAPP_TCMODE_LIGHTNESS;Helligkeit (J) TP_COLORAPP_TCMODE_SATUR;Sättigung (S) TP_COLORAPP_TEMP2_TOOLTIP;Symmetrischer Modus Temp = Weißabgleich.\nBei Auswahl einer Beleuchtung setze Tönung=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;Temperatur und Tönung.\nIn Abhängigkeit von den zuvor gewählten Einstellungen, beträgt die gewählte Temperatur:\nWeißabgleich\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504\nFrei. TP_COLORAPP_TEMP_TOOLTIP;Um eine Beleuchtungsart auszuwählen, setzen Sie die Tönung immer auf '1'.\nA Temp=2856\nD50 Temp=5003\nD55 Temp=5503\nD65 Temp=6504\nD75 Temp=7504 TP_COLORAPP_TONECIE;verwende CIECAM für die Tonwertkorrektur TP_COLORAPP_TONECIE_TOOLTIP;Wenn diese Option ausgeschaltet ist, wird die Tonwertkorrektur im L*a*b*-Farbraum durchgeführt.\nWenn die Option eingeschaltet ist, wird CIECAM02 für die Tonwertkorrektur verwendet. Das Werkzeug Tonwertkorrektur muss aktiviert sein, damit diese Option berücksichtigt wird. @@ -2425,16 +2493,16 @@ TP_DIRPYRDENOISE_CHROMINANCE_AMZ;Auto-Multizonen TP_DIRPYRDENOISE_CHROMINANCE_AUTOGLOBAL;Automatisch Global TP_DIRPYRDENOISE_CHROMINANCE_BLUEYELLOW;Chrominanz Blau/Gelb TP_DIRPYRDENOISE_CHROMINANCE_CURVE;Chrominanzkurve -TP_DIRPYRDENOISE_CHROMINANCE_CURVE_TOOLTIP;Erhöht/Reduziert die Intensität der\nChrominanz-Rauschreduzierung in\nAbhängigkeit der Farbsättigung. +TP_DIRPYRDENOISE_CHROMINANCE_CURVE_TOOLTIP;Erhöht/Reduziert die Intensität der Chrominanz-Rauschreduzierung in Abhängigkeit der Farbsättigung. TP_DIRPYRDENOISE_CHROMINANCE_FRAME;Chrominanz TP_DIRPYRDENOISE_CHROMINANCE_MANUAL;Benutzerdefiniert TP_DIRPYRDENOISE_CHROMINANCE_MASTER;Chrominanz (Master) TP_DIRPYRDENOISE_CHROMINANCE_METHOD;Methode -TP_DIRPYRDENOISE_CHROMINANCE_METHODADVANCED_TOOLTIP;Benutzerdefiniert:\nManuelle Anpassung der Chrominanz-Rauschreduzierung.\n\nAutomatisch Global:\nEs werden 9 Zonen für die Berechnung der Chrominanz-\nRauschreduzierung verwendet.\n\nVorschau:\nNur der sichbare Teil des Bildes wird für die Berechnung\nder Chrominanz-Rauschreduzierung verwendet. +TP_DIRPYRDENOISE_CHROMINANCE_METHODADVANCED_TOOLTIP;Benutzerdefiniert:\nManuelle Anpassung der Chrominanz-Rauschreduzierung.\n\nAutomatisch Global:\nEs werden 9 Zonen für die Berechnung der Chrominanz-Rauschreduzierung verwendet.\n\nVorschau:\nNur der sichbare Teil des Bildes wird für die Berechnung der Chrominanz-Rauschreduzierung verwendet. TP_DIRPYRDENOISE_CHROMINANCE_METHOD_TOOLTIP;Benutzerdefiniert:\nManuelle Anpassung der Chrominanz-Rauschreduzierung.\n\nAutomatisch Global:\nEs werden 9 Zonen für die Berechnung der Chrominanz-Rauschreduzierung verwendet.\n\nAuto-Multizonen:\nKeine Voransicht - wird erst beim Speichern angewendet.\nIn Abhängigkeit von der Bildgröße, wird das Bild in ca. 10 bis 70 Kacheln aufgeteilt. Für jede Kachel wird die Chrominanz-Rauschreduzierung individuell berechnet.\n\nVorschau:\nNur der sichtbare Teil des Bildes wird für die Berechnung der Chrominanz-Rauschreduzierung verwendet. TP_DIRPYRDENOISE_CHROMINANCE_PMZ;Vorschau TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW;Vorschau -TP_DIRPYRDENOISE_CHROMINANCE_PREVIEWRESIDUAL_INFO_TOOLTIP;Zeigt das Restrauschen des sichtbaren Bildbereichs\nin der 100%-Ansicht an.\n\n<50: Sehr wenig Rauschen\n50 - 100: Wenig Rauschen\n100 - 300: Durchschnittliches Rauschen\n>300: Hohes Rauschen\n\nDie Werte unterscheiden sich im L*a*b*- und RGB-Modus.\nDie RGB-Werte sind ungenauer, da der RGB-Modus\nLuminanz und Chrominanz nicht komplett trennt. +TP_DIRPYRDENOISE_CHROMINANCE_PREVIEWRESIDUAL_INFO_TOOLTIP;Zeigt das Restrauschen des sichtbaren Bildbereichs in der 100%-Ansicht an.\n\n<50: Sehr wenig Rauschen\n50 - 100: Wenig Rauschen\n100 - 300: Durchschnittliches Rauschen\n>300: Hohes Rauschen\n\nDie Werte unterscheiden sich im L*a*b*- und RGB-Modus.\nDie RGB-Werte sind ungenauer, da der RGB-Modus Luminanz und Chrominanz nicht komplett trennt. TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_INFO;Vorschaugröße = %1, Zentrum: Px = %2 Py = %2 TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO;Rauschen: Mittelwert = %1 Hoch = %2 TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO_EMPTY;Rauschen: Mittelwert = --- Hoch = --- @@ -2446,26 +2514,28 @@ TP_DIRPYRDENOISE_LUMINANCE_CURVE;Luminanzkurve TP_DIRPYRDENOISE_LUMINANCE_DETAIL;Luminanzdetails TP_DIRPYRDENOISE_LUMINANCE_FRAME;Luminanz TP_DIRPYRDENOISE_LUMINANCE_SMOOTHING;Luminanz +TP_DIRPYRDENOISE_MAIN_AUTO_GAIN;Helligkeitskompensation +TP_DIRPYRDENOISE_MAIN_AUTO_GAIN_TOOLTIP;Stärke der Rauschreduzierung basierend auf der Bildhelligkeit. Bei dunklen Bildern wird die Stärke verringert und bei hellen Bildern erhöht. TP_DIRPYRDENOISE_MAIN_COLORSPACE;Farbraum TP_DIRPYRDENOISE_MAIN_COLORSPACE_LAB;L*a*b* TP_DIRPYRDENOISE_MAIN_COLORSPACE_RGB;RGB -TP_DIRPYRDENOISE_MAIN_COLORSPACE_TOOLTIP;Für RAW-Bilder kann entweder die RGB-\noder L*a*b*-Methode verwendet werden.\n\nFür andere Bilder wird unabhängig von der\nAuswahl immer die L*a*b*-Methode verwendet. +TP_DIRPYRDENOISE_MAIN_COLORSPACE_TOOLTIP;Für RAW-Bilder kann entweder die RGB- oder L*a*b*-Methode verwendet werden.\n\nFür andere Bilder wird unabhängig von der Auswahl immer die L*a*b*-Methode verwendet. TP_DIRPYRDENOISE_MAIN_GAMMA;Gamma -TP_DIRPYRDENOISE_MAIN_GAMMA_TOOLTIP;Mit Gamma kann die Intensität der\nRauschreduzierung über den Farbbereich\nvariiert werden. Bei kleinen Werten sind\nnur dunkle Farbtöne betroffen, bei\ngrößeren Werten wird der Effekt auf\nhellere Töne ausgeweitet. +TP_DIRPYRDENOISE_MAIN_GAMMA_TOOLTIP;Mit Gamma kann die Intensität der Rauschreduzierung über den Farbbereich variiert werden. Bei kleinen Werten sind nur dunkle Farbtöne betroffen, bei größeren Werten wird der Effekt auf hellere Töne ausgeweitet. TP_DIRPYRDENOISE_MAIN_MODE;Modus TP_DIRPYRDENOISE_MAIN_MODE_AGGRESSIVE;Aggressiv TP_DIRPYRDENOISE_MAIN_MODE_CONSERVATIVE;Konservativ -TP_DIRPYRDENOISE_MAIN_MODE_TOOLTIP;'Konservativ' bewahrt Tieffrequenz-Chroma-Muster,\nwährend 'Aggressiv' sie entfernt. +TP_DIRPYRDENOISE_MAIN_MODE_TOOLTIP;'Konservativ' bewahrt Tieffrequenz-Chroma-Muster, während 'Aggressiv' sie entfernt. TP_DIRPYRDENOISE_MEDIAN_METHOD;Methode TP_DIRPYRDENOISE_MEDIAN_METHOD_CHROMINANCE;Nur Farbe TP_DIRPYRDENOISE_MEDIAN_METHOD_LAB;L*a*b* TP_DIRPYRDENOISE_MEDIAN_METHOD_LABEL;Medianfilter TP_DIRPYRDENOISE_MEDIAN_METHOD_LUMINANCE;Nur Luminanz TP_DIRPYRDENOISE_MEDIAN_METHOD_RGB;RGB -TP_DIRPYRDENOISE_MEDIAN_METHOD_TOOLTIP;Bei der Methode 'Nur Luminanz' und 'L*a*b*',\nwird der Medianfilter nach den Wavelet-Schritten verarbeitet.\nBei RGB wird der Medianfilter am Ende der Rauschreduzierung verarbeitet. +TP_DIRPYRDENOISE_MEDIAN_METHOD_TOOLTIP;Bei der Methode 'Nur Luminanz' und 'L*a*b*', wird der Medianfilter nach den Wavelet-Schritten verarbeitet.\nBei RGB wird der Medianfilter am Ende der Rauschreduzierung verarbeitet. TP_DIRPYRDENOISE_MEDIAN_METHOD_WEIGHTED;Gewichtet L* (wenig) + a*b* (normal) TP_DIRPYRDENOISE_MEDIAN_PASSES;Iterationen -TP_DIRPYRDENOISE_MEDIAN_PASSES_TOOLTIP;Manchmal führt ein kleines 3×3-Fenster mit\nmehreren Iterationen zu besseren Ergebnissen\nals ein 7×7-Fenster mit nur einer Iteration. +TP_DIRPYRDENOISE_MEDIAN_PASSES_TOOLTIP;Manchmal führt ein kleines 3×3-Fenster mit mehreren Iterationen zu besseren Ergebnissen als ein 7×7-Fenster mit nur einer Iteration. TP_DIRPYRDENOISE_MEDIAN_TYPE;Mediantyp TP_DIRPYRDENOISE_MEDIAN_TYPE_TOOLTIP;Einen Medianfilter mit der gewünschten Fenstergröße auswählen.\nJe größer das Fenster, desto länger dauert die Verarbeitungszeit.\n\n3×3 weich: Nutzt 5 Pixel in einem 3×3-Pixelfenster.\n3×3: Nutzt 9 Pixel in einem 3×3-Pixelfenster.\n5×5 weich: Nutzt 13 Pixel in einem 5×5-Pixelfenster.\n5×5: Nutzt 25 Pixel in einem 5×5-Pixelfenster.\n7×7: Nutzt 49 Pixel in einem 7×7-Pixelfenster.\n9×9: Nutzt 81 Pixel in einem 9×9-Pixelfenster.\n\nManchmal ist das Ergebnis mit einem kleineren Fenster und mehreren Iterationen besser, als mit einem größeren und nur einer Iteration. TP_DIRPYRDENOISE_TYPE_3X3;3×3 @@ -2478,7 +2548,7 @@ TP_DIRPYREQUALIZER_ALGO;Hautfarbtonbereich TP_DIRPYREQUALIZER_ALGO_TOOLTIP;Fein: Ist näher an den Hautfarbtönen und minimiert den Einfluss auf andere Farben.\n\nGrob: Minimiert Artefakte. TP_DIRPYREQUALIZER_ARTIF;Artefakte reduzieren TP_DIRPYREQUALIZER_HUESKIN;Hautfarbton -TP_DIRPYREQUALIZER_HUESKIN_TOOLTIP;Wenn Sie den Bereich signifikant nach Links\noder Rechts verschieben müssen, ist der\nWeißabgleich nicht richtig gewählt.\nWählen Sie den eingeschlossenen Bereich so\neng wie möglich, um den Einfluss auf benachbarte\nFarben zu verhindern. +TP_DIRPYREQUALIZER_HUESKIN_TOOLTIP;Wenn Sie den Bereich signifikant nach Links oder Rechts verschieben müssen, ist der Weißabgleich nicht richtig gewählt.\nWählen Sie den eingeschlossenen Bereich so eng wie möglich, um den Einfluss auf benachbarte Farben zu verhindern. TP_DIRPYREQUALIZER_LABEL;Detailebenenkontrast TP_DIRPYREQUALIZER_LUMACOARSEST;Grob TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Kontrast - @@ -2488,7 +2558,7 @@ TP_DIRPYREQUALIZER_LUMANEUTRAL;Neutral TP_DIRPYREQUALIZER_SKIN;Hautfarbtöne schützen TP_DIRPYREQUALIZER_SKIN_TOOLTIP;-100: Nur Farben innerhalb des Bereichs werden verändert.\n0: Alle Farben werden gleich behandelt.\n+100: Nur Farben außerhalb des Bereichs werden verändert. TP_DIRPYREQUALIZER_THRESHOLD;Schwelle -TP_DIRPYREQUALIZER_TOOLTIP;Verringert Artefakte an den Übergängen\nzwischen Hautfarbtönen und dem Rest des Bildes. +TP_DIRPYREQUALIZER_TOOLTIP;Verringert Artefakte an den Übergängen zwischen Hautfarbtönen und dem Rest des Bildes. TP_DISTORTION_AMOUNT;Intensität TP_DISTORTION_AUTO_TOOLTIP;Korrigiert die Verzeichnung in RAW-Bildern durch Vergleich mit dem eingebetteten JPEG, falls dieses existiert und die Verzeichnung durch die Kamera korrigiert wurde. TP_DISTORTION_LABEL;Verzeichnungskorrektur @@ -2499,12 +2569,12 @@ TP_EPD_REWEIGHTINGITERATES;Iterationen TP_EPD_SCALE;Faktor TP_EPD_STRENGTH;Intensität TP_EXPOSURE_AUTOLEVELS;Auto -TP_EXPOSURE_AUTOLEVELS_TOOLTIP;Automatische Belichtungseinstellung\nBasierend auf Bildanalyse. +TP_EXPOSURE_AUTOLEVELS_TOOLTIP;Automatische Belichtungseinstellung, basierend auf einer Bildanalyse.\nAktiviert 'Lichter rekonstruieren' wenn erforderlich. TP_EXPOSURE_BLACKLEVEL;Schwarzwert TP_EXPOSURE_BRIGHTNESS;Helligkeit TP_EXPOSURE_CLAMPOOG;Farben auf Farbraum beschränken TP_EXPOSURE_CLIP;Clip %: -TP_EXPOSURE_CLIP_TOOLTIP;Anteil der Pixel, die sich bei automatischer\nBelichtungseinstellung im Bereich der\nSpitzlichter und Schatten befinden sollen. +TP_EXPOSURE_CLIP_TOOLTIP;Anteil der Pixel, die sich bei automatischer Belichtungseinstellung im Bereich der Spitzlichter und Schatten befinden sollen. TP_EXPOSURE_COMPRHIGHLIGHTS;Lichterkompression TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Lichterkompression Schwelle TP_EXPOSURE_COMPRSHADOWS;Schattenkompression @@ -2514,7 +2584,7 @@ TP_EXPOSURE_CURVEEDITOR2;Tonwertkurve 2 TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Um mit den doppelten Tonwert-Kurven die besten Ergenisse zu erzielen, lesen Sie bitte den Abschnitt im Handbuch unter:\nDer Werkzeugkasten > Reiter Belichtung > Tonwertkurven. TP_EXPOSURE_EXPCOMP;Belichtungskorrektur TP_EXPOSURE_HISTMATCHING;Auto-Tonwertkurve -TP_EXPOSURE_HISTMATCHING_TOOLTIP;Passt Regler und Kurven (mit Ausnahme der Belichtungskorrektur)\nautomatisch an, um das eingebettete JPEG-Bild zu simulieren. +TP_EXPOSURE_HISTMATCHING_TOOLTIP;Passt Regler und Kurven (mit Ausnahme der Belichtungskorrektur) automatisch an, um das eingebettete JPEG-Bild zu simulieren. TP_EXPOSURE_LABEL;Belichtung TP_EXPOSURE_SATURATION;Sättigung TP_EXPOSURE_TCMODE_FILMLIKE;Filmähnlich @@ -2539,9 +2609,11 @@ TP_FILMNEGATIVE_GUESS_TOOLTIP;Setzt automatisch die Rot- und Blau-Werte, indem m TP_FILMNEGATIVE_LABEL;Negativfilm TP_FILMNEGATIVE_OUT_LEVEL;Ausgabestärke TP_FILMNEGATIVE_PICK;Neutrale Punkte anwählen +TP_FILMNEGATIVE_PICK_SIZE;Größe: TP_FILMNEGATIVE_RED;Rotverhältnis TP_FILMNEGATIVE_REF_LABEL;Eingang RGB: %1 TP_FILMNEGATIVE_REF_PICK;Farbwähler +TP_FILMNEGATIVE_REF_SIZE;Größe: TP_FILMNEGATIVE_REF_TOOLTIP;Auswahl eines Graupunktes, um den Weißabgleich für das Positivbild zu setzen. TP_FILMSIMULATION_LABEL;Filmsimulation TP_FILMSIMULATION_SLOWPARSEDIR;RawTherapee sucht nach Hald-CLUT-Bildern, die für die Filmsimulation benötigt werden, in einem Ordner, der zu viel Zeit zum Laden benötigt.\nGehen Sie zu\n< Einstellungen > Bildbearbeitung > Filmsimulation >\nund prüfen Sie, welcher Order benutzt wird. Wählen Sie den Ordner aus, der nur die Hald-CLUT-Bilder beinhaltet oder einen leeren Ordner, wenn Sie die Filmsimulation nicht verwenden möchten.\n\nWeitere Informationen über die Filmsimulation finden Sie auf RawPedia.\n\nMöchten Sie die Suche beenden? @@ -2555,7 +2627,8 @@ TP_FLATFIELD_BT_HORIZONTAL;Horizontal TP_FLATFIELD_BT_VERTHORIZ;Vertikal + Horizontal TP_FLATFIELD_BT_VERTICAL;Vertikal TP_FLATFIELD_CLIPCONTROL;Kontrolle zu heller Bereiche -TP_FLATFIELD_CLIPCONTROL_TOOLTIP;Verhindert das Abschneiden der Lichter. Wenn\nvor dem Anwenden des Weißbildes schon\nabgeschnittene Lichter vorhanden sind, kann\nes zu einem Farbstich kommen. +TP_FLATFIELD_CLIPCONTROL_TOOLTIP;Verhindert das Abschneiden der Lichter. Wenn vor dem Anwenden des Weißbildes schon abgeschnittene Lichter vorhanden sind, kann es zu einem Farbstich kommen. +TP_FLATFIELD_FROMMETADATA;Aus den Meta-Daten TP_FLATFIELD_LABEL;Weißbild TP_GENERAL_11SCALE_TOOLTIP;Der Effekt dieses Werkzeugs ist nur in der 100%-Ansicht akkurat oder sichtbar. TP_GRADIENT_CENTER;Rotationsachse @@ -2573,8 +2646,10 @@ TP_GRADIENT_STRENGTH_TOOLTIP;Filterstärke in Blendenstufen. TP_HLREC_BLEND;Überlagerung TP_HLREC_CIELAB;CIELab-Überlagerung TP_HLREC_COLOR;Farbübertragung -TP_HLREC_ENA_TOOLTIP;Wird bei Verwendung der automatischen\nBelichtungskorrektur möglicherweise\naktiviert. +TP_HLREC_COLOROPP;Interpolieren +TP_HLREC_ENA_TOOLTIP;Wird bei Verwendung der automatischen Belichtungskorrektur möglicherweise aktiviert. TP_HLREC_HLBLUR;Unschärfe +TP_HLREC_HLTH;Schwellenwert TP_HLREC_LABEL;Lichter rekonstruieren TP_HLREC_LUMINANCE;Luminanz wiederherstellen TP_HLREC_METHOD;Methode: @@ -2584,26 +2659,27 @@ TP_HSVEQUALIZER_LABEL;Farbton (H)/Sättigung (S)/Dynamik (V) TP_HSVEQUALIZER_SAT;S TP_HSVEQUALIZER_VAL;V TP_ICM_APPLYBASELINEEXPOSUREOFFSET;Basisbelichtung -TP_ICM_APPLYBASELINEEXPOSUREOFFSET_TOOLTIP;Die eingebettete DCP-Basisbelichtung verwenden.\nDie Einstellung ist nur verfügbar wenn sie vom\nEingangsfarbprofil unterstützt wird. +TP_ICM_APPLYBASELINEEXPOSUREOFFSET_TOOLTIP;Die eingebettete DCP-Basisbelichtung verwenden.\nDie Einstellung ist nur verfügbar wenn sie vom Eingangsfarbprofil unterstützt wird. TP_ICM_APPLYHUESATMAP;Basistabelle -TP_ICM_APPLYHUESATMAP_TOOLTIP;Die eingebettete DCP-Basistabelle verwenden.\nDie Einstellung ist nur verfügbar wenn sie vom\nEingangsfarbprofil unterstützt wird. +TP_ICM_APPLYHUESATMAP_TOOLTIP;Die eingebettete DCP-Basistabelle verwenden.\nDie Einstellung ist nur verfügbar wenn sie vom Eingangsfarbprofil unterstützt wird. TP_ICM_APPLYLOOKTABLE;'Look'-Tabelle -TP_ICM_APPLYLOOKTABLE_TOOLTIP;Die eingebettete DCP-'Look'-Tabelle verwenden.\nDie Einstellung ist nur verfügbar wenn sie vom\nEingangsfarbprofil unterstützt wird. +TP_ICM_APPLYLOOKTABLE_TOOLTIP;Die eingebettete DCP-'Look'-Tabelle verwenden.\nDie Einstellung ist nur verfügbar wenn sie vom Eingangsfarbprofil unterstützt wird. TP_ICM_BPC;Schwarzpunkt-Kompensation TP_ICM_DCPILLUMINANT;Illumination TP_ICM_DCPILLUMINANT_INTERPOLATED;Interpoliert -TP_ICM_DCPILLUMINANT_TOOLTIP;DCP-Illumination auswählen. Vorgabe ist 'Interpoliert'. Die Einstellung ist nur verfügbar, wenn sie vom Eingangsfarbprofil unterstützt wird. +TP_ICM_DCPILLUMINANT_TOOLTIP;DCP-Illumination auswählen. Vorgabe ist 'Interpoliert'.\nDie Einstellung ist nur verfügbar, wenn sie vom Eingangsfarbprofil unterstützt wird. TP_ICM_FBW;Schwarz-Weiß +TP_ICM_GAMUT;Gamut-Kontrolle TP_ICM_ILLUMPRIM_TOOLTIP;Wählen Sie die Lichtart, die den Aufnahmebedingungen am nächsten kommt.\nÄnderungen können nur vorgenommen werden, wenn die Auswahl 'Ziel-Primärfarben' auf 'Benutzerdefiniert (Schieberegler)' eingestellt ist. TP_ICM_INPUTCAMERA;Kamera-Standard TP_ICM_INPUTCAMERAICC;Kameraspezifisches Profil -TP_ICM_INPUTCAMERAICC_TOOLTIP;Verwendet RawTherapees kameraspezifisches\nDCP/ICC-Eingangsfarbprofil, welches präziser als\neine einfache Matrix ist. -TP_ICM_INPUTCAMERA_TOOLTIP;Benutzt eine einfache Farbmatrix von DCRAW,\neine erweiterte RawTherapee-Version oder eine\naus einem DNG. +TP_ICM_INPUTCAMERAICC_TOOLTIP;Verwendet RawTherapees kameraspezifisches DCP/ICC-Eingangsfarbprofil, welches präziser als eine einfache Matrix ist. +TP_ICM_INPUTCAMERA_TOOLTIP;Benutzt eine einfache Farbmatrix von DCRAW, eine erweiterte RawTherapee-Version oder eine aus einem DNG. TP_ICM_INPUTCUSTOM;DCP/ICC-Profil TP_ICM_INPUTCUSTOM_TOOLTIP;Eigenes DCP/ICC-Farbprofil verwenden. TP_ICM_INPUTDLGLABEL;DCP/ICC-Profil wählen... TP_ICM_INPUTEMBEDDED;Eingebettetes Profil verwenden -TP_ICM_INPUTEMBEDDED_TOOLTIP;Farbprofil verwenden, das in Nicht-RAW-Bildern\neingebettet ist. +TP_ICM_INPUTEMBEDDED_TOOLTIP;Farbprofil verwenden, das in Nicht-RAW-Bildern eingebettet ist. TP_ICM_INPUTNONE;Kein Profil TP_ICM_INPUTNONE_TOOLTIP;Kein Eingangsfarbprofil verwenden. TP_ICM_INPUTPROFILE;Eingangsfarbprofil @@ -2653,6 +2729,7 @@ TP_ICM_WORKING_PRIM_BRU;BruceRGB TP_ICM_WORKING_PRIM_BST;BestRGB TP_ICM_WORKING_PRIM_CUS;Benutzerdefiniert (Regler) TP_ICM_WORKING_PRIM_CUSGR;Benutzerdefiniert (CIE xy-Diagramm) +TP_ICM_WORKING_PRIM_JDCMAX;JDC Max TP_ICM_WORKING_PRIM_NONE;Standard TP_ICM_WORKING_PRIM_PROP;ProPhoto TP_ICM_WORKING_PRIM_REC;Rec2020 @@ -2671,8 +2748,6 @@ TP_ICM_WORKING_TRC_SRGB;sRGB g=2.4 s=12.92 TP_ICM_WORKING_TRC_TOOLTIP;Auswahl der mitgelieferten Profile. TP_IMPULSEDENOISE_LABEL;Impulsrauschreduzierung TP_IMPULSEDENOISE_THRESH;Schwelle -TP_LABCURVE_AVOIDCOLORSHIFT;Farbverschiebungen vermeiden -TP_LABCURVE_AVOIDCOLORSHIFT_TOOLTIP;Anpassung der Farben an den Arbeitsfarbraum\nund Anwendung der Munsell-Korrektur. TP_LABCURVE_BRIGHTNESS;Helligkeit TP_LABCURVE_CHROMATICITY;Chromatizität TP_LABCURVE_CHROMA_TOOLTIP;Für Schwarz/Weiß setzen Sie die Chromatizität auf -100. @@ -2705,9 +2780,9 @@ TP_LABCURVE_CURVEEDITOR_LH_TOOLTIP;Luminanz als Funktion des Farbtons L=f(H). TP_LABCURVE_CURVEEDITOR_LL_TOOLTIP;Luminanz als Funktion der Luminanz L=f(L). TP_LABCURVE_LABEL;L*a*b* - Anpassungen TP_LABCURVE_LCREDSK;LC-Kurve auf Hautfarbtöne beschränken -TP_LABCURVE_LCREDSK_TOOLTIP;Wenn aktiviert, wird die LC-Kurve auf\nHautfarbtöne beschränkt.\nWenn deaktiviert, wird die LC-Kurve auf\nalle Farbtöne angewendet. +TP_LABCURVE_LCREDSK_TOOLTIP;Wenn aktiviert, wird die LC-Kurve auf Hautfarbtöne beschränkt.\nWenn deaktiviert, wird die LC-Kurve auf alle Farbtöne angewendet. TP_LABCURVE_RSTPROTECTION;Hautfarbtöne schützen -TP_LABCURVE_RSTPRO_TOOLTIP;Kann mit dem Chromatizitätsregler und\nder CC-Kurve verwendet werden. +TP_LABCURVE_RSTPRO_TOOLTIP;Kann mit dem Chromatizitätsregler und der CC-Kurve verwendet werden. TP_LENSGEOM_AUTOCROP;Auto-Schneiden TP_LENSGEOM_FILL;Auto-Füllen TP_LENSGEOM_LABEL;Objektivkorrekturen @@ -2717,7 +2792,7 @@ TP_LENSPROFILE_CORRECTION_AUTOMATCH;Automatisch (Lensfun) TP_LENSPROFILE_CORRECTION_LCPFILE;LCP-Datei TP_LENSPROFILE_CORRECTION_MANUAL;Benutzerdefiniert (Lensfun) TP_LENSPROFILE_LABEL;Objektivkorrekturprofil -TP_LENSPROFILE_LENS_WARNING;Achtung: Der Crop-Faktor des Profils entspricht\nnicht dem der Kamera.\nDie Ergebnisse sind möglicherweise falsch. +TP_LENSPROFILE_LENS_WARNING;Achtung: Der Crop-Faktor des Profils entspricht nicht dem der Kamera.\nDie Ergebnisse sind möglicherweise falsch. TP_LENSPROFILE_MODE_HEADER;Profilauswahl TP_LENSPROFILE_USE_CA;CA TP_LENSPROFILE_USE_GEOMETRIC;Verzeichnung @@ -2737,7 +2812,7 @@ TP_LOCALLAB_ARTIF_TOOLTIP;Schwellenwert Bereich ΔE erhöht den Anwendungsbereic TP_LOCALLAB_AUTOGRAY;Automatisch mittlere Luminanz (Yb%) TP_LOCALLAB_AUTOGRAYCIE;Automatisch TP_LOCALLAB_AVOID;vermeide Farbverschiebungen -TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Passt Farben an den Arbeitsfarbraum an und wendet die Munsell-Korrektur an (Uniform Perceptual Lab).\nMunsell-Korrektur ist deaktiviert wenn Jz oder CAM16 angewendet wird. +TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Passt Farben an den Arbeitsfarbraum an und wendet die Munsell-Korrektur an (Uniform Perceptual Lab).\nMunsell-Korrektur ist deaktiviert wenn Jz oder CAM16 oder 'Farberscheinung und Beleuchtung' angewendet wird.\n\nDefault: Munsell.\nMunsell-Korrektur: behebt Farbabweichungen im Lab-Modus aufgrund von Nichtlinearität, wenn die Chromatizität geändert wird (Uniform Perceptual Lab).\nLab: Wendet eine Gamut-Steuerung an, bei relativer Farbmetrik wird dann Munsell angewendet.\nXYZ TP_LOCALLAB_AVOIDMUN;Nur Munsell-Korrektur TP_LOCALLAB_AVOIDMUN_TOOLTIP;Munsell-Korrektur ist deaktiviert, wenn Jz or CAM16 angewendet wird. TP_LOCALLAB_AVOIDRAD;Radius @@ -2763,7 +2838,7 @@ TP_LOCALLAB_BLMETHOD_TOOLTIP;Normal - direkte Unschärfe und Rauschen mit allen TP_LOCALLAB_BLNOI_EXP;Unschärfe und Rauschen TP_LOCALLAB_BLNORM;Normal TP_LOCALLAB_BLUFR;Unschärfe und Rauschreduzierung -TP_LOCALLAB_BLUMETHOD_TOOLTIP;So verwischen Sie den Hintergrund und isolieren Sie den Vordergrund:\n- Verwischen Sie den Hintergrund, indem Sie das Bild vollständig mit einem RT-Spot abdecken (hohe Werte für Umfang und Übergang und 'Normal' oder 'Invertieren' im Kontrollkästchen).\n- Isolieren Sie den Vordergrund durch Verwendung eines oder mehrerer 'Ausschließen'-RT-Spots und Vergrößerung des Bereichs.\n\nDieses Modul (einschließlich 'Median' und 'Anpassbarer Filter') kann zusätzlich zur Rauschreduzierung im Hauptmenü verwendet werden. +TP_LOCALLAB_BLUMETHOD_TOOLTIP;So verwischen Sie den Hintergrund und isolieren Sie den Vordergrund:\n- Verwischen Sie den Hintergrund, indem Sie das Bild vollständig mit einem Spot abdecken (hohe Werte für Umfang und Übergang und 'Normal' oder 'Invertieren' im Kontrollkästchen).\n- Isolieren Sie den Vordergrund durch Verwendung eines oder mehrerer 'Ausschließen'-Spots und Vergrößerung des Bereichs.\n\nDieses Modul (einschließlich 'Median' und 'Anpassbarer Filter') kann zusätzlich zur Rauschreduzierung im Hauptmenü verwendet werden. TP_LOCALLAB_BLUR;Gauß'sche Unschärfe - Rauschen - Körnung TP_LOCALLAB_BLURCOL;Radius TP_LOCALLAB_BLURCOLDE_TOOLTIP;Zur Berechnung von ΔE wird ein leicht unscharfes Bild verwendet, um isolierte Pixel zu vermeiden. @@ -2796,6 +2871,8 @@ TP_LOCALLAB_CBDL_TOOLNAME;Detailebenen-Kontrast TP_LOCALLAB_CENTER_X;Mitte X TP_LOCALLAB_CENTER_Y;Mitte Y TP_LOCALLAB_CH;Kurven CL - LC +TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mittel=%1 Hoch=%2 +TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mittel=%1 Hoch=%2 TP_LOCALLAB_CHROMA;Chrominanz TP_LOCALLAB_CHROMABLU;Chrominanz-Ebenen TP_LOCALLAB_CHROMABLU_TOOLTIP;Erhöht oder verringert den Effekt abhängig von den Luma-Einstellungen.\nWerte kleiner 1 verringern den Effekt. Werte größer 1 erhöhen den Effekt. @@ -2822,7 +2899,7 @@ TP_LOCALLAB_CIEMODE_WAV;Wavelet TP_LOCALLAB_CIETOOLEXP;Kurven TP_LOCALLAB_CIE_TOOLNAME;Farberscheinung (Cam16 & JzCzHz) TP_LOCALLAB_CIRCRADIUS;Spot-Größe -TP_LOCALLAB_CIRCRAD_TOOLTIP;Die Spot-Größe bestimmt die Referenzen des RT-Spots, die für die Formerkennung nützlich sind (Farbton, Luma, Chroma, Sobel).\nNiedrige Werte können für die Bearbeitung kleiner Flächen und Strukturen nützlich sein.\nHohe Werte können für die Behandlung von größeren Flächen oder auch Haut nützlich sein. +TP_LOCALLAB_CIRCRAD_TOOLTIP;Die Spot-Größe bestimmt die Referenzen des Spots, die für die Formerkennung nützlich sind (Farbton, Luma, Chroma, Sobel).\nNiedrige Werte können für die Bearbeitung kleiner Flächen und Strukturen nützlich sein.\nHohe Werte können für die Behandlung von größeren Flächen oder auch Haut nützlich sein. TP_LOCALLAB_CLARICRES;Chroma zusammenführen TP_LOCALLAB_CLARIFRA;Klarheit u. Schärfemaske - Überlagern u. Abschwächen TP_LOCALLAB_CLARIJZ_TOOLTIP;Levels 0 bis 4 (einschließlich): ‘Schärfemaske’ ist aktiviert\nLevel 5 und darüber: 'Klarheit' ist aktiviert. @@ -2885,8 +2962,10 @@ TP_LOCALLAB_DENOIMASK;Maske Farbrauschen reduzieren TP_LOCALLAB_DENOIMASK_TOOLTIP;Für alle Werkzeuge, ermöglicht die Kontrolle des chromatischen Rauschens der Maske.\nNützlich für eine bessere Kontrolle der Chrominanz und Vermeidung von Artefakten bei Verwendung der LC(h)-Kurve. TP_LOCALLAB_DENOIQUA_TOOLTIP;Im konservativen Modus werden Niedrigfrequenz-Details erhalten. Im aggressiven Modus werden diese entfernt.\nBeide Modi verwenden Wavelets und DCT und können in Verbindung mit 'Nicht-lokales Mittel - Luminanz' verwendet werden. TP_LOCALLAB_DENOITHR_TOOLTIP;Korrigiert die Kantenerkennung, um die Rauschreduktion in Bereichen mit geringen Kontrasten zu unterstützen. +TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominanz +TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminanz TP_LOCALLAB_DENOI_EXP;Rauschreduzierung -TP_LOCALLAB_DENOI_TOOLTIP;Dieses Modul kann zur Rauschreduktion entweder (am Ende der Prozess-Pipeline) selbständig verwendet werden oder in Verbindung mit der Rauschreduzierung im Menureiter 'Detail' (das am Anfang der Prozess-Pipeline arbeitet) .\nBereich ermöglicht eine differenzierte Einstellung basierend auf Farbe (ΔE).\nMinimale RT-Spotgröße: 128x128 +TP_LOCALLAB_DENOI_TOOLTIP;Dieses Modul kann zur Rauschreduktion entweder (am Ende der Prozess-Pipeline) selbständig verwendet werden oder in Verbindung mit der Rauschreduzierung im Menureiter 'Detail' (das am Anfang der Prozess-Pipeline arbeitet) .\nBereich ermöglicht eine differenzierte Einstellung basierend auf Farbe (ΔE).\nMinimale Spotgröße: 128x128 TP_LOCALLAB_DEPTH;Tiefe TP_LOCALLAB_DETAIL;Lokaler Kontrast TP_LOCALLAB_DETAILFRA;Kantenerkennung DCT @@ -2927,7 +3006,7 @@ TP_LOCALLAB_EXPCOMP;Belichtungsausgleich ƒ TP_LOCALLAB_EXPCOMPINV;Belichtungsausgleich TP_LOCALLAB_EXPCOMP_TOOLTIP;Für Porträts oder Bilder mit geringem Farbverlauf. Sie können 'Formerkennung' unter 'Einstellungen' ändern:\n\nErhöhen Sie den 'ΔE-Bereichsschwellenwert'\nReduzieren Sie 'ΔE-Zerfallrate'\nErhöhen Sie 'ab-L-Balance (ΔE)'. TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;Siehe Dokumentation für Wavelet Levels.\nEs gibt einige Unterschiede in der Version der lokalen Einstellungen: mehr Werkzeuge und mehr Möglichkeiten an individuellen Detailebenen zu arbeiten.\nz.B. Wavelet-Level-Tonwertkorrektur. -TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Vermeiden Sie zu kleine Spots (<32 x 32 Pixel).\nVerwenden Sie niedrige 'Übergangswerte' und hohe Werte für 'Übergangszerfallrate' und 'Bereich,' um kleine RT-Spots zu simulieren und Fehler zu beheben.\nVerwenden Sie 'Klarheit & Schärfemaske und Überlagern & Abschwächen' wenn nötig, indem Sie den 'Radius' anpassen, um Artefakte zu reduzieren. +TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Vermeiden Sie zu kleine Spots (<32 x 32 Pixel).\nVerwenden Sie niedrige 'Übergangswerte' und hohe Werte für 'Übergangszerfallrate' und 'Bereich,' um kleine Spots zu simulieren und Fehler zu beheben.\nVerwenden Sie 'Klarheit & Schärfemaske und Überlagern & Abschwächen' wenn nötig, indem Sie den 'Radius' anpassen, um Artefakte zu reduzieren. TP_LOCALLAB_EXPCURV;Kurven TP_LOCALLAB_EXPGRAD;Verlaufsfilter TP_LOCALLAB_EXPGRADCOL_TOOLTIP;Verlaufsfilter stehen in den folgenden Werkzeugen zur Verfügung: 'Farbe und Licht (Luminanz, Chrominanz, Farbtonverlauf, und Zusammenführen)', 'Belichtung (Luminanz grad.)', 'Belichtungsmaske (Luminanz grad.)', 'Schatten/Lichter (Luminanz grad.)', 'Dynamik (Luminanz, Chrominanz & Farbton)', 'Lokaler Kontrast & Wavelet Pyramide (lokaler Kontrast grad.)'.\nDer Zerfall wird in den Einstellungen definiert. @@ -2935,12 +3014,12 @@ TP_LOCALLAB_EXPLAPBAL_TOOLTIP;Ändert die Mischung von geändertem/ursprünglich TP_LOCALLAB_EXPLAPGAMM_TOOLTIP;Verändert das Verhalten des Bildes mit wenig oder zu wenig Kontrast, indem vorher eine Gammakurve und nachher eine Laplace-Transformation hinzugefügt werden. TP_LOCALLAB_EXPLAPLIN_TOOLTIP;Verändert das Verhalten unterbelichteter Bilder indem eine lineare Komponente vor Anwendung der Laplace-Transformation hinzugefügt wird. TP_LOCALLAB_EXPLAP_TOOLTIP;Regler nach rechts reduziert schrittweise den Kontrast. -TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Ermöglicht die Verwendung von GIMP oder Photoshop(c)-Ebenen-Mischmodi wie Differenz, Multiplikation, Weiches Licht, Überlagerung etc., mit Transparenzkontrolle.\nOriginalbild: Führe aktuellen RT-Spot mit Original zusammen.\nVorheriger Spot: Führe aktuellen RT-Spot mit vorherigem zusammen - bei nur einem vorherigen = Original.\nHintergrund: Führe aktuellen RT-Spot mit einem Farb- oder Luminanzhintergrund zusammen (weniger Möglichkeiten). +TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Ermöglicht die Verwendung von GIMP oder Photoshop-Ebenen-Mischmodi wie Differenz, Multiplikation, Weiches Licht, Überlagerung etc., mit Transparenzkontrolle.\nOriginalbild: Führe aktuellen RT-Spot mit Original zusammen.\nVorheriger Spot: Führe aktuellen RT-Spot mit vorherigem zusammen - bei nur einem vorherigen = Original.\nHintergrund: Führe aktuellen RT-Spot mit einem Farb- oder Luminanzhintergrund zusammen (weniger Möglichkeiten). TP_LOCALLAB_EXPNOISEMETHOD_TOOLTIP;Wendet einen Median-Filter vor der Laplace-Transformation an, um (Rausch-)Artefakte zu vermeiden.\nAlternativ kann das Werkzeug zur Rauschreduzierung angewendet werden. TP_LOCALLAB_EXPOSE;Dynamik und Belichtung TP_LOCALLAB_EXPOSURE_TOOLTIP;Anpassung der Belichtung im L*a*b-Raum mittels Laplace PDE-Algorithmus um ΔE zu berücksichtigen und Artefakte zu minimieren. TP_LOCALLAB_EXPRETITOOLS;Erweiterte Retinex Werkzeuge -TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot-Minimum 39 * 39.\nVerwenden Sie niedrige Übergangswerte und hohe Werte für 'Zerfallrate' und 'Bereich', um kleinere RT-Spots zu simulieren. +TP_LOCALLAB_EXPSHARP_TOOLTIP;Spot-Minimum 39 * 39.\nVerwenden Sie niedrige Übergangswerte und hohe Werte für 'Zerfallrate' und 'Bereich', um kleinere Spots zu simulieren. TP_LOCALLAB_EXPTOOL;Belichtungswerkzeuge TP_LOCALLAB_EXP_TOOLNAME;Dynamik und Belichtung TP_LOCALLAB_FATAMOUNT;Intensität @@ -2967,6 +3046,11 @@ TP_LOCALLAB_GAMM;Gamma TP_LOCALLAB_GAMMASKCOL;Gamma TP_LOCALLAB_GAMMASK_TOOLTIP;'Gamma' und 'Bereich' erlauben eine weiche und artefaktfreie Transformation der Maske, indem 'L' schrittweise geändert wird, um Diskontinuitäten zu vermeiden. TP_LOCALLAB_GAMSH;Gamma +TP_LOCALLAB_GAMUTLABRELA;Lab +TP_LOCALLAB_GAMUTMUNSELL;Nur Munsell +TP_LOCALLAB_GAMUTNON;Keine +TP_LOCALLAB_GAMUTXYZABSO;XYZ Absolut +TP_LOCALLAB_GAMUTXYZRELA;XYZ Relativ TP_LOCALLAB_GAMW;Gamma (Wavelet Pyramiden) TP_LOCALLAB_GRADANG;Rotationswinkel TP_LOCALLAB_GRADANG_TOOLTIP;Rotationswinkel in Grad: -180° 0° +180° @@ -3055,6 +3139,8 @@ TP_LOCALLAB_LAPRAD1_TOOLTIP;Erhöht den Kontrast der Maske, indem die Luminanzwe TP_LOCALLAB_LAPRAD2_TOOLTIP;'Radius' nutzt einen anpassbaren Filter, um Artefakte zu reduzieren und den Übergang zu glätten. TP_LOCALLAB_LAPRAD_TOOLTIP;'Radius' nutzt einen anpassbaren Filter, um Artefakte zu reduzieren und den Übergang zu glätten. TP_LOCALLAB_LAP_MASK_TOOLTIP;Löst die PDE für alle Laplace-Masken.\nWenn aktiviert, reduziert die Laplace-Schwellenwertmaske Artefakte und glättet das Ergebnis.\nLinear, wenn deaktiviert. +TP_LOCALLAB_LCLABELS;verbleibende Rauschebenen +TP_LOCALLAB_LCLABELS_TOOLTIP;Zeigt die mittleren und oberen Rauschwerte für den im Vorschaufenster angezeigten Bereich an (bei 100 % Zoom). Die Rauschwerte sind nach den Wavelet-Stufen 0,1,2,3 und 4,5,6 gruppiert.\nDie angezeigten Werte sind nur Richtwerte und sollen bei der Rauschunterdrückung helfen. Sie sollten nicht als absolute Geräuschpegel interpretiert werden.\n\n 300: Starkes Rauschen\n 100–300: Rauschen\n 50–100: mäßiges Rauschen\n < 50: Geringes Rauschen\n\nSie ermöglichen es, folgendes zu erkennen:\n*Den Einfluss der Rauschunterdrückung im Detail-Tab des Hauptmenüs.\n*Den Einfluss von nicht-lokalen Mitteln, Wavelets und DCT auf das Luminanzrauschen.\n*Den Einfluss von Wavelets und DCT auf das Chroma-Rauschen.\n*Den Einfluss von Eingangsschärfen und Farbinterpolation. TP_LOCALLAB_LC_FFTW_TOOLTIP;Die schnelle Fouriertransformation verbessert die Qualität und ermöglicht die Verwendung großer Radien, erhöht jedoch die Verarbeitungszeit (abhängig vom zu verarbeitenden Bereich). Vorzugsweise nur für große Radien verwenden. Die Größe des Bereichs kann um einige Pixel reduziert werden, um die schnelle Fouriertransformation zu optimieren. Dies kann die Verarbeitungszeit um den Faktor 1,5 bis 10 reduzieren. TP_LOCALLAB_LC_TOOLNAME;Lokaler Kontrast u. Wavelets TP_LOCALLAB_LEVELBLUR;Maximum @@ -3115,11 +3201,13 @@ TP_LOCALLAB_LOGSURSOUR_TOOLTIP;Ändert Töne und Farben, um die Szenenbedingunge TP_LOCALLAB_LOGVIEWING_TOOLTIP;Passend zum Medium, auf dem das fertige Bild betrachtet wird (Monitor, TV, Projektor, Drucker, etc.), wie auch die Umgebungsbedingungen. TP_LOCALLAB_LOG_TOOLNAME;LOG-Kodierung TP_LOCALLAB_LUM;Kurven LL - CC +TP_LOCALLAB_LUM46LABEL;Luminanz Ebenen 456: Mittel=%1 Hoch=%2 TP_LOCALLAB_LUMADARKEST;Dunkelste TP_LOCALLAB_LUMASK;Hintergrundfarbe für Luminanzmaske TP_LOCALLAB_LUMASK_TOOLTIP;Passt den Grauton oder die Farbe des Maskenhintergrundes an (Maske und Anpassungen - Maske anzeigen). TP_LOCALLAB_LUMAWHITESEST;Hellste TP_LOCALLAB_LUMFRA;L*a*b* Standard +TP_LOCALLAB_LUMLABEL;Luminanz Ebenen 0123: Mittel=%1 Hoch=%2 TP_LOCALLAB_MASFRAME;Maskieren und Zusammenführen TP_LOCALLAB_MASFRAME_TOOLTIP;Für alle Masken.\nBerücksichtigt das ΔE-Bild, um zu vermeiden, dass der Auswahlbereich geändert wird, wenn die folgenden Maskenwerkzeuge verwendet werden: 'Gamma', 'Steigung', 'Chroma', 'Kontrastkurve', 'Lokaler Kontrast' (nach Wavelet-Ebene), 'Unschärfemaske' und 'Strukturmaske' (falls aktiviert).\nDeaktiviert, wenn der Inverse-Modus verwendet wird. TP_LOCALLAB_MASK;Kontrast @@ -3151,7 +3239,7 @@ TP_LOCALLAB_MASKLCTHRLOW;Schwellenwert dunkle Bereiche TP_LOCALLAB_MASKLCTHRLOW2;Schwelle dunkle Bereiche TP_LOCALLAB_MASKLCTHRMID;Luminanz Graubereiche TP_LOCALLAB_MASKLCTHRMIDCH;Chrominanz Graubereiche -TP_LOCALLAB_MASKLC_TOOLTIP;Auf diese Weise können Sie die Rauschreduzierung anhand der in der L(L)- oder LC(H)-Maske (Maske und Anpassungen) enthaltenen Luminanz-Informationen ausrichten.\nDie L(L)-Maske oder die LC(H)-Maske muss aktiviert sein, um diese Funktion verwenden zu können.\n'Luminanzschwelle Dunkle Bereiche': Wenn 'Rauschreduzierung in dunklen und hellen Bereichen verstärken' > 1, wird die Rauschreduzierung schrittweise von 0% bei den Schwellenwerteinstellungen auf 100% beim maximalen Schwarzwert (bestimmt durch die Maske) erhöht.\n'Luminanzschwelle Helle Bereiche': Die Rauschreduzierung wird schrittweise von 100% bei der Schwellenwerteinstellung auf 0% beim maximalen Weißwert (bestimmt durch die Maske) verringert.\nIn dem Bereich zwischen den beiden Schwellenwerten werden die Einstellungen zur Rauschverminderung von der Maske nicht beeinflusst. +TP_LOCALLAB_MASKLC_TOOLTIP;Wird von der Wavelet-Luminanz verwendet.\nDamit können Sie die Rauschunterdrückung basierend auf den Bildluminanzinformationen festlegen, die in der L(L)- oder LC(H)-Maske (Maske und Modifikationen) enthalten sind.\nDie L(L)-Maske oder die LC(H)-Maske muss aktiviert sein, m diese Funktion nutzen zu können.\n„Schwellenwert für die Luminanz dunkler Bereiche“. Ist „Rauschunterdrückung in dunklen und hellen Bereichen verstärken“ > 1, wird die Rauschunterdrückung schrittweise von 0 % auf 100 % beim maximalen Schwarzwert (bestimmt durch die Maske) erhöht.\n„Schwellenwert für die Luminanz für helle Bereiche“. Die Rauschunterdrückung wird schrittweise von 100 % auf 0 % beim maximalen Weißwert (bestimmt durch die Maske) verringert.\n Im Bereich zwischen den beiden Schwellenwerten werden die Rauschunterdrückungseinstellungen von der Maske nicht beeinflusst. TP_LOCALLAB_MASKLNOISELOW;In dunklen und hellen Bereichen verstärken TP_LOCALLAB_MASKLOWTHRESCB_TOOLTIP;Dunklere Tonwertgrenze, unterhalb derer die Parameter der Detailebenenkontraste (nur Luminanz) nach und nach auf ihre ursprünglichen Werte zurückgesetzt werden, bevor sie durch die Einstellungen des Detailebenenkontrastes geändert werden.\nSie können bestimmte Werkzeuge in 'Maske und Anpassungen' verwenden, um die Graustufen zu ändern: 'Glättradius', 'Gamma', 'Steigung' und 'Kontrastkurve'.\nVerwenden Sie einen 'feststellbaren Farbwähler' auf der Maske, um zu sehen, welche Bereiche betroffen sind. Stellen Sie sicher, dass Sie in den Einstellungen 'Hintergrundfarbmaske' = 0 festlegen. TP_LOCALLAB_MASKLOWTHRESC_TOOLTIP;Dunklere Tonwertgrenze, unterhalb derer die Parameter nach und nach auf ihre ursprünglichen Werte zurückgesetzt werden, bevor sie durch 'Farbe- und Licht'-Einstellungen geändert werden.\nSie können bestimmte Werkzeuge in 'Maske und Anpassungen' verwenden, um die Graustufen zu ändern: 'Strukturmaske' , 'Unschärfemaske', 'Glättradius', 'Gamma', 'Steigung', 'Kontrastkurve', 'Lokaler Kontrast (Wavelets)'.\nVerwenden Sie einen 'feststellbaren Farbwähler' auf der Maske, um zu sehen, welche Bereiche betroffen sind. Stellen Sie sicher, dass Sie in den Einstellungen 'Hintergrundfarbmaske' = 0 festlegen. @@ -3176,7 +3264,7 @@ TP_LOCALLAB_MASKRESVIB_TOOLTIP;Wird verwendet, um den Effekt der Einstellungen f TP_LOCALLAB_MASKRESWAV_TOOLTIP;Wird verwendet, um den Effekt der Einstellungen für lokalen Kontrast und Wavelet basierend auf den in den L(L)- oder LC(H)-Masken (Maske und Anpassungen) enthaltenen Luminanz-Informationen zu modulieren.\nDie L(L)-Maske oder die LC(H)-Maske muss aktiviert sein, um diese Funktion verwenden zu können.\nDie Bereiche 'dunkel' und 'hell' unterhalb und oberhalb der entsprechenden Schwellenwerte werden schrittweise auf ihre ursprünglichen Werte zurückgesetzt, bevor sie durch die Einstellungen für lokalen Kontrast und Wavelet geändert werden. Zwischen diesen beiden Bereichen wird der volle Wert der Einstellungen für lokalen Kontrast und Wavelet angewendet. TP_LOCALLAB_MASKUNUSABLE;Maske deaktiviert (siehe Maske u. Anpassungen) TP_LOCALLAB_MASKUSABLE;Maske aktiviert (siehe Maske u. Anpassungen) -TP_LOCALLAB_MASK_TOOLTIP;Sie können mehrere Masken für ein Werkzeug aktivieren, indem Sie ein anderes Werkzeug aktivieren und nur die Maske verwenden (setzen Sie die Werkzeugregler auf 0).\n\nSie können den RT-Spot auch duplizieren und nahe am ersten Punkt platzieren. Die kleinen Abweichungen in den Punktreferenzen ermöglichen Feineinstellungen. +TP_LOCALLAB_MASK_TOOLTIP;Sie können mehrere Masken für ein Werkzeug aktivieren, indem Sie ein anderes Werkzeug aktivieren und nur die Maske verwenden (setzen Sie die Werkzeugregler auf 0).\n\nSie können den Spot auch duplizieren und nahe am ersten Punkt platzieren. Die kleinen Abweichungen in den Punktreferenzen ermöglichen Feineinstellungen. TP_LOCALLAB_MEDIAN;Median niedrig TP_LOCALLAB_MEDIANITER_TOOLTIP;Anzahl der aufeinanderfolgenden Iterationen, die vom Medianfilter ausgeführt werden. TP_LOCALLAB_MEDIAN_TOOLTIP;Sie können Medianwerte im Bereich von 3 x 3 bis 9 x 9 Pixel auswählen. Höhere Werte erhöhen die Rauschreduzierung und Unschärfe. @@ -3226,7 +3314,7 @@ TP_LOCALLAB_NLDENOISENLPAT_TOOLTIP;Passt die Intensität der Rauschreduzierung a TP_LOCALLAB_NLDENOISENLRAD_TOOLTIP;Höhere Werte erhöhen die Rauschreduzierung auf Kosten der Verarbeitungszeit. TP_LOCALLAB_NLDENOISE_TOOLTIP;'Detailwiederherstellung' basiert auf einer Laplace-Transformation, um einheitliche Bereiche und keine Bereiche mit Details zu erfassen. TP_LOCALLAB_NLDET;Detailwiederherstellung -TP_LOCALLAB_NLFRA;Nicht-lokales Mittel - Luminanz +TP_LOCALLAB_NLFRA;Nicht-lokales Mittel: Luminanz TP_LOCALLAB_NLFRAME_TOOLTIP;Nicht-lokales Mittel bedeutet, dass bei der Rauschreduzierung ein Mittelwert aller Pixel im Bild verwendet wird, gewichtet danach, wie ähnlich sie dem Zielpixel sind.\nReduziert den Detailverlust im Vergleich zu lokalen Mittelwertalgorithmen.\nBei dieser Methode wird nur das Luminanz-Rauschen berücksichtigt. Chrominanz-Rauschen wird am besten mit Wavelets und Fourier-Transformationen (DCT) verarbeitet.\nKann in Verbindung mit 'Luminanz-Rauschreduzierung nach Ebenen' oder alleine verwendet werden. TP_LOCALLAB_NLGAM;Gamma TP_LOCALLAB_NLLUM;Intensität @@ -3319,7 +3407,7 @@ TP_LOCALLAB_SCOPEMASK_TOOLTIP;Aktiviert, wenn die ΔE-Bildmaske aktiviert ist.\n TP_LOCALLAB_SENSI;Bereich TP_LOCALLAB_SENSIEXCLU;Intensität TP_LOCALLAB_SENSIEXCLU_TOOLTIP;Anpassung der auszuschließenden Farben. -TP_LOCALLAB_SENSIMASK_TOOLTIP;Bereichsanpassung speziell für das gängige Maskenwerkzeug.\nBezieht sich auf den Unterschied zwischen dem Originalbild und der Maske.\nVerwendet die Luma-, Chroma- und Farbtonreferenzen aus der Mitte des RT-Spots.\n\nAuch das ΔE der Maske selbst kann angepasst werden durch Verwendung von 'Scope (ΔE-Bildmaske)' unter 'Einstellungen' > 'Maskieren und Zusammenführen'. +TP_LOCALLAB_SENSIMASK_TOOLTIP;Bereichsanpassung speziell für das gängige Maskenwerkzeug.\nBezieht sich auf den Unterschied zwischen dem Originalbild und der Maske.\nVerwendet die Luma-, Chroma- und Farbtonreferenzen aus der Mitte des Spots.\n\nAuch das ΔE der Maske selbst kann angepasst werden durch Verwendung von 'Scope (ΔE-Bildmaske)' unter 'Einstellungen' > 'Maskieren und Zusammenführen'. TP_LOCALLAB_SENSI_TOOLTIP;Passt den Anwendungsbereich an:\nKleine Werte beschränken die Anwendung auf Farben ähnlich derer im Spot.\nHohe Werte erweitern den Bereich auf eine größere Bandbreite an Farben TP_LOCALLAB_SETTINGS;Einstellungen TP_LOCALLAB_SH1;Schatten/Lichter @@ -3331,7 +3419,7 @@ TP_LOCALLAB_SHADHMASK_TOOLTIP;Reduziert die Lichter der Maske genau so wie der S TP_LOCALLAB_SHADMASK_TOOLTIP;Hebt die Lichter der Maske genau so wie der Schatten/Lichter-Algorithmus. TP_LOCALLAB_SHADOWHIGHLIGHT_TOOLTIP;Schatten und Lichter können entweder mit den Reglern für Schatten und Lichter oder mit einem Equalizer angepasst werden.\nKann anstelle oder in Verbindung mit dem Belichtungsmodul und auch als Verlaufsfilter verwendet werden. TP_LOCALLAB_SHAMASKCOL;Schatten -TP_LOCALLAB_SHAPETYPE;RT-Spot Form +TP_LOCALLAB_SHAPETYPE;Spot Form TP_LOCALLAB_SHAPE_TOOLTIP;'Ellipse' ist der normale Modus.\n'Rechteck' kann in einigen Fällen hilfreich sein, z.B. um die Trennzeichen im Vollbild-Modus außerhalb des Voransichtsbereiches zu setzen. In diesem Falle ist Transition = 100 zu setzen.\n\nZukünftige Versionen werden auch Polygone und Bezierkurven unterstützen. TP_LOCALLAB_SHARAMOUNT;Intensität TP_LOCALLAB_SHARBLUR;Unschärferadius @@ -3413,13 +3501,14 @@ TP_LOCALLAB_STRUCCOL;Spot-Struktur TP_LOCALLAB_STRUCCOL1;Spot-Struktur TP_LOCALLAB_STRUCT_TOOLTIP;Verwendet den Sobel-Algorithmus, um die Struktur für die Formerkennung zu berücksichtigen.\nAktivieren Sie 'Maske und Anpassungen' > 'Spot-Struktur anzeigen' (erweiterter Modus), um eine Vorschau der Maske anzuzeigen (ohne Änderungen).\n\nKann in Verbindung verwendet werden mit der Strukturmaske, der Unschärfemaske und 'Lokaler Kontrast' (nach Wavelet-Ebene) zur Verbesserung der Kantenerkennung.\n\nEinflüsse von Anpassungen mit Helligkeit, Kontrast, Chrominanz, Belichtung oder anderen nicht maskenbezogenen Werkzeugen, entweder mit 'Modifiziert anzeigen' oder 'Geänderte Bereiche mit Maske anzeigen' überprüfen. TP_LOCALLAB_STRUMASKCOL;Intensität der Strukturmaske -TP_LOCALLAB_STRUMASK_TOOLTIP;Strukturmaske (Regler) mit deaktiviertem Kontrollkästchen 'Strukturmaske als Werkzeug':\nIn diesem Fall wird eine Maske mit der Struktur generiert, auch wenn keine der 3 Kurven aktiviert ist. Strukturmasken sind für Maske 1 (Unschärfe und Rauschreduzierung') und Maske 11 (Farbe & Licht) möglich. +TP_LOCALLAB_STRUMASK_TOOLTIP;Strukturmaske (Regler) mit deaktiviertem Kontrollkästchen 'Strukturmaske als Werkzeug':\nIn diesem Fall wird eine Maske mit der Struktur generiert, auch wenn keine der 3 Kurven aktiviert ist. Strukturmasken stehen für Maske 'Unschärfe und Rauschreduzierung' und Maske 'Farbe & Licht' zur Verfügung. TP_LOCALLAB_STRUSTRMASK_TOOLTIP;Ein moderater Gebrauch dieses Reglers wird wärmstens empfohlen! TP_LOCALLAB_STYPE;Form TP_LOCALLAB_STYPE_TOOLTIP;Sie können wählen zwischen:\nSymmetrisch - linkes Handle mit rechts verknüpft, oberes Handle mit unten verbunden.\nUnabhängig - alle Handles sind unabhängig. TP_LOCALLAB_SYM;Symmetrisch (Maus) TP_LOCALLAB_SYMSL;Symmetrisch (Maus + Regler) TP_LOCALLAB_TARGET_GRAY;Mittlere Luminanz (Yb%) +TP_LOCALLAB_TE_PIVOT;Wichtung (Ev) TP_LOCALLAB_THRES;Schwellenwert Struktur TP_LOCALLAB_THRESDELTAE;Schwellenwert ΔE-Bereich TP_LOCALLAB_THRESRETI;Schwellenwert @@ -3569,10 +3658,10 @@ TP_PREPROCWB_MODE;Modus TP_PREPROCWB_MODE_AUTO;Auto TP_PREPROCWB_MODE_CAMERA;Kamera TP_PRSHARPENING_LABEL;Nach Skalierung schärfen -TP_PRSHARPENING_TOOLTIP;Schärft das Bild nach der Größenänderung.\nFunktioniert nur mit der Methode 'Lanczos'.\nDas Ergebnis wird nicht in RawTherapee\nangezeigt.\n\nWeitere Informationen finden Sie auf 'RawPedia'. +TP_PRSHARPENING_TOOLTIP;Schärft das Bild nach der Größenänderung.\nFunktioniert nur mit der Methode 'Lanczos'.\nDas Ergebnis wird nicht in RawTherapee angezeigt.\n\nWeitere Informationen finden Sie auf 'RawPedia'. TP_RAWCACORR_AUTO;Autokorrektur TP_RAWCACORR_AUTOIT;Iterationen -TP_RAWCACORR_AUTOIT_TOOLTIP;Diese Einstellung ist verfügbar, wenn 'Autokorrektur' aktiviert ist.\nDie Autokorrektur ist konservativ, d.h. sie korrigiert häufig nicht alle\nchromatischen Aberrationen. Um die verbleibenden chromatischen\nAberrationen zu korrigieren, können Sie bis zu fünf Iterationen\nverwenden. Jede Iteration verringert die verbleibende chromatische\nAberration auf Kosten zusätzlicher Verarbeitungszeit. +TP_RAWCACORR_AUTOIT_TOOLTIP;Diese Einstellung ist verfügbar, wenn 'Autokorrektur' aktiviert ist.\nDie Autokorrektur ist konservativ, d.h. sie korrigiert häufig nicht alle chromatischen Aberrationen. Um die verbleibenden chromatischen Aberrationen zu korrigieren, können Sie bis zu fünf Iterationen verwenden. Jede Iteration verringert die verbleibende chromatische Aberration auf Kosten zusätzlicher Verarbeitungszeit. TP_RAWCACORR_AVOIDCOLORSHIFT;Farbverschiebungen vermeiden TP_RAWCACORR_CABLUE;Blau TP_RAWCACORR_CARED;Rot @@ -3604,24 +3693,24 @@ TP_RAW_DCBVNG4;DCB + VNG4 TP_RAW_DMETHOD;Methode TP_RAW_DMETHOD_PROGRESSBAR;%1 verarbeitet TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Demosaik-Optimierung -TP_RAW_DMETHOD_TOOLTIP;IGV und LMMSE sind speziell für High-ISO-Aufnahmen um die\nRauschreduzierung zu unterstützen ohne zu Maze-Mustern,\nPosterisierung oder einem ausgewaschenen Look zu führen.\n\nPixel-Shift ist für 'Pentax Pixel-Shift'-Dateien. Für 'Nicht-Pixel-\nShift'-Dateien wird automatisch AMaZE verwendet. +TP_RAW_DMETHOD_TOOLTIP;IGV und LMMSE sind speziell für High-ISO-Aufnahmen um die Rauschreduzierung zu unterstützen ohne zu Maze-Mustern, Posterisierung oder einem ausgewaschenen Look zu führen.\n\nPixel-Shift ist für 'Pentax Pixel-Shift'-Dateien. Für 'Nicht-Pixel-Shift'-Dateien wird automatisch AMaZE verwendet. TP_RAW_DUALDEMOSAICAUTOCONTRAST;Auto-Kontrastschwelle -TP_RAW_DUALDEMOSAICAUTOCONTRAST_TOOLTIP;Wenn das Kontrollkästchen aktiviert ist (empfohlen), berechnet\nRawTherapee einen optimalen Wert auf der Grundlage homogener\nBereiche im Bild. Wenn kein homogener Bereich vorhanden ist oder\ndas Bild zu sehr rauscht, wird der Wert auf 0 gesetzt. +TP_RAW_DUALDEMOSAICAUTOCONTRAST_TOOLTIP;Wenn das Kontrollkästchen aktiviert ist (empfohlen), berechnet RawTherapee einen optimalen Wert auf der Grundlage homogener Bildbereiche. Wenn kein homogener Bereich vorhanden ist oder das Bild zu sehr rauscht, wird der Wert auf 0 gesetzt. TP_RAW_DUALDEMOSAICCONTRAST;Kontrastschwelle TP_RAW_EAHD;EAHD TP_RAW_FALSECOLOR;Falschfarbenreduzierung TP_RAW_FAST;Schnell TP_RAW_HD;Schwelle -TP_RAW_HD_TOOLTIP;Je niedriger der Wert, umso empfindlicher reagiert\ndie 'Hot-/Dead-Pixel-Erkennung'.\nIst die Empfindlichkeit zu hoch, können Artefakte\nentstehen. Erhöhen Sie in diesem Fall die Schwelle,\nbis die Artefakte verschwinden. +TP_RAW_HD_TOOLTIP;Je niedriger der Wert, umso empfindlicher reagiert die 'Hot-/Dead-Pixel-Erkennung'.\nIst die Empfindlichkeit zu hoch, können Artefakte entstehen. Erhöhen Sie in diesem Fall die Schwelle, bis die Artefakte verschwinden. TP_RAW_HPHD;HPHD TP_RAW_IGV;IGV TP_RAW_IMAGENUM;Unterbild TP_RAW_IMAGENUM_SN;SN-Modus -TP_RAW_IMAGENUM_TOOLTIP;Einige RAW-Formate enthalten mehrere Unterbilder (Pentax Pixel-Shift,\nPentax 3-in-1 HDR, Canon Dual Pixel).\n\n> Auswahl des zu verwendenden Unterbildes (nicht bei Pixel-Shift).\n\n> Legt das Unterbild für die Bewegungsbereiche bei Pixel-Shift fest. +TP_RAW_IMAGENUM_TOOLTIP;Einige RAW-Formate enthalten mehrere Unterbilder (Pentax Pixel-Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\n> Auswahl des zu verwendenden Unterbildes (nicht bei Pixel-Shift).\n\n> Legt das Unterbild für die Bewegungsbereiche bei Pixel-Shift fest. TP_RAW_LABEL;Farbinterpolation TP_RAW_LMMSE;LMMSE TP_RAW_LMMSEITERATIONS;LMMSE-Verbesserungsstufen -TP_RAW_LMMSE_TOOLTIP;Fügt Gamma (Stufe 1), Median (Stufe 2-4)\nund Optimierung (Stufe 5-6) zur Minimierung\nvon Artefakten hinzu und verbessert das\nSignalrauschverhältnis. +TP_RAW_LMMSE_TOOLTIP;Fügt Gamma (Stufe 1), Median (Stufe 2-4) und Optimierung (Stufe 5-6) zur Minimierung von Artefakten hinzu und verbessert das Signalrauschverhältnis. TP_RAW_MONO;Mono TP_RAW_NONE;Keine TP_RAW_PIXELSHIFT;Pixel-Shift @@ -3630,16 +3719,16 @@ TP_RAW_PIXELSHIFTAVERAGE_TOOLTIP;Verwenden Sie den Durchschnitt aller Frames ans TP_RAW_PIXELSHIFTBLUR;Unschärfebewegungsmaske TP_RAW_PIXELSHIFTDMETHOD;Bewegungsmethode TP_RAW_PIXELSHIFTEPERISO;Empfindlichkeit -TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;Der Standardwert 0 wird für die Basis-ISO empfohlen.\nHöhere Werte erhöhen die Empfindlichkeit der Bewegungserkennung.\nVerändern Sie den Wert in kleinen Schritten und beobachten Sie die\nBewegungsmaske. Erhöhen Sie die Empfindlichkeit für unterbelichtete\noder High-ISO-Bilder. +TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;Der Standardwert 0 wird für die Basis-ISO empfohlen.\nHöhere Werte erhöhen die Empfindlichkeit der Bewegungserkennung.\nVerändern Sie den Wert in kleinen Schritten und beobachten Sie die Bewegungsmaske. Erhöhen Sie die Empfindlichkeit für unterbelichtete oder High-ISO-Bilder. TP_RAW_PIXELSHIFTEQUALBRIGHT;Frame-Helligkeit angleichen TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Ausgleich pro Kanal TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;EIN: Individueller Ausgleich der RGB-Kanäle.\nAUS: Identischer Ausgleichsfaktor für alle Kanäle. -TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Gleicht die Helligkeit der Frames an den aktuellen Frame an.\n\nSind überbelichtete Bereiche vorhanden wählen Sie den hellsten Frame aus, um\nMagenta-Farbstiche zu vermeiden oder aktivieren Sie die Bewegungskorrektur. +TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Gleicht die Helligkeit der Frames an den aktuellen Frame an.\n\nSind überbelichtete Bereiche vorhanden wählen Sie den hellsten Frame aus, um Magenta-Farbstiche zu vermeiden oder aktivieren Sie die Bewegungskorrektur. TP_RAW_PIXELSHIFTGREEN;Bewegung im Grün-Kanal erkennen TP_RAW_PIXELSHIFTHOLEFILL;Lücken in der Bewegungsmaske erkennen TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Lücken in der Bewegungsmaske erkennen. TP_RAW_PIXELSHIFTMEDIAN;Median -TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Verwenden Sie den Median aller Frames anstelle des\nausgewählten Frames für Regionen mit Bewegung.\nEntfernt Objekte, die an verschiedenen Stellen in allen\nFrames vorkommen. Erzeugt einen Bewegungseffekt\nauf langsame (überlappende) Objekte. +TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Verwenden Sie den Median aller Frames anstelle des ausgewählten Frames für Regionen mit Bewegung.\nEntfernt Objekte, die an verschiedenen Stellen in allen Frames vorkommen. Erzeugt einen Bewegungseffekt auf langsame (überlappende) Objekte. TP_RAW_PIXELSHIFTMM_AUTO;Automatisch TP_RAW_PIXELSHIFTMM_CUSTOM;Benutzerdefiniert TP_RAW_PIXELSHIFTMM_OFF;Aus @@ -3648,16 +3737,16 @@ TP_RAW_PIXELSHIFTNONGREENCROSS;Bewegung im Rot/Blau-Kanal erkennen TP_RAW_PIXELSHIFTSHOWMOTION;Bewegungsmaske anzeigen TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Nur Maske anzeigen TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Zeigt die Bewegungsmaske ohne Bild. -TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Überlagert das Bild mit einer grünen Maske,\num die Bewegungsbereiche hervorzuheben. +TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Überlagert das Bild mit einer grünen Maske, um die Bewegungsbereiche hervorzuheben. TP_RAW_PIXELSHIFTSIGMA;Unschärferadius -TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;Der Standard-Radius von 1,0 passt in der Regel für die Basis-ISO.\nErhöhen Sie den Wert für High-ISO-Aufnahmen, 5,0 ist ein guter\nAusgangspunkt für High-ISO-Aufnahmen. Achten Sie auf die\nBewegungsmaske, während Sie den Wert ändern. +TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;Der Standard-Radius von 1,0 passt in der Regel für die Basis-ISO.\nErhöhen Sie den Wert für High-ISO-Aufnahmen, 5,0 ist ein guter Ausgangspunkt für High-ISO-Aufnahmen. Achten Sie auf die Bewegungsmaske, während Sie den Wert ändern. TP_RAW_PIXELSHIFTSMOOTH;Weicher Übergang TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Weicher Übergang zwischen Bereichen mit und ohne Bewegung.\n0 = Aus\n1 = AMaZE/LMMSE oder Median. TP_RAW_RCD;RCD TP_RAW_RCDBILINEAR;RCD+Bilinear TP_RAW_RCDVNG4;RCD + VNG4 TP_RAW_SENSOR_BAYER_LABEL;Sensor mit Bayer-Matrix -TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;Mit '3-Pass' erzielt man die besten Ergebnisse\n(empfohlen bei Bildern mit niedrigen ISO-Werten).\n\nBei hohen ISO-Werten unterscheidet sich '1-Pass'\nkaum gegenüber '3-Pass', ist aber deutlich schneller.\n\n'+ schnell' erzeugt weniger Artefakte in kontrastarmen Bereichen. +TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;Mit '3-Pass' erzielt man die besten Ergebnisse\n(empfohlen bei Bildern mit niedrigen ISO-Werten).\n\nBei hohen ISO-Werten unterscheidet sich '1-Pass' kaum gegenüber '3-Pass', ist aber deutlich schneller.\n\n'+ schnell' erzeugt weniger Artefakte in kontrastarmen Bereichen. TP_RAW_SENSOR_XTRANS_LABEL;Sensor mit X-Trans-Matrix TP_RAW_VNG4;VNG4 TP_RAW_XTRANS;X-Trans @@ -3729,12 +3818,12 @@ TP_RETINEX_MAP_METHOD_TOOLTIP;Keine: Wendet die Maske, die mit der Gauß' TP_RETINEX_MAP_NONE;Keine TP_RETINEX_MEDIAN;Medianfilter TP_RETINEX_METHOD;Methode -TP_RETINEX_METHOD_TOOLTIP;Schatten wirkt sich auf dunkle Bereiche aus.\n\nSchatten/Lichter wirkt sich auf dunkle und helle Bereiche aus.\n\nLichter wirkt sich auf helle Bereiche aus.\n\nSpitzlichter wirkt sich auf sehr helle Bereiche aus und reduziert\nMagenta-Falschfarben. +TP_RETINEX_METHOD_TOOLTIP;Schatten wirkt sich auf dunkle Bereiche aus.\n\nSchatten/Lichter wirkt sich auf dunkle und helle Bereiche aus.\n\nLichter wirkt sich auf helle Bereiche aus.\n\nSpitzlichter wirkt sich auf sehr helle Bereiche aus und reduziert Magenta-Falschfarben. TP_RETINEX_MLABEL;Schleierred: Min = %1, Max = %2 TP_RETINEX_MLABEL_TOOLTIP;Sollte nahe bei Min = 0 und Max = 32768 sein aber auch andere Werte sind möglich. TP_RETINEX_NEIGHBOR;Radius TP_RETINEX_NEUTRAL;Zurücksetzen -TP_RETINEX_NEUTRAL_TOOLTIP;Setzt alle Regler und Kurven\nauf ihre Standardwerte zurück. +TP_RETINEX_NEUTRAL_TOOLTIP;Setzt alle Regler und Kurven auf ihre Standardwerte zurück. TP_RETINEX_OFFSET;Versatz (Helligkeit) TP_RETINEX_SCALES;Gauß'scher Gradient TP_RETINEX_SCALES_TOOLTIP;Steht der Regler auf 0 sind alle Iterationen identisch.\nBei > 0 werden Skalierung und Radius reduziert,\nbei < 0 erhöht. @@ -3752,10 +3841,10 @@ TP_RETINEX_TRANSMISSION;Übertragungzuordnung TP_RETINEX_TRANSMISSION_TOOLTIP;Übertragung in Abhängigkeit der Übertragung.\n\nx-Achse: Übertragung negativer Werte (Min),\nMittel und positiver Werte (Max).\n\ny-Achse: Verstärkung oder Abschwächung. TP_RETINEX_UNIFORM;Schatten/Lichter TP_RETINEX_VARIANCE;Kontrast -TP_RETINEX_VARIANCE_TOOLTIP;Niedrige Werte erhöhen den lokalen\nKontrast und die Sättigung, können\naber zu Artefakten führen. +TP_RETINEX_VARIANCE_TOOLTIP;Niedrige Werte erhöhen den lokalen Kontrast und die Sättigung, können aber zu Artefakten führen. TP_RETINEX_VIEW;Vorschau TP_RETINEX_VIEW_MASK;Maske -TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard: Normale Anzeige\n\nMaske: Zeigt die Maske an\n\nUnschärfemaske: Zeigt das Bild mit einem großen\nUnschärfemaskenradius an.\n\nÜbertragung-Auto / Fest: Zeigt die Übertragungszuordnung\nvor der Anwendung von Kontrast und Helligkeit an.\n\nACHTUNG: Die Maske zeigt nicht das Endergebnis, sondern\nverstärkt den Effekt um ihn besser beurteilen zu können. +TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard: Normale Anzeige\n\nMaske: Zeigt die Maske an\n\nUnschärfemaske: Zeigt das Bild mit einem großen Unschärfemaskenradius an.\n\nÜbertragung-Auto / Fest: Zeigt die Übertragungszuordnung vor der Anwendung von Kontrast und Helligkeit an.\n\nACHTUNG: Die Maske zeigt nicht das Endergebnis, sondern verstärkt den Effekt um ihn besser beurteilen zu können. TP_RETINEX_VIEW_NONE;Standard TP_RETINEX_VIEW_TRAN;Übertragung - Auto TP_RETINEX_VIEW_TRAN2;Übertragung - Fest @@ -3816,6 +3905,16 @@ TP_TM_FATTAL_AMOUNT;Intensität TP_TM_FATTAL_ANCHOR;Helligkeitsverschiebung TP_TM_FATTAL_LABEL;Dynamikkompression TP_TM_FATTAL_THRESHOLD;Details +TP_TONE_EQUALIZER_BANDS;Werte +TP_TONE_EQUALIZER_BAND_0;Schwarz +TP_TONE_EQUALIZER_BAND_1;Schatten +TP_TONE_EQUALIZER_BAND_2;Mitteltöne +TP_TONE_EQUALIZER_BAND_3;Lichter +TP_TONE_EQUALIZER_BAND_4;Weiß +TP_TONE_EQUALIZER_DETAIL;Regulierung +TP_TONE_EQUALIZER_LABEL;Tonwert-Equalizer +TP_TONE_EQUALIZER_PIVOT;Wichtung (Ev) +TP_TONE_EQUALIZER_SHOW_COLOR_MAP;Zeige Farbmaske TP_VIBRANCE_AVOIDCOLORSHIFT;Farbverschiebungen vermeiden TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Hautfarbtöne @@ -3893,7 +3992,7 @@ TP_WAVELET_COLORT;Deckkraft Rot/Grün TP_WAVELET_COMPCONT;Kontrast TP_WAVELET_COMPEXPERT;Erweitert TP_WAVELET_COMPGAMMA;Gamma-Kompression -TP_WAVELET_COMPGAMMA_TOOLTIP;Das Anpassen des Gammawerts des\nRestbildes ermöglicht das Angleichen\nder Daten und des Histogramms. +TP_WAVELET_COMPGAMMA_TOOLTIP;Das Anpassen des Gammawerts des Restbildes ermöglicht das Angleichen der Daten und des Histogramms. TP_WAVELET_COMPLEXLAB;Komplexität TP_WAVELET_COMPLEX_TOOLTIP;Standard: zeigt eine verringerte Anzahl an Werkzeugen, ausreichend für die meisten Fälle.\nErweitert: zeigt alle Werkzeuge für komplexe Fälle. TP_WAVELET_COMPNORMAL;Standard @@ -3909,9 +4008,9 @@ TP_WAVELET_CTYPE;Chrominanz-Kontrolle TP_WAVELET_CURVEEDITOR_BL_TOOLTIP;Deaktiviert wenn Zoom ungefähr > 300% TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Lokaler Kontrast als Funktion des ursprünglichen Kontrasts.\n\nNiedrige Werte: Wenig lokaler Kontrast (Werte zwischen 10 - 20)\n50%: Durchschnittlicher lokaler Kontrast (Werte zwischen 100 - 300)\n66%: Standardabweichung des Lokalen Kontrasts (Werte zwischen 300 - 800)\n100%: Maximaler lokaler Kontrast (Werte zwischen 3000 - 8000)\n TP_WAVELET_CURVEEDITOR_CH;Kontrast = f(H) -TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Kontrast als Funktion des Farbtons.\nAchten Sie darauf, dass Sie die Werte beim\nGamut-Farbton nicht überschreiben\n\nDie Kurve hat nur Auswirkung, wenn die Wavelet-\nKontrastregler nicht auf '0' stehen. +TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Kontrast als Funktion des Farbtons.\nAchten Sie darauf, dass Sie die Werte beim Gamut-Farbton nicht überschreiben.\n\nDie Kurve hat nur Auswirkung, wenn die Wavelet-Kontrastregler nicht auf '0' stehen. TP_WAVELET_CURVEEDITOR_CL;L -TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Wendet eine Kontrasthelligkeitskurve\nam Ende der Wavelet-Verarbeitung an. +TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Wendet eine Kontrasthelligkeitskurve am Ende der Wavelet-Verarbeitung an. TP_WAVELET_CURVEEDITOR_HH;HH TP_WAVELET_CURVEEDITOR_HH_TOOLTIP;Farbton als Funktion des Farbtons H=f(H). TP_WAVELET_DALL;Alle Richtungen @@ -3922,7 +4021,7 @@ TP_WAVELET_DAUB6;D6 - Standard Plus TP_WAVELET_DAUB10;D10 - Mittel TP_WAVELET_DAUB14;D14 - Hoch TP_WAVELET_DAUBLOCAL;Wavelet Kantenperformance -TP_WAVELET_DAUB_TOOLTIP;Ändert den Daubechies-Koeffizienten:\nD4 = Standard\nD14 = Häufig bestes Ergebnis auf Kosten\nvon ca. 10% längerer Verarbeitungszeit.\n\nVerbessert die Kantenerkennung sowie die Qualität\nder ersten Waveletebene. Jedoch hängt die Qualität\nnicht ausschließlich mit diesem Koeffizienten zusammen\nund kann je nach Bild und Einsatz variieren. +TP_WAVELET_DAUB_TOOLTIP;Ändert den Daubechies-Koeffizienten:\nD4 = Standard\nD14 = Häufig bestes Ergebnis auf Kosten von ca. 10% längerer Verarbeitungszeit.\n\nVerbessert die Kantenerkennung sowie die Qualität der ersten Waveletebene. Jedoch hängt die Qualität nicht ausschließlich mit diesem Koeffizienten zusammen und kann je nach Bild und Einsatz variieren. TP_WAVELET_DEN5THR;Schwellenwert TP_WAVELET_DENCURV;Kurve TP_WAVELET_DENL;Korrektur Struktur @@ -3955,13 +4054,13 @@ TP_WAVELET_EDGEDETECT;Verlaufsempfindlichkeit TP_WAVELET_EDGEDETECTTHR;Schwelle niedrig (Rauschen) TP_WAVELET_EDGEDETECTTHR2;Schwelle hoch (Erkennung) TP_WAVELET_EDGEDETECTTHR_TOOLTIP;Schwelle der Kantenerkennung für feine Details.\nVerhindert die Schärfung von Rauschen. -TP_WAVELET_EDGEDETECT_TOOLTIP;Verschieben des Reglers nach rechts erhöht die\nKantenempfindlichkeit. Die Einstellung wirkt sich\nauf den lokalen Kontrast, Kanteneinstellungen und\nRauschen aus. +TP_WAVELET_EDGEDETECT_TOOLTIP;Verschieben des Reglers nach rechts erhöht die Kantenempfindlichkeit.\nDie Einstellung wirkt sich auf den lokalen Kontrast, Kanteneinstellungen und Rauschen aus. TP_WAVELET_EDGESENSI;Kantenempfindlichkeit -TP_WAVELET_EDGREINF_TOOLTIP;Reduziert oder verstärkt die Kantenschärfung der\nersten Ebene. Wird die Schärfung verstärkt, wird\nbei der zweiten Ebene die Schärfung reduziert und\numgekehrt. Alle anderen Ebenen werden nicht\nbeeinflusst. +TP_WAVELET_EDGREINF_TOOLTIP;Reduziert oder verstärkt die Kantenschärfung der ersten Ebene.\nWird die Schärfung verstärkt, wird bei der zweiten Ebene die Schärfung reduziert und umgekehrt. Alle anderen Ebenen werden nicht beeinflusst. TP_WAVELET_EDGTHRESH;Details -TP_WAVELET_EDGTHRESH_TOOLTIP;Verschieben des Reglers nach rechts verstärkt\ndie Kantenschärfung der ersten Waveletebene\nund reduziert sie für die anderen Ebenen.\n\nNegative Werte können zu Artefakten führen. +TP_WAVELET_EDGTHRESH_TOOLTIP;Verschieben des Reglers nach rechts verstärkt die Kantenschärfung der ersten Waveletebene und reduziert sie für die anderen Ebenen.\n\nNegative Werte können zu Artefakten führen. TP_WAVELET_EDRAD;Radius -TP_WAVELET_EDRAD_TOOLTIP;Der Radius unterscheidet sich von dem in\nden üblichen Schärfungswerkzeugen. Der\nWert wird mit jeder Ebene über eine komplexe\nFunktion verglichen. Ein Wert von '0' zeigt\ndeshalb immer noch eine Auswirkung. +TP_WAVELET_EDRAD_TOOLTIP;Der Radius unterscheidet sich von dem in den üblichen Schärfungswerkzeugen.\nDer Wert wird mit jeder Ebene über eine komplexe Funktion verglichen. Ein Wert von '0' zeigt deshalb immer noch eine Auswirkung. TP_WAVELET_EDSL;Regler TP_WAVELET_EDTYPE;Lokale Kontrastmethode TP_WAVELET_EDVAL;Intensität @@ -3974,9 +4073,9 @@ TP_WAVELET_HIGHLIGHT;Lichter-Luminanz-Bereich TP_WAVELET_HS1;Gesamter Luminanz-Bereich TP_WAVELET_HS2;Schatten/Lichter TP_WAVELET_HUESKIN;Hautfarbton -TP_WAVELET_HUESKIN_TOOLTIP;Wenn Sie den Bereich signifikant nach Links\noder Rechts verschieben müssen, ist der\nWeißabgleich nicht richtig gewählt.\nWählen Sie den eingeschlossenen Bereich so\neng wie möglich, um den Einfluss auf benachbarte\nFarben zu verhindern. +TP_WAVELET_HUESKIN_TOOLTIP;Wenn Sie den Bereich signifikant nach Links oder Rechts verschieben müssen, ist der Weißabgleich nicht richtig gewählt.\nWählen Sie den eingeschlossenen Bereich so eng wie möglich, um den Einfluss auf benachbarte Farben zu verhindern. TP_WAVELET_HUESKY;Himmelsfarbton -TP_WAVELET_HUESKY_TOOLTIP;Wenn Sie den Bereich signifikant nach Links oder Rechts verschieben müssen, oder Artefakte entstehen, ist der Weißabgleich nicht richtig gewählt.\nWählen Sie den eingeschlossenen Bereich so\neng wie möglich, um den Einfluss auf benachbarte\nFarben zu verhindern. +TP_WAVELET_HUESKY_TOOLTIP;Wenn Sie den Bereich signifikant nach Links oder Rechts verschieben müssen, oder Artefakte entstehen, ist der Weißabgleich nicht richtig gewählt.\nWählen Sie den eingeschlossenen Bereich so eng wie möglich, um den Einfluss auf benachbarte Farben zu verhindern. TP_WAVELET_ITER;Delta-Kontrastausgleich TP_WAVELET_ITER_TOOLTIP;Links: Erhöht die niedrigen und reduziert die hohen Ebenen.\nRechts: Reduziert die niedrigen und erhöht die hohen Ebenen. TP_WAVELET_LABEL;Wavelet @@ -4008,7 +4107,7 @@ TP_WAVELET_LOWTHR_TOOLTIP;Verhindert die Verstärkung feiner Texturen und Rausch TP_WAVELET_MEDGREINF;Erste Ebene TP_WAVELET_MEDI;Artefakte in blauem Himmel reduzieren TP_WAVELET_MEDILEV;Kantenerkennung -TP_WAVELET_MEDILEV_TOOLTIP;Wenn Sie die Kantenerkennung aktivieren, sollten Sie folgende\nEinstellungen anpassen:\n\n1. Niedrige Kontrastebenen deaktivieren, um Artefakte zu vermeiden.\n2. Hohe Werte bei der Verlaufsempfindlichkeit einstellen.\n\nSie können die Intensität mit der Wavelet-Rauschreduzierung anpassen. +TP_WAVELET_MEDILEV_TOOLTIP;Wenn Sie die Kantenerkennung aktivieren, sollten Sie folgende Einstellungen anpassen:\n\n1. Niedrige Kontrastebenen deaktivieren, um Artefakte zu vermeiden.\n2. Hohe Werte bei der Verlaufsempfindlichkeit einstellen.\n\nSie können die Intensität mit der Wavelet-Rauschreduzierung anpassen. TP_WAVELET_MERGEC;Chroma zusammenführen TP_WAVELET_MERGEL;Luma zusammenführen TP_WAVELET_MIXCONTRAST;Referenz @@ -4023,13 +4122,13 @@ TP_WAVELET_NPHIGH;Hoch TP_WAVELET_NPLOW;Niedrig TP_WAVELET_NPNONE;Keine TP_WAVELET_NPTYPE;Benachbarte Pixel -TP_WAVELET_NPTYPE_TOOLTIP;Dieser Algorithmus verwendet ein Pixel und acht\nseiner Nachbarn. Sind die Unterschiede gering,\nwerden die Kanten geschärft. +TP_WAVELET_NPTYPE_TOOLTIP;Dieser Algorithmus verwendet ein Pixel und acht seiner Nachbarn.\nSind die Unterschiede gering, werden die Kanten geschärft. TP_WAVELET_OFFSET_TOOLTIP;Offset ändert das Gleichgewicht zwischen niedrigen und hohen Kontrastdetails.\nHohe Werte verstärken Kontraständerungen zu Details mit höherem Kontrast, während niedrige Werte Kontraständerungen zu Details mit niedrigem Kontrast verstärken.\nDurch Verwendung eines niedrigen Dämpfungsreaktionswerts können Sie auswählen, welche Kontrastwerte aufgewertet werden. TP_WAVELET_OLDSH;Algorithmus verwendet negative Werte TP_WAVELET_OPACITY;Deckkraft Blau/Gelb TP_WAVELET_OPACITYW;Kontrastausgleichskurve TP_WAVELET_OPACITYWL;Lokale Kontrastkurve -TP_WAVELET_OPACITYWL_TOOLTIP;Wendet eine lokale Kontrastkurve am\nEnde der Wavelet-Verarbeitung an.\n\nLinks stellt den niedrigsten, rechts den\nhöchsten Kontrast dar. +TP_WAVELET_OPACITYWL_TOOLTIP;Wendet eine lokale Kontrastkurve am Ende der Wavelet-Verarbeitung an.\n\nLinks stellt den niedrigsten, rechts den höchsten Kontrast dar. TP_WAVELET_PASTEL;Pastellfarben TP_WAVELET_PROC;Verarbeitung TP_WAVELET_PROTAB;Schutz @@ -4070,8 +4169,8 @@ TP_WAVELET_THRDEN_TOOLTIP;Erzeugt eine abgestufte Kurve, die verwendet wird, um TP_WAVELET_THREND;Schwellenwert Lokaler Kontrast TP_WAVELET_THRESHOLD;Lichterebenen TP_WAVELET_THRESHOLD2;Schattenebenen -TP_WAVELET_THRESHOLD2_TOOLTIP;Legt die Ebene der Untergrenze (9 minus Wert)\nfür den Schatten-Luminanz-Bereich fest. Der\nmaximal mögliche Wert wird vom Wert der Lichter-\nebenen begrenzt.\n\nBeeinflussbare Ebenen: Untergrenze bis Ebene 9 -TP_WAVELET_THRESHOLD_TOOLTIP;Legt die Ebene der Obergrenze für den\nLichter-Luminanz-Bereich fest. Der Wert begrenzt die\nmaximal möglichen Schattenebenen.\n\nBeeinflussbare Ebenen: Ebene 1 bis Obergrenze +TP_WAVELET_THRESHOLD2_TOOLTIP;Legt die Ebene der Untergrenze (9 minus Wert) für den Schatten-Luminanz-Bereich fest. Der maximal mögliche Wert wird vom Wert der Lichterebenen begrenzt.\n\nBeeinflussbare Ebenen: Untergrenze bis Ebene 9 +TP_WAVELET_THRESHOLD_TOOLTIP;Legt die Ebene der Obergrenze für den Lichter-Luminanz-Bereich fest. Der Wert begrenzt die maximal möglichen Schattenebenen.\n\nBeeinflussbare Ebenen: Ebene 1 bis Obergrenze TP_WAVELET_THRH;Schwelle Lichter TP_WAVELET_TILESBIG;Große Kacheln TP_WAVELET_TILESFULL;Ganzes Bild @@ -4080,7 +4179,7 @@ TP_WAVELET_TILES_TOOLTIP;'Ganzes Bild' (empfohlen) liefert eine bessere Qualitä TP_WAVELET_TMEDGS;Kantenschutz TP_WAVELET_TMSCALE;Skalieren TP_WAVELET_TMSTRENGTH;Intensität -TP_WAVELET_TMSTRENGTH_TOOLTIP;Kontrolliert die Intensität der Dynamik- oder\nKontrastkompression des Restbildes. Ist der\nWert ungleich 0, werden die Intensitäts- und\nGammaregler des Tonwertkorrektur-\nWerkzeugs im Belichtungsreiter deaktiviert. +TP_WAVELET_TMSTRENGTH_TOOLTIP;Kontrolliert die Intensität der Dynamik- oder Kontrastkompression des Restbildes. Ist der\nWert ungleich 0, werden die Intensitäts- und Gammaregler des Tonwertkorrektur-Werkzeugs im Belichtungsreiter deaktiviert. TP_WAVELET_TMTYPE;Kompression TP_WAVELET_TON;Tönung TP_WAVELET_TONFRAME;Ausgeschlossene Farben @@ -4092,7 +4191,7 @@ TP_WAVELET_WAVOFFSET;Versatz TP_WBALANCE_AUTO;Automatisch TP_WBALANCE_AUTOITCGREEN;Temperaturbezogen TP_WBALANCE_AUTOOLD;RGB grau -TP_WBALANCE_AUTO_HEADER;Automatisch +TP_WBALANCE_AUTO_HEADER;Automatisch & Verfeinern TP_WBALANCE_CAMERA;Kamera TP_WBALANCE_CLOUDY;Bewölkt TP_WBALANCE_CUSTOM;Benutzerdefiniert @@ -4119,6 +4218,43 @@ TP_WBALANCE_FLUO_HEADER;Leuchtstofflampe TP_WBALANCE_GREEN;Tönung TP_WBALANCE_GTI;GTI TP_WBALANCE_HMI;HMI +TP_WBALANCE_ITCWALG_TOOLTIP;Ermöglicht Ihnen, wenn möglich, zur anderen alternativen Temperatur (Alt_temp) zu wechseln.\nInaktiv im Fall der "Einzelauswahl". +TP_WBALANCE_ITCWBDELTA_TOOLTIP;Für jede versuchte "grüne" Iteration wurde der zu berücksichtigende Temperaturunterschied festgelegt. +TP_WBALANCE_ITCWBFGREEN_TOOLTIP;Finden Sie den besten Kompromiss zwischen Kandidat und Grün. +TP_WBALANCE_ITCWBMINSIZEPATCH_TOOLTIP;Ermöglicht Ihnen, den minimalen Patch-Wert festzulegen. Zu niedrige Werte können zu einer fehlenden Korrelation führen. +TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;Ermöglicht das Filtern von Magenta-/Lila-Daten aus dem Bild. Wenn das Kontrollkästchen aktiviert ist, wird ein Filter angewendet, der den Wert von Y begrenzt. Standardmäßig beträgt dieser Wert 0,4. Sie können es in "Optionen" Itcwb_Ypurple ändern (maximal 1). +TP_WBALANCE_ITCWBPRECIS_TOOLTIP;Je niedriger der Wert, desto relevanter sind die Daten, aber desto länger dauert die Verarbeitung. Da die Verarbeitungszeit gering ist, sollte dieser Parameter grundsätzlich auf dem Standardwert bleiben können. +TP_WBALANCE_ITCWBRGREEN_TOOLTIP;Legt die Amplitude der Grünwertüberprüfung in Iterationen fest, von der niedrigen Amplitude 0,82 bis 1,25 bis zur maximalen Amplitude 0,4 bis 4. +TP_WBALANCE_ITCWBSIZEPATCH_TOOLTIP;Definiert die Anzahl der Farben die vom Algorithmus verwendet werden. +TP_WBALANCE_ITCWBSIZE_TOOLTIP;Diese Einstellung legt die Anzahl der Iterationen fest, um die beste Übereinstimmung zwischen den Referenzspektralfarben und denen im xyY-Wert des Bildes zu finden. Ein Wert von 3 scheint ein guter Kompromiss zu sein. +TP_WBALANCE_ITCWBTHRES_TOOLTIP;Beschränkt die Vergleichsabtastung zwischen Spektraldaten und Bilddaten. +TP_WBALANCE_ITCWB_ALG;Entfernt den 2-Wege-Algorithmus +TP_WBALANCE_ITCWB_CUSTOM;Benutzerdefinierte Temperatur und Tönung +TP_WBALANCE_ITCWB_DELTA;Delta-Temperatur in der Grün-Schleife +TP_WBALANCE_ITCWB_FGREEN;Ermittle den Grün-Kandidaten +TP_WBALANCE_ITCWB_FORCED;Annähernd vollständiges CIE-Diagramm +TP_WBALANCE_ITCWB_FRA;Einstellungen Auto-Temperatur-Korrelation +TP_WBALANCE_ITCWB_FRA_TOOLTIP;Diese Einstellungen ermöglichen je nach Bildart (Rohtyp, Farbmetrik usw.) eine Anpassung des Algorithmus "Temperaturkorrelation". Es gibt keine absolute Regel, die diese Parameter mit den erzielten Ergebnissen verknüpft. +TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch Minimalgröße +TP_WBALANCE_ITCWB_NOPURPLE;Filter auf Violett +TP_WBALANCE_ITCWB_PRIM_ACE;Erzwingt die Verwendung des vollständiigen CIE-Diagrammes +TP_WBALANCE_ITCWB_PRIM_ADOB;Mittlere Abttastung +TP_WBALANCE_ITCWB_PRIM_BETA;Mittlere Abtastung (Standard) - nahe der Farbskala des Zeigers +TP_WBALANCE_ITCWB_PRIM_JDCMAX;Annähernd vollständiges CIE-Diagramm +TP_WBALANCE_ITCWB_PRIM_REC;Hohe Abtastung +TP_WBALANCE_ITCWB_PRIM_SRGB;Geringe Abtastung und Kameraeinstellungen ignorieren +TP_WBALANCE_ITCWB_PRIM_XYZCAM;Kamera-XYZ-Matrix +TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax nach Kamera XYZ-Matrix +TP_WBALANCE_ITCWB_RGREEN;Grün-Bereich +TP_WBALANCE_ITCWB_SAMPLING;Niedrige Abtastung 5.9 +TP_WBALANCE_ITCWB_SIZEPATCH;Größe des Farb-Patches +TP_WBALANCE_ITCWB_THRES;Verwendete Farben (Voreingestellt) +TP_WBALANCE_ITCWCUSTOM_TOOLTIP;Ermöglicht Ihnen die Verwendung benutzerdefinierter Einstellungen für Temperatur und Grün (Tönung).\n\nNutzungstipps:\n1) Starten Sie Itcwb und aktivieren Sie "Benutzerdefinierte Temperatur und Tönung verwenden".\n2) Stellen Sie "Temperatur und Tönung" nach Ihren Wünschen ein: frei, auswählen ,...(Benutzerdefiniert)\n3) Gehen Sie zurück zu "Temperaturkorrelation".\n\nSie können nicht verwenden: 2 Durchgänge, AWB-Temperatur-Bias, Grün-Verfeinerung. +TP_WBALANCE_ITCWFORCED_TOOLTIP;Standardmäßig (Kontrollkästchen nicht aktiviert) werden die während der Abtastung gescannten Daten auf das sRGB-Profil zurückgeführt, das am weitesten verbreitet ist, sowohl für die Kalibrierung von DCP- oder ICC-Profilen mit dem Colorchecker24 als auch für die Verwendung im Internet.\nWenn Sie Bilder mit sehr hohem Farbumfang haben (einige Blumen, künstliche Farben), kann es erforderlich sein, das gesamte CIExy-Diagramm zu verwenden. Das verwendete Profil ist ACESP0. In diesem zweiten Fall ist die Anzahl der Farben, die innerhalb des Algorithmus verwendet werden können, wichtiger. +TP_WBALANCE_ITCWGREEN;Grün-Verfeinerung +TP_WBALANCE_ITCWGREEN_TOOLTIP;Verändert die Grün-Tönung als Referenz für den Algorithmus. Es hat im Wesentlichen die gleiche Rolle für Grün wie die "AWB-Temperaturabweichung" für die Temperatur.\nDer gesamte Algorithmus wird neu berechnet. +TP_WBALANCE_ITCWPRIM_TOOLTIP;Ermöglicht die Auswahl der Bildabtastung.\n'Annähernd vollständiges CIE-Diagramm' verwendet fast die auf dem Sensor vorhandenen Daten, möglicherweise einschließlich der imaginären Farben.\n'Kamera-XYZ-Matrix' – verwendet die direkt von der Farbmatrix abgeleitete Matrix.\n'Mittlere Abtastung (Standard) - nahe der Farbskala des Zeigers' entspricht im Wesentlichen den häufigsten Fällen des menschlichen Sehens.\nMit 'Geringe Abtastung und keine Kameraeinstellungen verwenden' können Sie Teile des Bildes mit hoher Farbskala isolieren und den Algorithmus zwingen, die Kameraeinstellungen in einigen Fällen (Tönung > 0,8,...) zu ignorieren. Dies wird sich natürlich auf das Ergebnis auswirken.\n\nDieses Sampling hat nur einen Einfluss auf die Kanalmultiplikatoren, es hat nichts mit dem "Arbeitsprofil" zu tun und verändert nicht die Farbskala des Bildes. +TP_WBALANCE_ITCWSAMPLING_TOOLTIP;Ermöglicht die Verwendung des alten Sampling-Algorithmus, um eine bessere Kompatibilität mit 5.9 sicherzustellen. Dazu muss Beobachter 10° (Standard) aktiviert sein. TP_WBALANCE_JUDGEIII;JudgeIII TP_WBALANCE_LABEL;Weißabgleich TP_WBALANCE_LAMP_HEADER;Lampe @@ -4126,6 +4262,14 @@ TP_WBALANCE_LED_CRS;CRS SP12 WWMR16 TP_WBALANCE_LED_HEADER;LED TP_WBALANCE_LED_LSI;LSI Lumelex 2040 TP_WBALANCE_METHOD;Methode +TP_WBALANCE_MULLABEL;Multiplikatoren: r=%1 g=%2 b=%3 +TP_WBALANCE_MULLABEL_TOOLTIP;Die Werte dienen der Information, sie können nicht geändert werden. +TP_WBALANCE_OBSERVER10;Beobachter 10° anstatt Beobachter 2° +TP_WBALANCE_OBSERVER10_TOOLTIP;Das Farbmanagement in Rawtherapee (Weißabgleich, Kanalmultiplikatoren, Lichter-Rekonstruktion,...) nutzt die Spektraldaten der Leuchtmittel und Farben. Der Beobachter ist ein wichtiger Parameter dieses Managements, der den Wahrnehmungswinkel des Auges berücksichtigt. Im Jahr 1931 wurde er auf 2° festgelegt (privilegiert die Verwendung der Kegel). Im Jahr 1964 wurde er auf 10° festgelegt (privilegiert die Verwendung der Zapfen, berücksichtigt jedoch teilweise die Stäbchen).\nIm Falle einer (seltenen) Drift der Farben aufgrund des Beobachters 10° – wahrscheinlich aufgrund der Konvertierungsmatrix – muss Beobachter 2° ausgewählt werden.\nIn den meisten Fällen ist Beobachter 10° (Standard) die bessere Wahl. +TP_WBALANCE_PATCHLABEL;Gelesene Farben: %1 Patch Chroma: %2 Größe= %3 +TP_WBALANCE_PATCHLABEL_TOOLTIP;Zeigt die Anzahl der gelesenen Farben an (max. = 237).\nZeigt die berechnete Patch-Chroma an.\nAWB-Temperaturabweichung. Versuchen Sie, diesen Wert zu reduzieren. Ein Minimum scheint den Algorithmus zu optimieren.\n\nPatch-Größe passt zur Chroma-Optimierung. +TP_WBALANCE_PATCHLEVELLABEL;Patch: ΔE= %1 - Daten x 9 Min: %2 Max= %3 +TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP;Zeigt den ΔE-Patch zwischen Bild und Spektraldaten an (dies setzt voraus, dass genügend Spektraldaten vorhanden sind).\nZeigt die gefundenen gelesenen Daten an. Die beiden Werte entsprechen den berücksichtigten minimalen und maximalen Datenwerten. Um die Anzahl der betroffenen Pixel im Bild zu ermitteln, muss der Koeffizient x9 berücksichtigt werden. TP_WBALANCE_PICKER;Farbwähler TP_WBALANCE_SHADE;Schatten TP_WBALANCE_SIZE;Größe: @@ -4135,9 +4279,11 @@ TP_WBALANCE_SOLUX47;Solux 4700K (Vendor) TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery) TP_WBALANCE_SPOTWB;Manuell setzen TP_WBALANCE_STUDLABEL;Bezugsfaktor: %1 -TP_WBALANCE_STUDLABEL_TOOLTIP;Anzeige des berechneten Bezugsfaktors.\nNiedrigere Werte sind besser, wobei <0,005 ausgezeichnet,\n<0,01 gut und> 0,5 schlecht ist.\nNiedrige Werte bedeuten jedoch nicht automatisch, dass der Weißabgleich gut ist:\nwenn die Lichtquelle nicht eindeutig ist können die Ergebnisse fehlerhaft sein.\nEin Wert von 1000 bedeutet, dass frühere Berechnungen verwendet werden und\ndie Ergebnisse wahrscheinlich gut sind. +TP_WBALANCE_STUDLABEL0;Bezugsfaktor: %1 Durchgänge: %2 Alt=%3 +TP_WBALANCE_STUDLABEL1;Bezugsfaktor: %1 Durchgänge: %2 Beste_Alt=%3 +TP_WBALANCE_STUDLABEL_TOOLTIP;Anzeige des berechneten Bezugsfaktors.\nNiedrigere Werte sind besser, wobei <0,005 ausgezeichnet,\n<0,01 gut und> 0,5 schlecht ist.\nNiedrige Werte bedeuten jedoch nicht automatisch, dass der Weißabgleich gut ist:\nwenn die Lichtquelle nicht eindeutig ist können die Ergebnisse fehlerhaft sein.\nEin Wert von 1000 bedeutet, dass frühere Berechnungen verwendet werden und die Ergebnisse wahrscheinlich gut sind. Durchgänge: Anzahl der Berechnungen, (beste) Alt: Alternative Temperatur. TP_WBALANCE_TEMPBIAS;AWB-Temperatur-Korrektur -TP_WBALANCE_TEMPBIAS_TOOLTIP;Prozentuale Korrektur der Farbtemperatur des automatischen\nWeißabgleichs in Richtung wärmer oder kälter.\nDer Korrekturwert berechnet sich aus:\nAWB-Temperatur + AWB-Temperatur * AWB-Temperatur-Korrektur +TP_WBALANCE_TEMPBIAS_TOOLTIP;Ermöglicht die Korrektur der Farbtemperatur des automatischen Weißabgleichs in Richtung wärmer oder kälter.\nDer Korrekturwert wird prozentual angegeben und berechnet sich aus:\nAWB-Temperatur + AWB-Temperatur * AWB-Temperatur-Korrektur.\n\nMit "AWB Temperatur Korrektur" können die Ergebnisse der "Temperaturbezugsfaktoren" angepasst werden. Jede Änderung erzeugt eine Neuberechnung von Temperatur, Tönung und Bezugsfaktor. TP_WBALANCE_TEMPERATURE;Farbtemperatur TP_WBALANCE_TUNGSTEN;Glühlampe TP_WBALANCE_WATER1;Unterwasser 1 @@ -4150,3 +4296,33 @@ ZOOMPANEL_ZOOMFITCROPSCREEN;Ausschnitt an Bildschirm anpassen.\nTaste: f ZOOMPANEL_ZOOMFITSCREEN;An Bildschirm anpassen.\nTaste: Alt + f ZOOMPANEL_ZOOMIN;Hineinzoomen\nTaste: + ZOOMPANEL_ZOOMOUT;Herauszoomen\nTaste: - +//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 + +!!!!!!!!!!!!!!!!!!!!!!!!! +! Untranslated keys follow; remove the ! prefix after an entry is translated. +!!!!!!!!!!!!!!!!!!!!!!!!! + +!ERROR_MSG_METADATA_VALUE;Metadata: error setting %1 to %2 +!HISTORY_MSG_LOCAL_TMO_SATUR;Local Exp Fattal Saturation +!HISTORY_MSG_WBITC_DELTA;Itcwb Delta green +!HISTORY_MSG_WBITC_FGREEN;Itcwb Green - student +!HISTORY_MSG_WBITC_FORCE;Itcwb Force +!HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +!HISTORY_MSG_WBITC_PONDER;Itcwb ponderated +!HISTORY_MSG_WBITC_PRECIS;Itcwb Precision +!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 Threshold +!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 +!TP_LOCALLAB_FATSAT;Saturation control +!TP_WBALANCE_ITCWB_PRECIS;Precision algorithm - scale used +!TP_WBALANCE_ITCWB_SIZE;Size of ref. color compare to histogram diff --git a/rtdata/languages/English (UK) b/rtdata/languages/English (UK) index 7de3a54cc..f03dbd1af 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 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_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;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 - 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 @@ -1595,19 +1619,24 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation !HISTORY_MSG_DEHAZE_SHOW_DEPTH_MAP;Dehaze - Show depth map !HISTORY_MSG_DEHAZE_STRENGTH;Dehaze - Strength +!HISTORY_MSG_DIRPYRDENOISE_GAIN;NR - Compensate for lightness !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 +1656,8 @@ 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_LOCAL_TMO_SATUR;Local Exp Fattal Saturation !HISTORY_MSG_METADATA_MODE;Metadata copy mode !HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold @@ -1670,6 +1701,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 +1744,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;Green 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 Threshold !HISTORY_NEWSNAPSHOT;Add !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !HISTORY_SNAPSHOT;Snapshot @@ -1807,7 +1860,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 +1972,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 +2017,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 +2041,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 +2097,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 +2126,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 +2201,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 +2210,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 +2294,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 +2312,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 +2420,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 +2478,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. @@ -2489,6 +2586,8 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_DIRPYRDENOISE_LUMINANCE_DETAIL;Detail recovery !TP_DIRPYRDENOISE_LUMINANCE_FRAME;Luminance !TP_DIRPYRDENOISE_LUMINANCE_SMOOTHING;Luminance +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN;Compensate for lightness +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN_TOOLTIP;Alter the noise reduction strength based on the image lightness. Strength is reduced for dark images and increased for bright images. !TP_DIRPYRDENOISE_MAIN_COLORSPACE_LAB;L*a*b* !TP_DIRPYRDENOISE_MAIN_COLORSPACE_RGB;RGB !TP_DIRPYRDENOISE_MAIN_COLORSPACE_TOOLTIP;For raw images either RGB or L*a*b* methods can be used.\n\nFor non-raw images the L*a*b* method will be used, regardless of the selection. @@ -2572,9 +2671,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 +2690,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 +2704,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 +2727,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 +2780,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 +2886,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 +2916,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 +2940,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 +2991,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 +3030,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 +3041,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 @@ -2940,6 +3050,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_LOCALLAB_FATFRA;Dynamic Range Compression ƒ !TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal – uses the Fattal Tone-mapping algorithm. !TP_LOCALLAB_FATLEVEL;Sigma +!TP_LOCALLAB_FATSAT;Saturation control !TP_LOCALLAB_FATSHFRA;Dynamic Range Compression Mask ƒ !TP_LOCALLAB_FEATH_TOOLTIP;Gradient width as a percentage of the Spot diagonal\nUsed by all graduated filters in all tools.\nNo action if a graduated filter hasn't been activated. !TP_LOCALLAB_FEATVALUE;Feather gradient (Grad. Filters) @@ -2958,6 +3069,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 +3158,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 +3211,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 +3234,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 +3246,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 +3293,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 +3392,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 +3479,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 +3866,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 +4141,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 +4167,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 & 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_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 +4204,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 +4217,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 +4235,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..329925625 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;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 - 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 @@ -1402,21 +1409,26 @@ !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation !HISTORY_MSG_DEHAZE_SHOW_DEPTH_MAP;Dehaze - Show depth map !HISTORY_MSG_DEHAZE_STRENGTH;Dehaze - Strength +!HISTORY_MSG_DIRPYRDENOISE_GAIN;NR - Compensate for lightness !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 +1448,9 @@ !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_LOCAL_TMO_SATUR;Local Exp Fattal Saturation !HISTORY_MSG_METADATA_MODE;Metadata copy mode !HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold @@ -1481,6 +1496,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 +1540,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;Green 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 Threshold !HISTORY_NEWSNAPSHOT;Add !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !HISTORY_SNAPSHOT;Snapshot @@ -1619,7 +1656,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 +1776,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 +1824,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 +1853,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 +1909,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 +1941,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 +1952,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 +2020,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 +2029,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 +2117,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 +2137,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 +2260,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 +2327,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. @@ -2363,6 +2449,8 @@ !TP_DIRPYRDENOISE_LUMINANCE_DETAIL;Detail recovery !TP_DIRPYRDENOISE_LUMINANCE_FRAME;Luminance !TP_DIRPYRDENOISE_LUMINANCE_SMOOTHING;Luminance +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN;Compensate for lightness +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN_TOOLTIP;Alter the noise reduction strength based on the image lightness. Strength is reduced for dark images and increased for bright images. !TP_DIRPYRDENOISE_MAIN_COLORSPACE;Color space !TP_DIRPYRDENOISE_MAIN_COLORSPACE_LAB;L*a*b* !TP_DIRPYRDENOISE_MAIN_COLORSPACE_RGB;RGB @@ -2456,9 +2544,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 +2563,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 +2581,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 +2604,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 +2664,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 +2683,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 +2747,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 +2773,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 +2806,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 +2834,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 +2869,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 +2897,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 +2941,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 +2949,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 @@ -2866,6 +2963,7 @@ !TP_LOCALLAB_FATFRA;Dynamic Range Compression ƒ !TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal – uses the Fattal Tone-mapping algorithm. !TP_LOCALLAB_FATLEVEL;Sigma +!TP_LOCALLAB_FATSAT;Saturation control !TP_LOCALLAB_FATSHFRA;Dynamic Range Compression Mask ƒ !TP_LOCALLAB_FEATH_TOOLTIP;Gradient width as a percentage of the Spot diagonal\nUsed by all graduated filters in all tools.\nNo action if a graduated filter hasn't been activated. !TP_LOCALLAB_FEATVALUE;Feather gradient (Grad. Filters) @@ -2884,6 +2982,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 +3075,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 +3137,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 +3175,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 +3200,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 +3250,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 +3343,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 +3355,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 +3444,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 +3841,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 +4127,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 +4154,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 & 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 @@ -4043,6 +4200,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 +4216,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 +4234,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..32b5791dc 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,180 @@ 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_DIRPYRDENOISE_GAIN;NR - Compensate for lightness +!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_LOCAL_TMO_SATUR;Local Exp Fattal Saturation +!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;Green 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 Threshold +!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_DIRPYRDENOISE_MAIN_AUTO_GAIN;Compensate for lightness +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN_TOOLTIP;Alter the noise reduction strength based on the image lightness. Strength is reduced for dark images and increased for bright images. +!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_FATSAT;Saturation control +!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 & 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_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..9d5e352bd 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;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 - 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 @@ -2975,18 +2986,23 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !HISTORY_MSG_COMPLEX;Wavelet complexity !HISTORY_MSG_COMPLEXRETI;Retinex complexity !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation +!HISTORY_MSG_DIRPYRDENOISE_GAIN;NR - Compensate for lightness !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 +3011,9 @@ 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_LOCAL_TMO_SATUR;Local Exp Fattal Saturation !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 +3044,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 +3088,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;Green 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 Threshold !ICCPROFCREATOR_ILL_63;D63 : DCI-P3 Theater !ICCPROFCREATOR_PRIM_DCIP3;DCI-P3 !INSPECTOR_WINDOW_TITLE;Inspector @@ -3073,11 +3114,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 +3140,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 +3188,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 +3209,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,12 +3232,15 @@ 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. !TP_CROP_GTCENTEREDSQUARE;Centered square !TP_CROP_PPI;PPI !TP_DEHAZE_SATURATION;Saturation +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN;Compensate for lightness +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN_TOOLTIP;Alter the noise reduction strength based on the image lightness. Strength is reduced for dark images and increased for bright images. !TP_FILMNEGATIVE_BLUE;Blue ratio !TP_FILMNEGATIVE_BLUEBALANCE;Cool/Warm !TP_FILMNEGATIVE_COLORSPACE;Inversion color space: @@ -3161,12 +3253,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 +3301,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 +3328,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 +3354,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 +3387,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 +3415,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 +3450,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 +3478,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 +3522,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 +3530,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 @@ -3441,6 +3544,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !TP_LOCALLAB_FATFRA;Dynamic Range Compression ƒ !TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal – uses the Fattal Tone-mapping algorithm. !TP_LOCALLAB_FATLEVEL;Sigma +!TP_LOCALLAB_FATSAT;Saturation control !TP_LOCALLAB_FATSHFRA;Dynamic Range Compression Mask ƒ !TP_LOCALLAB_FEATH_TOOLTIP;Gradient width as a percentage of the Spot diagonal\nUsed by all graduated filters in all tools.\nNo action if a graduated filter hasn't been activated. !TP_LOCALLAB_FEATVALUE;Feather gradient (Grad. Filters) @@ -3459,6 +3563,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 +3656,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 +3718,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 +3756,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 +3781,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 +3831,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 +3924,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 +3936,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 +4025,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 +4162,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 +4261,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 & 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_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..33ffc861c 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 @@ -148,7 +150,7 @@ FILEBROWSER_POPUPPROCESSFAST;Mettre dans la file de traitement (Export Rapide) FILEBROWSER_POPUPPROFILEOPERATIONS;Opérations sur les profils FILEBROWSER_POPUPRANK;Rang FILEBROWSER_POPUPRANK0;Aucun -FILEBROWSER_POPUPRANK1;Rang 1 * +FILEBROWSER_POPUPRANK1;Rang 1 * FILEBROWSER_POPUPRANK2;Rang 2 ** FILEBROWSER_POPUPRANK3;Rang 3 *** FILEBROWSER_POPUPRANK4;Rang 4 **** @@ -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;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 - 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 @@ -3721,13 +3732,18 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_COMPLEX;Wavelet complexity !HISTORY_MSG_COMPLEXRETI;Retinex complexity !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation +!HISTORY_MSG_DIRPYRDENOISE_GAIN;NR - Compensate for lightness !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 +3752,9 @@ 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_LOCAL_TMO_SATUR;Local Exp Fattal Saturation !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 +3782,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 +3826,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;Green 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 Threshold !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 +3864,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 +3910,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 +3930,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 +3953,21 @@ 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_DIRPYRDENOISE_MAIN_AUTO_GAIN;Compensate for lightness +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN_TOOLTIP;Alter the noise reduction strength based on the image lightness. Strength is reduced for dark images and increased for bright images. +!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 +4004,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 +4023,40 @@ 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_FATSAT;Saturation control !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 +4069,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 +4097,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 +4193,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 & 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_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..c150994ee 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;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 - 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 @@ -2192,21 +2202,26 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation !HISTORY_MSG_DEHAZE_SHOW_DEPTH_MAP;Dehaze - Show depth map !HISTORY_MSG_DEHAZE_STRENGTH;Dehaze - Strength +!HISTORY_MSG_DIRPYRDENOISE_GAIN;NR - Compensate for lightness !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 +2241,9 @@ 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_LOCAL_TMO_SATUR;Local Exp Fattal Saturation !HISTORY_MSG_METADATA_MODE;Metadata copy mode !HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold @@ -2271,6 +2289,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 +2333,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;Green 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 Threshold !ICCPROFCREATOR_COPYRIGHT;Copyright: !ICCPROFCREATOR_COPYRIGHT_RESET_TOOLTIP;Reset to the default copyright, granted to 'RawTherapee, CC0'. !ICCPROFCREATOR_CUSTOM;Custom @@ -2403,6 +2443,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 +2462,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 +2475,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 +2511,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 +2524,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 +2565,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 +2613,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 +2647,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 +2674,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. @@ -2679,6 +2768,8 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_DIRPYRDENOISE_LUMINANCE_CONTROL;Luminance control !TP_DIRPYRDENOISE_LUMINANCE_CURVE;Luminance curve !TP_DIRPYRDENOISE_LUMINANCE_FRAME;Luminance +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN;Compensate for lightness +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN_TOOLTIP;Alter the noise reduction strength based on the image lightness. Strength is reduced for dark images and increased for bright images. !TP_DIRPYRDENOISE_MAIN_MODE;Mode !TP_DIRPYRDENOISE_MAIN_MODE_AGGRESSIVE;Aggressive !TP_DIRPYRDENOISE_MAIN_MODE_CONSERVATIVE;Conservative @@ -2723,9 +2814,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 +2826,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 +2838,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 +2879,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 +2921,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 +2947,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 +2980,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 +3008,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 +3043,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 +3071,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 +3115,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 +3123,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 @@ -3035,6 +3137,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_LOCALLAB_FATFRA;Dynamic Range Compression ƒ !TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal – uses the Fattal Tone-mapping algorithm. !TP_LOCALLAB_FATLEVEL;Sigma +!TP_LOCALLAB_FATSAT;Saturation control !TP_LOCALLAB_FATSHFRA;Dynamic Range Compression Mask ƒ !TP_LOCALLAB_FEATH_TOOLTIP;Gradient width as a percentage of the Spot diagonal\nUsed by all graduated filters in all tools.\nNo action if a graduated filter hasn't been activated. !TP_LOCALLAB_FEATVALUE;Feather gradient (Grad. Filters) @@ -3053,6 +3156,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 +3249,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 +3311,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 +3349,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 +3374,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 +3424,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 +3517,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 +3529,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 +3618,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 +3928,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 +4189,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 & 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_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..8bfbf0f42 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,177 @@ 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_DIRPYRDENOISE_GAIN;NR - Compensate for lightness +!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_LOCAL_TMO_SATUR;Local Exp Fattal Saturation +!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;Green 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 Threshold +!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_DIRPYRDENOISE_MAIN_AUTO_GAIN;Compensate for lightness +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN_TOOLTIP;Alter the noise reduction strength based on the image lightness. Strength is reduced for dark images and increased for bright images. +!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_FATSAT;Saturation control +!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 & 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_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..07ab9784b 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;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 - 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 @@ -1902,21 +2426,26 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation !HISTORY_MSG_DEHAZE_SHOW_DEPTH_MAP;Dehaze - Show depth map !HISTORY_MSG_DEHAZE_STRENGTH;Dehaze - Strength +!HISTORY_MSG_DIRPYRDENOISE_GAIN;NR - Compensate for lightness !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 +2465,9 @@ 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_LOCAL_TMO_SATUR;Local Exp Fattal Saturation !HISTORY_MSG_METADATA_MODE;Metadata copy mode !HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold @@ -1981,6 +2513,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 +2557,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;Green 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 Threshold !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 @@ -2571,6 +2722,8 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_DIRPYRDENOISE_LUMINANCE_CURVE;Luminance curve !TP_DIRPYRDENOISE_LUMINANCE_DETAIL;Detail recovery !TP_DIRPYRDENOISE_LUMINANCE_FRAME;Luminance +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN;Compensate for lightness +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN_TOOLTIP;Alter the noise reduction strength based on the image lightness. Strength is reduced for dark images and increased for bright images. !TP_DIRPYRDENOISE_MAIN_COLORSPACE;Color space !TP_DIRPYRDENOISE_MAIN_COLORSPACE_LAB;L*a*b* !TP_DIRPYRDENOISE_MAIN_COLORSPACE_RGB;RGB @@ -2636,9 +2789,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 +2801,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 +2815,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 +2830,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 +2874,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 +2891,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 +2948,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 +2974,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 +3007,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 +3035,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 +3070,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 +3098,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 +3142,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 +3150,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 @@ -3002,6 +3164,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_LOCALLAB_FATFRA;Dynamic Range Compression ƒ !TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal – uses the Fattal Tone-mapping algorithm. !TP_LOCALLAB_FATLEVEL;Sigma +!TP_LOCALLAB_FATSAT;Saturation control !TP_LOCALLAB_FATSHFRA;Dynamic Range Compression Mask ƒ !TP_LOCALLAB_FEATH_TOOLTIP;Gradient width as a percentage of the Spot diagonal\nUsed by all graduated filters in all tools.\nNo action if a graduated filter hasn't been activated. !TP_LOCALLAB_FEATVALUE;Feather gradient (Grad. Filters) @@ -3020,6 +3183,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 +3276,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 +3338,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 +3376,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 +3401,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 +3451,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 +3544,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 +3556,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 +3645,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 +3972,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 +4243,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 & 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_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..76e9befdd 100644 --- a/rtdata/languages/Nederlands +++ b/rtdata/languages/Nederlands @@ -1,20 +1,23 @@ -#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 +#018 2024-02-18 update to RawTherapee 5.10 by Paul Matthijsse +#100 +#101 @LANGUAGE_DISPLAY_NAME=Nederlands ABOUT_TAB_BUILD;Versie ABOUT_TAB_CREDITS;Credits @@ -22,7 +25,7 @@ ABOUT_TAB_LICENSE;Licentie ABOUT_TAB_RELEASENOTES;Uitgave-opmerkingen ABOUT_TAB_SPLASH;Splash ADJUSTER_RESET_TO_DEFAULT;Klik - terug naar standaardwaarde.\nCtrl+klik - terug naar laatst opgeslagen waarde. -BATCH_PROCESSING;Batch-verwerking +BATCH_PROCESSING;Groepsverwerking CURVEEDITOR_AXIS_IN;I: CURVEEDITOR_AXIS_LEFT_TAN;LT: CURVEEDITOR_AXIS_OUT;O: @@ -32,12 +35,12 @@ CURVEEDITOR_CURVE;Curve CURVEEDITOR_CURVES;Curven CURVEEDITOR_CUSTOM;Handmatig CURVEEDITOR_DARKS;Schaduwen -CURVEEDITOR_EDITPOINT_HINT;Activeer wijzigen van node in/uit waardes.\n\nRechts-klik op een node om het te selecteren.\nRechts-klik in een leeg gebied om de node te de-selecteren. +CURVEEDITOR_EDITPOINT_HINT;Activeer wijzigen van node in/uit-waarden.\n\nRechtsklik op een node om die te selecteren.\nRechtsklik in een leeg gebied om de node te deselecteren. CURVEEDITOR_HIGHLIGHTS;Hoge lichten CURVEEDITOR_LIGHTS;Lichten CURVEEDITOR_LINEAR;Lineair CURVEEDITOR_LOADDLGLABEL;Laad curve... -CURVEEDITOR_MINMAXCPOINTS;Min/Max controlepunten +CURVEEDITOR_MINMAXCPOINTS;Min/max-controlepunten CURVEEDITOR_NURBS;Kooicurve CURVEEDITOR_PARAMETRIC;Parametrisch CURVEEDITOR_SAVEDLGLABEL;Bewaar curve... @@ -52,23 +55,23 @@ DIRBROWSER_FOLDERS;Mappen DONT_SHOW_AGAIN;Dit bericht niet meer tonen DYNPROFILEEDITOR_DELETE;Verwijder DYNPROFILEEDITOR_EDIT;Wijzig -DYNPROFILEEDITOR_EDIT_RULE;Wijzig Dynamisch Profielregel -DYNPROFILEEDITOR_ENTRY_TOOLTIP;Het zoeken is niet hoofdlettergevoelig.\nGebruik het "re:" voorvoegsel om\n een reguliere expressie uit te voeren +DYNPROFILEEDITOR_EDIT_RULE;Wijzig dynamische profielregel +DYNPROFILEEDITOR_ENTRY_TOOLTIP;Het zoeken is niet hoofdlettergevoelig.\nGebruik het "re:" voorvoegsel om\n een reguliere expressie in te voeren DYNPROFILEEDITOR_IMGTYPE_ANY;Alles DYNPROFILEEDITOR_IMGTYPE_HDR;HDR -DYNPROFILEEDITOR_IMGTYPE_PS;Pixel Shift +DYNPROFILEEDITOR_IMGTYPE_PS;Pixel-shift DYNPROFILEEDITOR_IMGTYPE_STD;Standaard DYNPROFILEEDITOR_MOVE_DOWN;Naar beneden DYNPROFILEEDITOR_MOVE_UP;Naar boven DYNPROFILEEDITOR_NEW;Nieuw -DYNPROFILEEDITOR_NEW_RULE;Nieuw Dynamisch Profielregelegel +DYNPROFILEEDITOR_NEW_RULE;Nieuwe dynamische profielregel DYNPROFILEEDITOR_PROFILE;Profiel verwerken EDITWINDOW_TITLE;Bewerk afbeelding -EDIT_OBJECT_TOOLTIP;Toont een widget in het voorbeeld scherm waarmee de werking van het gereedschap kan worden aangepast. -EDIT_PIPETTE_TOOLTIP;Voeg een punt toe aan de curve door de Ctrl toets ingedrukt te houden en tegelijkertijd te links-klikken op de gewenste plek op het voorbeeld.\nOm een punt te wijzigen, hou de Ctrl toets ingedrukt en links-klik tegelijkertijd op het gewenste gebied in het voorbeeld, en laat daarna de Ctrl toets los (behalve wanneer fijne controle is gewenst), blijf de linker muis knop ingedrukt houden en beweeg de muis naar boven of beneden om dit punt te verschuiven op de curve. +EDIT_OBJECT_TOOLTIP;Toont een widget in het voorbeeldscherm waarmee de werking van het gereedschap kan worden aangepast. +EDIT_PIPETTE_TOOLTIP;Voeg een punt aan de curve toe met Ctrl+muisklik op de gewenste plek in het voorbeeld.\nKlik op een punt in de tooncurve om deze te selecteren (wordt rood), verplaats 'm vervolgens met de linkermuisknop ingedrukt.\n Hou de Ctrl-toets ingedrukt voor fijnmazige controle. EXIFFILTER_APERTURE;Diafragma EXIFFILTER_CAMERA;Camera -EXIFFILTER_EXPOSURECOMPENSATION;Belichtingscompensatie (EV) +EXIFFILTER_EXPOSURECOMPENSATION;Belichtingscompensatie (LW) EXIFFILTER_FILETYPE;Bestandstype EXIFFILTER_FOCALLEN;Brandpuntsafstand EXIFFILTER_IMAGETYPE;Type afbeelding @@ -87,8 +90,8 @@ EXIFPANEL_REMOVE;Verwijder EXIFPANEL_REMOVEHINT;Verwijder geselecteerde tags in doelbestand EXIFPANEL_RESET;Herstel EXIFPANEL_RESETALL;Herstel alles -EXIFPANEL_RESETALLHINT;Zet alle tags terug naar oorspronkelijke waarden -EXIFPANEL_RESETHINT;Zet geselecteerde tags terug naar oorspronkelijke waarden +EXIFPANEL_RESETALLHINT;Zet alle tags terug naar hun oorspronkelijke waarden +EXIFPANEL_RESETHINT;Zet geselecteerde tags terug naar hun oorspronkelijke waarden EXIFPANEL_SHOWALL;Toon alles EXIFPANEL_SUBDIRECTORY;Submap EXPORT_BYPASS;Verwerkingsstappen die worden overgeslagen @@ -96,8 +99,8 @@ EXPORT_BYPASS_ALL;Alles selecteren/deselecteren EXPORT_BYPASS_DEFRINGE;Verzachten niet toepassen EXPORT_BYPASS_DIRPYRDENOISE;Ruisonderdrukking niet toepassen EXPORT_BYPASS_DIRPYREQUALIZER;Detailcontrast niet toepassen -EXPORT_BYPASS_EQUALIZER;Wavelet Niveau niet toepassen -EXPORT_BYPASS_RAW_CA;Correctie Chromatische Aberratie niet toepassen [raw] +EXPORT_BYPASS_EQUALIZER;Wavelet-niveaus niet toepassen +EXPORT_BYPASS_RAW_CA;Correctie Chromatische afwijking niet toepassen [raw] EXPORT_BYPASS_RAW_CCSTEPS;Kleurfoutonderdrukking niet toepassen [raw] EXPORT_BYPASS_RAW_DCB_ENHANCE;DCB-verbetering niet toepassen [raw] EXPORT_BYPASS_RAW_DCB_ITERATIONS;DCB-herhalingen niet toepassen [raw] @@ -105,7 +108,7 @@ EXPORT_BYPASS_RAW_DF;Donkerframe niet toepassen [raw] EXPORT_BYPASS_RAW_FF;Vlakveld niet toepassen [raw] EXPORT_BYPASS_RAW_GREENTHRESH;Groenbalans niet toepassen [raw] EXPORT_BYPASS_RAW_LINENOISE;Lijnruisfilter niet toepassen [raw] -EXPORT_BYPASS_RAW_LMMSE_ITERATIONS;LMMSE Verbetering niet toeppassen [raw] +EXPORT_BYPASS_RAW_LMMSE_ITERATIONS;LMMSE-verbetering niet toeppassen [raw] EXPORT_BYPASS_SHARPENEDGE;Randen verscherpen niet toepassen EXPORT_BYPASS_SHARPENING;Verscherpen niet toepassen EXPORT_BYPASS_SHARPENMICRO;Microcontrast niet toepassen @@ -117,7 +120,7 @@ EXPORT_PIPELINE;Verwerken EXPORT_PUTTOQUEUEFAST;Plaats in verwerkingsrij voor Snelle Export EXPORT_RAW_DMETHOD;Demozaïekmethode EXPORT_USE_FAST_PIPELINE;Snel (volledige verwerking op gewijzigd formaat van de afbeelding) -EXPORT_USE_FAST_PIPELINE_TOOLTIP;Gebruikt een speciale verwerkingslijn waarbij kwaliteit ten koste gaat van snelheid. Het formaat van de afbeelding wordt zo snel mogelijk gewijzigd, ipv aan het eind van de verwerking. De snelheidswinst is aanzienlijk, maar de kwaliteit van de afbeelding zal minder zijn. +EXPORT_USE_FAST_PIPELINE_TOOLTIP;Gebruikt een speciale verwerkingslijn waarbij kwaliteit ten koste gaat van snelheid. Het formaat van de afbeelding wordt zo snel mogelijk gewijzigd, in plaats van aan het eind van de verwerking. De snelheidswinst is aanzienlijk, maar de kwaliteit van de afbeelding zal minder zijn. EXPORT_USE_NORMAL_PIPELINE;Standaard (wijzigt formaat aan het eind) EXTPROGTARGET_1;raw EXTPROGTARGET_2;verwerkingsrij @@ -125,13 +128,13 @@ FILEBROWSER_APPLYPROFILE;Pas profiel toe FILEBROWSER_APPLYPROFILE_PARTIAL;Pas profiel toe (gedeeltelijk) FILEBROWSER_AUTODARKFRAME;Automatisch donkerframe FILEBROWSER_AUTOFLATFIELD;Selecteer automatisch vlakveldopname -FILEBROWSER_BROWSEPATHBUTTONHINT;Klik om de opgegeven map te laden, en het zoekfilter opnieuw toe te passen. -FILEBROWSER_BROWSEPATHHINT;Typ het pad naar de doelmap.\nCtrl-O markeer het pad in het tekstveld.\nEnter / Ctrl-Enter open de map.\nEsc maak het tekstveld leeg.\nShift-Esc verwijder markering.\n\n\nSneltoetsen:\n ~ - gebruikers home directory\n ! - gebruikers afbeeldingen map +FILEBROWSER_BROWSEPATHBUTTONHINT;Klik om de opgegeven map te laden en het zoekfilter opnieuw toe te passen. +FILEBROWSER_BROWSEPATHHINT;Typ het pad naar de doelmap.\nCtrl+O markeer het pad in het tekstveld.\nEnter / Ctrl+Enter open de map.\nEsc maak het tekstveld leeg.\nShift+Esc verwijder markering.\n\nsneltoetsen:\n ~ - thuismap van de gebruiker\n ! - afbeeldingenmap van de gebruiker FILEBROWSER_CACHE;Cache FILEBROWSER_CACHECLEARFROMFULL;Wis alles inclusief opgeslagen profielen FILEBROWSER_CACHECLEARFROMPARTIAL;Wis alles behalve opgeslagen profielen FILEBROWSER_CLEARPROFILE;Verwijder profiel -FILEBROWSER_COLORLABEL_TOOLTIP;Kleur label\n\nGebruik keuzemenu of nSneltoets:\nShift-Ctrl-0 Geen kleur\nShift-Ctrl-1 Rood\nShift-Ctrl-2 Geel\nShift-Ctrl-3 Groen\nShift-Ctrl-4 Blauw\nShift-Ctrl-5 Paars +FILEBROWSER_COLORLABEL_TOOLTIP;Kleur label\n\nGebruik keuzemenu of nSneltoets:\nShift+Ctrl+0 Geen kleur\nShift+Ctrl+1 Rood\nShift+Ctrl+2 Geel\nShift+Ctrl+3 Groen\nShift+Ctrl+4 Blauw\nShift+Ctrl+5 Paars FILEBROWSER_COPYPROFILE;Kopieer profiel FILEBROWSER_CURRENT_NAME;Huidige naam: FILEBROWSER_DARKFRAME;Donkerframe @@ -146,11 +149,11 @@ FILEBROWSER_FLATFIELD;Vlakveld FILEBROWSER_MOVETODARKFDIR;Verplaats naar map met donkerframes FILEBROWSER_MOVETOFLATFIELDDIR;Verplaats naar vlakveldmap FILEBROWSER_NEW_NAME;Nieuwe naam: -FILEBROWSER_OPENDEFAULTVIEWER;Windows standaard viewer (verwerkingsrij) +FILEBROWSER_OPENDEFAULTVIEWER;Windows standaardfoto-viewer (verwerkingsrij) FILEBROWSER_PARTIALPASTEPROFILE;Gedeeltelijk plakken FILEBROWSER_PASTEPROFILE;Plak profiel FILEBROWSER_POPUPCANCELJOB;Verwijder uit verwerkingsrij -FILEBROWSER_POPUPCOLORLABEL;Kleur label +FILEBROWSER_POPUPCOLORLABEL;Labelkleur FILEBROWSER_POPUPCOLORLABEL0;Label: Geen FILEBROWSER_POPUPCOLORLABEL1;Label: Rood FILEBROWSER_POPUPCOLORLABEL2;Label: Geel @@ -159,8 +162,8 @@ FILEBROWSER_POPUPCOLORLABEL4;Label: Blauw FILEBROWSER_POPUPCOLORLABEL5;Label: Paars FILEBROWSER_POPUPCOPYTO;Kopieer naar... FILEBROWSER_POPUPFILEOPERATIONS;Bestandsbewerkingen -FILEBROWSER_POPUPMOVEEND;Naar eind van verwerkingsrij -FILEBROWSER_POPUPMOVEHEAD;Naar begin verwerkingsrij +FILEBROWSER_POPUPMOVEEND;Naar einde van de verwerkingsrij +FILEBROWSER_POPUPMOVEHEAD;Naar begin van de verwerkingsrij FILEBROWSER_POPUPMOVETO;Verplaats naar... FILEBROWSER_POPUPOPEN;Open FILEBROWSER_POPUPOPENINEDITOR;Open in Bewerkingsvenster @@ -182,53 +185,53 @@ FILEBROWSER_POPUPTRASH;Verplaats naar prullenbak FILEBROWSER_POPUPUNRANK;Verwijder sterwaardering 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_QUERYHINT;Zoeken op bestandsnamen. Ondersteunt gedeeltelijke bestandsnamen. Scheid de zoektermen door komma's, bv.\n1001,1004,1199 (zonder spaties!)\n\nSluit zoektermen uit door er != voor te plaatsen bijvoorbeeld\n!=1001,1004,1199 \n\nSneltoets:\nCtrl+F - focus op 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... FILEBROWSER_SELECTFLATFIELD;Kies vlakveldopname... -FILEBROWSER_SHOWCOLORLABEL1HINT;Toon foto's met label Rood\nSneltoets: Alt-1 -FILEBROWSER_SHOWCOLORLABEL2HINT;Toon foto's met label Geel\nSneltoets: Alt-2 -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_SHOWCOLORLABEL1HINT;Toon foto's met label Rood\nSneltoets: Alt+1 +FILEBROWSER_SHOWCOLORLABEL2HINT;Toon foto's met label Geel\nSneltoets: Alt+2 +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_SHOWEXIFINFO;Toon EXIF-info +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_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_SHOWORIGINALHINT;Toon alleen originele afbeelding.\n\nAls er meerdere afbeeldingen zijn met dezelfde naam maar verschillende extensies, dan wordt de afbeelding gekozen waarvan de extensie het hoogst staat in de lijst met extensies in Voorkeuren > Bestandsnavigator > Extensies +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: 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 FILECHOOSER_FILTER_COLPROF;Kleurprofielen -FILECHOOSER_FILTER_CURVE;Curve bestanden -FILECHOOSER_FILTER_LCP;Lens correctieprofielen +FILECHOOSER_FILTER_CURVE;Curve-bestanden +FILECHOOSER_FILTER_LCP;Lenscorrectieprofielen FILECHOOSER_FILTER_PP;Profiel verwerken -FILECHOOSER_FILTER_SAME;Hetzelfe formaat als huidige foto -FILECHOOSER_FILTER_TIFF;TIFF bestanden +FILECHOOSER_FILTER_SAME;Hetzelfde formaat als huidige foto +FILECHOOSER_FILTER_TIFF;TIFF-bestanden GENERAL_ABOUT;Over RawTherapee GENERAL_AFTER;Na GENERAL_APPLY;Toepassen -GENERAL_ASIMAGE;Als Afbeelding +GENERAL_ASIMAGE;Als afbeelding GENERAL_AUTO;Automatisch GENERAL_BEFORE;Voor GENERAL_CANCEL;Annuleren @@ -256,10 +259,10 @@ GENERAL_WARNING;Waarschuwing GIMP_PLUGIN_INFO;Welkom bij de RawTherapee GIMP plug-in!\nAls uw bewerking gereed is, sluit dan het hoofdvenster van RawTherapee en uw afbeelding wordt automatisch in GIMP geladen. HISTOGRAM_TOOLTIP_B;Toon/verberg blauw histogram HISTOGRAM_TOOLTIP_BAR;Toon/verberg RGB-indicatie\nRechtermuisklik op foto om te starten/stoppen -HISTOGRAM_TOOLTIP_CHRO;Toon/Verberg Chromaticiteit histogram +HISTOGRAM_TOOLTIP_CHRO;Toon/Verberg chromaticiteitshistogram HISTOGRAM_TOOLTIP_G;Toon/verberg groen histogram HISTOGRAM_TOOLTIP_L;Toon/verberg CIELAB-luminantiehistogram -HISTOGRAM_TOOLTIP_MODE;Wissel tussen lineair, log-lineair and log-log schalen van het histogram. +HISTOGRAM_TOOLTIP_MODE;Wissel tussen lineair, log-lineair en log-log schalen van het histogram. HISTOGRAM_TOOLTIP_R;Toon/verberg rood histogram HISTORY_CHANGED;Veranderd HISTORY_CUSTOMCURVE;Handmatig @@ -272,40 +275,40 @@ HISTORY_MSG_5;Helderheid HISTORY_MSG_6;Contrast HISTORY_MSG_7;Schaduwen HISTORY_MSG_8;Belichtingscompensatie -HISTORY_MSG_9;Hoge lichten Comprimeren +HISTORY_MSG_9;Hoge lichten comprimeren HISTORY_MSG_10;Schaduwcompressie HISTORY_MSG_11;Tooncurve 1 HISTORY_MSG_12;Automatische belichting HISTORY_MSG_13;Drempel HISTORY_MSG_14;L*a*b* - Helderheid HISTORY_MSG_15;L*a*b* - Contrast -HISTORY_MSG_19;L*a*b* - L* curve +HISTORY_MSG_19;L*a*b* - L*-curve HISTORY_MSG_20;Verscherpen -HISTORY_MSG_21;OSM - Straal -HISTORY_MSG_22;OSM - Hoeveelheid -HISTORY_MSG_23;OSM - Drempel -HISTORY_MSG_24;OSM - Randen -HISTORY_MSG_25;OSM - Randen Straal -HISTORY_MSG_26;OSM - Randtolerantie -HISTORY_MSG_27;OSM - Halocontrole -HISTORY_MSG_28;OSM - Halo hoeveelheid +HISTORY_MSG_21;Onscherpmasker - Straal +HISTORY_MSG_22;Onscherpmasker - Hoeveelheid +HISTORY_MSG_23;Onscherpmasker - Drempel +HISTORY_MSG_24;Onscherpmasker - Randen +HISTORY_MSG_25;Onscherpmasker - Randen straal +HISTORY_MSG_26;Onscherpmasker - Randtolerantie +HISTORY_MSG_27;Onscherpmasker - Halocontrole +HISTORY_MSG_28;Onscherpmasker - Halo hoeveelheid HISTORY_MSG_29;Verscherpingsmethode HISTORY_MSG_30;RL-verscherping - Straal HISTORY_MSG_31;RL-verscherping - Hoeveelheid HISTORY_MSG_32;RL-verscherping - Demping HISTORY_MSG_33;RL-verscherping - Herhaling -HISTORY_MSG_34;Lensvervorming correctie -HISTORY_MSG_35;Vignettering correctie -HISTORY_MSG_36;CA correctie -HISTORY_MSG_37;Automatische Niveaus -HISTORY_MSG_38;Witbalans Methode +HISTORY_MSG_34;Lensvervormingscorrectie +HISTORY_MSG_35;Vignetteringscorrectie +HISTORY_MSG_36;CA-correctie +HISTORY_MSG_37;Automatische niveaus +HISTORY_MSG_38;Witbalans - Methode HISTORY_MSG_39;Kleurtemperatuur HISTORY_MSG_40;Witbalans Groentint HISTORY_MSG_41;Tooncurve Mode 1 HISTORY_MSG_42;Tooncurve 2 HISTORY_MSG_43;Tooncurve Mode 2 -HISTORY_MSG_48;Gebruik DCP's toon curve -HISTORY_MSG_49;DCP Illuminant +HISTORY_MSG_48;Gebruik DCP-tooncurve +HISTORY_MSG_49;DCP-illuminant HISTORY_MSG_50;Schaduwen/hoge lichten HISTORY_MSG_51;S/HL - Hoge lichten HISTORY_MSG_52;S/HL - Schaduwen @@ -322,12 +325,12 @@ HISTORY_MSG_63;Snapshot HISTORY_MSG_64;Bijsnijden HISTORY_MSG_65;CA-correctie HISTORY_MSG_66;Hoge lichten herstellen -HISTORY_MSG_68;HL herstellen methode +HISTORY_MSG_68;HL herstellen - methode HISTORY_MSG_69;Kleurwerkruimte HISTORY_MSG_70;Uitvoerkleurruimte HISTORY_MSG_71;Invoerkleurruimte HISTORY_MSG_72;VC - Hoeveelheid -HISTORY_MSG_73;Kleurkanaal Mixer +HISTORY_MSG_73;Kleurkanaalmixer HISTORY_MSG_74;Schalingsinstelling HISTORY_MSG_75;Schalingsmethode HISTORY_MSG_76;Exif-metadata @@ -337,26 +340,26 @@ HISTORY_MSG_80;Schalen - Hoogte HISTORY_MSG_81;Schalen geactiveerd HISTORY_MSG_82;Profiel veranderd HISTORY_MSG_84;Perspectiefcorrectie -HISTORY_MSG_85;Lenscorrectie Profiel -HISTORY_MSG_86;RGB Curven - Luminos. Mode +HISTORY_MSG_85;Lenscorrectieprofiel +HISTORY_MSG_86;RGB-curven - Luminos. Modus HISTORY_MSG_87;Spot-ruisonderdrukking -HISTORY_MSG_88;Spot-ruis drempel +HISTORY_MSG_88;Spot ruisdrempel HISTORY_MSG_89;Ruisonderdrukking -HISTORY_MSG_90;RO -Luminantie -HISTORY_MSG_91;RO -Chrominantie leidend -HISTORY_MSG_92;RO -Gamma -HISTORY_MSG_93;DC waarde +HISTORY_MSG_90;RO - Luminantie +HISTORY_MSG_91;RO - Chrominantie leidend +HISTORY_MSG_92;RO - Gamma +HISTORY_MSG_93;DC-waarde HISTORY_MSG_94;Detailcontrast -HISTORY_MSG_95;L*a*b* -Chromaticiteit -HISTORY_MSG_96;L*a*b* -'a*'-curve -HISTORY_MSG_97;L*a*b* -'b*'-curve +HISTORY_MSG_95;L*a*b* - Chromaticiteit +HISTORY_MSG_96;L*a*b* - 'a*'-curve +HISTORY_MSG_97;L*a*b* - 'b*'-curve HISTORY_MSG_98;Demozaïekmethode -HISTORY_MSG_99;Hete pixels filter -HISTORY_MSG_100;RGB Verzadiging +HISTORY_MSG_99;Hetepixels-filter +HISTORY_MSG_100;RGB-verzadiging HISTORY_MSG_101;HSV - Tint HISTORY_MSG_102;HSV - Verzadiging HISTORY_MSG_103;HSV - Waarde -HISTORY_MSG_104;HSV Balans +HISTORY_MSG_104;HSV-balans HISTORY_MSG_105;Randverzachting HISTORY_MSG_106;RV - Straal HISTORY_MSG_107;RV - Drempel @@ -366,22 +369,22 @@ HISTORY_MSG_110;Herschalen van: HISTORY_MSG_111;L*a*b* - Vermijd kleurversch. HISTORY_MSG_112;--unused-- HISTORY_MSG_113;L*a*b* - Beschermen -HISTORY_MSG_114;DCB Herhalingen +HISTORY_MSG_114;DCB-herhalingen HISTORY_MSG_115;Valse kleuren onderdrukken HISTORY_MSG_116;Verbeterd DCB HISTORY_MSG_117;RAW CA-correctie - Rood HISTORY_MSG_118;RAW CA-correctie - Blauw HISTORY_MSG_119;Lijnruis -HISTORY_MSG_120;Groenbalans drempel +HISTORY_MSG_120;Drempel groenbalans HISTORY_MSG_121;RAW CA-correctie - Auto HISTORY_MSG_122;Donkerframe - Autom. selectie HISTORY_MSG_123;Donkerframe - Bestand -HISTORY_MSG_124;Witpunt correctie +HISTORY_MSG_124;Witpuntcorrectie HISTORY_MSG_126;Vlakveld - Bestand HISTORY_MSG_127;Vlakveld - Autom. selectie HISTORY_MSG_128;Vlakveld - Verzachten straal HISTORY_MSG_129;Vlakveld - Verzachten type -HISTORY_MSG_130;Auto correctie lensvervorming +HISTORY_MSG_130;Autocorrectie lensvervorming HISTORY_MSG_137;Zwartniveau - Groen 1 HISTORY_MSG_138;Zwartniveau - Rood HISTORY_MSG_139;Zwartniveau - Blauw @@ -402,7 +405,7 @@ HISTORY_MSG_153;LV - Verzadigde tinten HISTORY_MSG_154;LV - Bescherm huidtinten HISTORY_MSG_155;LV - Vermijd verschuiving HISTORY_MSG_156;LV - Koppel pastel/verzadig -HISTORY_MSG_157;LV - P/S Drempel +HISTORY_MSG_157;LV - P/S-drempel HISTORY_MSG_158;TK - Sterkte HISTORY_MSG_159;TK - Randen HISTORY_MSG_160;TK - Schaal @@ -413,75 +416,75 @@ HISTORY_MSG_164;RGB-curve - G HISTORY_MSG_165;RGB-curve - B HISTORY_MSG_166;Belichting - Teruggezet HISTORY_MSG_167;Demozaïekmethode -HISTORY_MSG_168;L*a*b* - CC curve -HISTORY_MSG_169;L*a*b* - CH curve -HISTORY_MSG_170;Levendigheid curve -HISTORY_MSG_171;L*a*b* - LC curve +HISTORY_MSG_168;L*a*b* - CC-curve +HISTORY_MSG_169;L*a*b* - CH-curve +HISTORY_MSG_170;Levendigheidscurve +HISTORY_MSG_171;L*a*b* - LC-curve HISTORY_MSG_172;L*a*b* - Beperk LC HISTORY_MSG_173;NR - Detailbehoud HISTORY_MSG_174;CIECAM02 -HISTORY_MSG_175;CAM02 - CAT02 toepassing -HISTORY_MSG_176;CAM02 - Weergave omgeving -HISTORY_MSG_177;CAM02 - Opname Luminositeit -HISTORY_MSG_178;CAM02 - Weergave Luminositeit -HISTORY_MSG_179;CAM02 - Witpunt model +HISTORY_MSG_175;CAM02 - CAT02-toepassing +HISTORY_MSG_176;CAM02 - Weergave-omgeving +HISTORY_MSG_177;CAM02 - Luminositeit scène (opname) +HISTORY_MSG_178;CAM02 - Luminositeit weergave (bv. monitor) +HISTORY_MSG_179;CAM02 - Witpuntmodel HISTORY_MSG_180;CAM02 - Lichtheid (J) HISTORY_MSG_181;CAM02 - Chroma (C) HISTORY_MSG_182;CAM02 - Automatisch CAT02 HISTORY_MSG_183;CAM02 - Contrast (J) -HISTORY_MSG_184;CAM02 - Opname omgeving -HISTORY_MSG_185;CAM02 - Gamut controle +HISTORY_MSG_184;CAM02 - Scène-omgeving +HISTORY_MSG_185;CAM02 - Beperk kleurenscala HISTORY_MSG_186;CAM02 - Algoritme -HISTORY_MSG_187;CAM02 - Rode/Huidtint bescher. +HISTORY_MSG_187;CAM02 - Rode/huidtint. bescher. HISTORY_MSG_188;CAM02 - Helderheid (Q) HISTORY_MSG_189;CAM02 - Contrast (Q) HISTORY_MSG_190;CAM02 - Verzadiging (S) HISTORY_MSG_191;CAM02 - Kleurrijkheid (M) HISTORY_MSG_192;CAM02 - Tint (h) -HISTORY_MSG_193;CAM02 - Toon curve 1 -HISTORY_MSG_194;CAM02 - Toon curve 2 -HISTORY_MSG_195;CAM02 - Toon curve 1 -HISTORY_MSG_196;CAM02 - Toon curve 2 -HISTORY_MSG_197;CAM02 - Kleur curve -HISTORY_MSG_198;CAM02 - Kleur curve -HISTORY_MSG_199;CAM02 - Toont in histogram -HISTORY_MSG_200;CAM02 - Tonemapping +HISTORY_MSG_193;CAM02 - Tooncurve 1 +HISTORY_MSG_194;CAM02 - Tooncurve 2 +HISTORY_MSG_195;CAM02 - Tooncurve 1 +HISTORY_MSG_196;CAM02 - Tooncurve 2 +HISTORY_MSG_197;CAM02 - Kleurcurve +HISTORY_MSG_198;CAM02 - Kleurcurve +HISTORY_MSG_199;CAM02 - Toon in histogram +HISTORY_MSG_200;CAM02 - Toonmappen HISTORY_MSG_201;RO - Chromin. rood-groen HISTORY_MSG_202;RO - Chromin. blauw-geel HISTORY_MSG_203;NR - Kleurruimte -HISTORY_MSG_204;LMMSE Verbetering +HISTORY_MSG_204;LMMSE-verbetering HISTORY_MSG_205;CAM02 hete/dode pixels -HISTORY_MSG_206;CAT02 - Opname Lum. Auto -HISTORY_MSG_207;Verzachten Tint curve -HISTORY_MSG_208;WB - Blauw/Rood balans +HISTORY_MSG_206;CAT02 - Scène Lum. Auto +HISTORY_MSG_207;Verzachten tintcurve +HISTORY_MSG_208;WB - Blauw/Rood-balans HISTORY_MSG_210;GF - Hoek -HISTORY_MSG_211;Grijsverloop Filter +HISTORY_MSG_211;Grijsverloopfilter HISTORY_MSG_212;VF - Sterkte -HISTORY_MSG_213;Vignettering Filter -HISTORY_MSG_214;Zwart-Wit +HISTORY_MSG_213;Vignetteringsfilter +HISTORY_MSG_214;Zwart-wit HISTORY_MSG_215;ZW - KM - Rood HISTORY_MSG_216;ZW - KM - Groen HISTORY_MSG_217;ZW - KM - Blauw HISTORY_MSG_218;ZW - Gamma - Rood HISTORY_MSG_219;ZW - Gamma - Groen HISTORY_MSG_220;ZW - Gamma - Blauw -HISTORY_MSG_221;ZW - Kleur Filter +HISTORY_MSG_221;ZW - Filterkleur HISTORY_MSG_222;ZW - Voorinstelling HISTORY_MSG_223;ZW - KM - Oranje HISTORY_MSG_224;ZW - KM - Geel HISTORY_MSG_225;ZW - KM - Cyaan HISTORY_MSG_226;ZW - KM - Magenta HISTORY_MSG_227;ZW - KM - Paars -HISTORY_MSG_228;ZW - Luminantie Mixer -HISTORY_MSG_229;ZW - Luminantie Mixer -HISTORY_MSG_230;ZW - Mode -HISTORY_MSG_231;ZW - 'Voor' curve -HISTORY_MSG_232;ZW - 'Voor' curve type -HISTORY_MSG_233;ZW - 'Na' curve -HISTORY_MSG_234;ZW - 'Na' curve type -HISTORY_MSG_235;B&W - CM - Auto +HISTORY_MSG_228;ZW - Luminantiemixer +HISTORY_MSG_229;ZW - Luminantiemixer +HISTORY_MSG_230;ZW - Modus +HISTORY_MSG_231;ZW - 'Voor'-curve +HISTORY_MSG_232;ZW - Type 'Voor'-curve +HISTORY_MSG_233;ZW - 'Na'-curve +HISTORY_MSG_234;ZW - Type 'Na' curve +HISTORY_MSG_235;B&W - CM - Auto HISTORY_MSG_236;- -HISTORY_MSG_237;B&W - CM +HISTORY_MSG_237;BW - CM HISTORY_MSG_238;GF - Straal HISTORY_MSG_239;GF - Sterkte HISTORY_MSG_240;GF - Centrum @@ -490,22 +493,22 @@ HISTORY_MSG_242;VF - Vorm HISTORY_MSG_243;VC - Straal HISTORY_MSG_244;VC - Sterkte HISTORY_MSG_245;VC - Centrum -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_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;DC - Drempel HISTORY_MSG_251;ZW - Algoritme HISTORY_MSG_252;DC - Huidtonen -HISTORY_MSG_253;DC - Verminder artefacten +HISTORY_MSG_253;DC - Verminder onregelmatigheden HISTORY_MSG_254;DC - Huidtint HISTORY_MSG_255;DC - Algoritme HISTORY_MSG_256;NR - Mediaan - Type HISTORY_MSG_257;Kleurtint -HISTORY_MSG_258;KT - Kleur curve +HISTORY_MSG_258;KT - Kleurcurve HISTORY_MSG_259;KT - Dekking -HISTORY_MSG_260;KT - a*[b*] Dekking +HISTORY_MSG_260;KT - a*[b*]-dekking HISTORY_MSG_261;KT - Methode -HISTORY_MSG_262;KT - b* Dekking +HISTORY_MSG_262;KT - b*-dekking HISTORY_MSG_263;KT - Schaduwen - Rood HISTORY_MSG_264;KT - Schaduwen - Groen HISTORY_MSG_265;KT - Schaduwen - Blauw @@ -522,131 +525,131 @@ HISTORY_MSG_277;--unused-- HISTORY_MSG_278;KT - Behoud luminantie HISTORY_MSG_279;KT - Schaduwen HISTORY_MSG_280;KT - Hoge lichten -HISTORY_MSG_281;KT - Verz. sterkte -HISTORY_MSG_282;KT - Verz. drempel +HISTORY_MSG_281;KT - Sterkte verzadiging +HISTORY_MSG_282;KT - Drempel verzadiging HISTORY_MSG_283;KT - Sterkte -HISTORY_MSG_284;KT - Auto verz. bescherming +HISTORY_MSG_284;KT - Auto-bescherming verzadiging HISTORY_MSG_285;RO - Mediaan - Methode HISTORY_MSG_286;RO - Mediaan - Type HISTORY_MSG_287;RO - Mediaan - Herhalingen -HISTORY_MSG_288;Vlakveld - Clip Controle -HISTORY_MSG_289;Vlakveld - Clip Controle - Auto +HISTORY_MSG_288;Vlakveld - Afkapcontrole +HISTORY_MSG_289;Vlakveld - Afkapcontrole - Auto HISTORY_MSG_290;Zwartniveau - Rood HISTORY_MSG_291;Zwartniveau - Groen HISTORY_MSG_292;Zwartniveau - Blauw -HISTORY_MSG_293;Film Simuleren +HISTORY_MSG_293;Filmsimulatie HISTORY_MSG_294;Film - Sterkte HISTORY_MSG_295;Film - Film -HISTORY_MSG_296;RO - Luminantie curve -HISTORY_MSG_297;NR - Modus -HISTORY_MSG_298;Dode pixels filter -HISTORY_MSG_299;RO - Chrominantie curve -HISTORY_MSG_301;RO - Luma controle -HISTORY_MSG_302;RO - Chroma methode -HISTORY_MSG_303;RO - Chroma methode -HISTORY_MSG_304;W niveau -HISTORY_MSG_305;W niveau -HISTORY_MSG_306;W N° niveau -HISTORY_MSG_307;W Ch niveau -HISTORY_MSG_308;W richting -HISTORY_MSG_309;W tegels -HISTORY_MSG_310;W Tinten lucht -HISTORY_MSG_311;W Max niveaus -HISTORY_MSG_312;W Schaduwen drempel -HISTORY_MSG_313;W Pastel Verzadigd -HISTORY_MSG_314;W Artefacten blauwe lucht -HISTORY_MSG_315;W Contrast Rest afbeelding -HISTORY_MSG_316;W Tinten huid -HISTORY_MSG_317;W Tinten reeks Huid -HISTORY_MSG_318;W Hoge lichten niveau -HISTORY_MSG_319;W Hoge lichten reeks -HISTORY_MSG_320;W Schaduwen reeks -HISTORY_MSG_321;W Schaduwen niveau -HISTORY_MSG_322;W kleurverschuiving -HISTORY_MSG_323;W Chroma niveau -HISTORY_MSG_324;W Chroma pastel -HISTORY_MSG_325;W Chroma verzadigd -HISTORY_MSG_326;W Chroma methode -HISTORY_MSG_327;W Contrast methode -HISTORY_MSG_328;W Chroma koppelen -HISTORY_MSG_329;W Dekking Rood-Groen -HISTORY_MSG_330;W Dekking Blauw-Geel -HISTORY_MSG_331;W Extra -HISTORY_MSG_332;W Tegels Methode -HISTORY_MSG_333;W Schaduwen Rest afbeelding -HISTORY_MSG_334;W Chroma -HISTORY_MSG_335;W Hoge lichten Rest afbeelding -HISTORY_MSG_336;W Hoge lichten drempel -HISTORY_MSG_337;W Tinten reeks Lucht -HISTORY_MSG_338;W Randen Straal -HISTORY_MSG_339;W Randen Waarde -HISTORY_MSG_340;W Sterkte -HISTORY_MSG_341;W - Rand prestaties -HISTORY_MSG_342;W - RS - Eerste niveau -HISTORY_MSG_343;W - Chroma niveau -HISTORY_MSG_344;W - Meth chroma balk/curve -HISTORY_MSG_345;W - RS - Lokaal contrast -HISTORY_MSG_346;W - RS - Lokaal contrast methode -HISTORY_MSG_347;W - RO - Niveau 0 -HISTORY_MSG_348;W - RO - Niveau 1 -HISTORY_MSG_349;W - RO - Niveau 2 -HISTORY_MSG_350;W - RS - Rand detectie -HISTORY_MSG_351;W - Rest - HH curve -HISTORY_MSG_352;W - Achtergrond -HISTORY_MSG_353;W - RS - Gradiënt gevoeligheid -HISTORY_MSG_354;W - RS - Verbeteren -HISTORY_MSG_355;W - RS - Drempel laag -HISTORY_MSG_356;W - RS - Drempel hoog -HISTORY_MSG_357;W - RO - Koppel met RS -HISTORY_MSG_358;W - Gamut - CH +HISTORY_MSG_296;RO - Luminantiecurve +HISTORY_MSG_297;RO - Modus +HISTORY_MSG_298;Dodepixels-filter +HISTORY_MSG_299;RO - Chrominantiecurve +HISTORY_MSG_301;RO - Luma-controle +HISTORY_MSG_302;RO - Chroma-methode +HISTORY_MSG_303;RO - Chroma-methode +HISTORY_MSG_304;Wavelets - Contrastniveaus +HISTORY_MSG_305;Wavelets - Niveaus +HISTORY_MSG_306;Wavelets - Proces +HISTORY_MSG_307;Wavelets - Ch-niveau +HISTORY_MSG_308;Wavelets - richting +HISTORY_MSG_309;Wavelets - tegels +HISTORY_MSG_310;Wavelets - Tinten lucht +HISTORY_MSG_311;Wavelets - Max. niveaus +HISTORY_MSG_312;Wavelets - Schaduwen drempel +HISTORY_MSG_313;Wavelets - Pastel Verzadigd +HISTORY_MSG_314;Wavelets - Artefacten blauwe lucht +HISTORY_MSG_315;Wavelets - Contrast Residuele afbeelding +HISTORY_MSG_316;Wavelets - Tinten huid +HISTORY_MSG_317;Wavelets - Tinten reeks Huid +HISTORY_MSG_318;Wavelets - Hoge lichten niveau +HISTORY_MSG_319;Wavelets - Hoge lichten reeks +HISTORY_MSG_320;Wavelets - Schaduwen reeks +HISTORY_MSG_321;Wavelets - Schaduwen niveau +HISTORY_MSG_322;Wavelets - kleurverschuiving +HISTORY_MSG_323;Wavelets - Chroma niveau +HISTORY_MSG_324;Wavelets - Chroma pastel +HISTORY_MSG_325;Wavelets - Chroma verzadigd +HISTORY_MSG_326;Wavelets - Chroma methode +HISTORY_MSG_327;Wavelets - Contrast methode +HISTORY_MSG_328;Wavelets - Chroma koppelen +HISTORY_MSG_329;Wavelets - Dekking Rood-Groen +HISTORY_MSG_330;Wavelets - Dekking Blauw-Geel +HISTORY_MSG_331;Wavelets - Extra +HISTORY_MSG_332;Wavelets - Tegels Methode +HISTORY_MSG_333;Wavelets - Schaduwen Residuele afbeelding +HISTORY_MSG_334;Wavelets - Chroma +HISTORY_MSG_335;Wavelets - Hoge lichten Residuele afbeelding +HISTORY_MSG_336;Wavelets - Hoge lichten drempel +HISTORY_MSG_337;Wavelets - Tinten reeks Lucht +HISTORY_MSG_338;Wavelets - Randen Straal +HISTORY_MSG_339;Wavelets - Randen Waarde +HISTORY_MSG_340;Wavelets - Sterkte +HISTORY_MSG_341;Wavelets - Rand prestaties +HISTORY_MSG_342;Wavelets - RS - Eerste niveau +HISTORY_MSG_343;Wavelets - Chroma niveau +HISTORY_MSG_344;Wavelets - Meth chroma balk/curve +HISTORY_MSG_345;Wavelets - RS - Lokaal contrast +HISTORY_MSG_346;Wavelets - RS - Lokaal contrast methode +HISTORY_MSG_347;Wavelets - RO - Niveau 0 +HISTORY_MSG_348;Wavelets - RO - Niveau 1 +HISTORY_MSG_349;Wavelets - RO - Niveau 2 +HISTORY_MSG_350;Wavelets - RS - Randdetectie +HISTORY_MSG_351;Wavelets - Rest - HH-curve +HISTORY_MSG_352;Wavelets - Achtergrond +HISTORY_MSG_353;Wavelets - RS - Gradiënt gevoeligheid +HISTORY_MSG_354;Wavelets - RS - Verbeteren +HISTORY_MSG_355;Wavelets - RS - Drempel laag +HISTORY_MSG_356;Wavelets - RS - Drempel hoog +HISTORY_MSG_357;Wavelets - RO - Koppel met RS +HISTORY_MSG_358;Wavelets - Gamut - CH HISTORY_MSG_359;Hete/Dode - Drempel HISTORY_MSG_360;TM Gamma -HISTORY_MSG_361;W - Finale - Chroma balans -HISTORY_MSG_362;W - Rest - Compressie methode -HISTORY_MSG_363;W - Rest - Compressie sterkte -HISTORY_MSG_364;W - Finale - Contrast balans -HISTORY_MSG_365;W - Finale - Balans niveau -HISTORY_MSG_366;W - Rest - Compressie gamma -HISTORY_MSG_367;W - RS - Lokaal contrast curve -HISTORY_MSG_368;W - Finale - Contrast balans -HISTORY_MSG_369;W - Finale - Balans methode -HISTORY_MSG_370;W - Finale - Lokaal contrast curve +HISTORY_MSG_361;Wavelets - Finale - Chroma balans +HISTORY_MSG_362;Wavelets - Residueel - Compressiemethode +HISTORY_MSG_363;Wavelets - Residueel - Compressiesterkte +HISTORY_MSG_364;Wavelets - Finale - Contrastbalans +HISTORY_MSG_365;Wavelets - Finale - Balansniveau +HISTORY_MSG_366;Wavelets - Residueel - Compressie gamma +HISTORY_MSG_367;Wavelets - RS - Lokaal contrast curve +HISTORY_MSG_368;Wavelets - Finale - Contrast balans +HISTORY_MSG_369;Wavelets - Finale - Balans methode +HISTORY_MSG_370;Wavelets - Finale - Lokaal contrastcurve HISTORY_MSG_371;Post-Verkleinen Verscherpen HISTORY_MSG_372;PVV OSM - Straal HISTORY_MSG_373;PVV OSM - Hoeveelheid HISTORY_MSG_374;PVV OSM - Drempel HISTORY_MSG_375;PVV OSM - Verscherp alleen randen -HISTORY_MSG_376;PVV OSM - Rand detectie straal -HISTORY_MSG_377;PVV OSM - Rand tolerantie -HISTORY_MSG_378;PVV OSM - Halo controle -HISTORY_MSG_379;PVV OSM - Halo controle hoeveelheid +HISTORY_MSG_376;PVV OSM - Randdetectie straal +HISTORY_MSG_377;PVV OSM - Randtolerantie +HISTORY_MSG_378;PVV OSM - Halocontrole +HISTORY_MSG_379;PVV OSM - Halocontrole hoeveelheid HISTORY_MSG_380;PVV - Methode HISTORY_MSG_381;PVV RLV - Straal HISTORY_MSG_382;PVV RLV - Hoeveelheid HISTORY_MSG_383;PVV RLV - Demping HISTORY_MSG_384;PVV RLV - Herhalingen -HISTORY_MSG_385;W - Rest - Kleurbalans -HISTORY_MSG_386;W - Rest - KB groen hoog -HISTORY_MSG_387;W - Rest - KB blauw hoog -HISTORY_MSG_388;W - Rest - KB groen midden -HISTORY_MSG_389;W - Rest - KB blauw midden -HISTORY_MSG_390;W - Rest - KB groen laag -HISTORY_MSG_391;W - Rest - KB blauw laag -HISTORY_MSG_392;W - Overblijvend - Kleurbalans -HISTORY_MSG_393;DCP 'Look'tabel -HISTORY_MSG_394;DCP Basis belichting -HISTORY_MSG_395;DCP Basis tabel -HISTORY_MSG_396;W - Contrast sub-tool -HISTORY_MSG_397;W - Chroma sub-tool -HISTORY_MSG_398;W - Randscherpte sub-tool -HISTORY_MSG_399;W - Rest sub-tool -HISTORY_MSG_400;W - Finale sub-tool -HISTORY_MSG_401;W - Tinten sub-tool -HISTORY_MSG_402;W - RO sub-tool -HISTORY_MSG_403;W - RS - Randgevoeligheid -HISTORY_MSG_404;W - RS - Basis versterken -HISTORY_MSG_405;W - RO - Niveau 4 -HISTORY_MSG_406;W - RS - Naburige pixels +HISTORY_MSG_385;Wavelets - Residueel - Kleurbalans +HISTORY_MSG_386;Wavelets - Residueel - KB groen hoog +HISTORY_MSG_387;Wavelets - Residueel - KB blauw hoog +HISTORY_MSG_388;Wavelets - Residueel - KB groen midden +HISTORY_MSG_389;Wavelets - Residueel - KB blauw midden +HISTORY_MSG_390;Wavelets - Residueel - KB groen laag +HISTORY_MSG_391;Wavelets - Residueel - KB blauw laag +HISTORY_MSG_392;Wavelets - Residueel - Kleurbalans +HISTORY_MSG_393;DCP 'Look'-tabel +HISTORY_MSG_394;DCP Basisbelichting +HISTORY_MSG_395;DCP Basistabel +HISTORY_MSG_396;Wavelets - Contrast sub-tool +HISTORY_MSG_397;Wavelets - Chroma sub-tool +HISTORY_MSG_398;Wavelets - Randscherpte sub-tool +HISTORY_MSG_399;Wavelets - Residueel sub-tool +HISTORY_MSG_400;Wavelets - Finale sub-tool +HISTORY_MSG_401;Wavelets - Tinten sub-tool +HISTORY_MSG_402;Wavelets - RO sub-tool +HISTORY_MSG_403;Wavelets - RS - Randgevoeligheid +HISTORY_MSG_404;Wavelets - RS - Basis versterken +HISTORY_MSG_405;Wavelets - RO - Niveau 4 +HISTORY_MSG_406;Wavelets - RS - Naburige pixels HISTORY_MSG_407;Retinex - Methode HISTORY_MSG_408;Retinex - Naburig HISTORY_MSG_410;Retinex - Beginpunt @@ -656,21 +659,21 @@ HISTORY_MSG_413;Retinex - Variantie HISTORY_MSG_414;Retinex - Histogram - Lab HISTORY_MSG_415;Retinex - Transmissie HISTORY_MSG_416;Retinex -HISTORY_MSG_417;Retinex - Transmissie mediaan +HISTORY_MSG_417;Retinex - Transmissiemediaan HISTORY_MSG_418;Retinex - Drempel HISTORY_MSG_419;Retinex - Kleurruimte HISTORY_MSG_420;Retinex - Histogram - HSL HISTORY_MSG_421;Retinex - Gamma HISTORY_MSG_422;Retinex - Gamma HISTORY_MSG_423;Retinex - Gamma helling -HISTORY_MSG_424;Retinex - HL drempel +HISTORY_MSG_424;Retinex - HL-drempel HISTORY_MSG_425;Retinex - Log base HISTORY_MSG_426;Retinex - Tint balans -HISTORY_MSG_427;Uitvoer grafische weergave -HISTORY_MSG_428;Monitor grafische weergave +HISTORY_MSG_427;Weergave-intentie uitvoerprofiel +HISTORY_MSG_428;Weergave-intentie monitorprofiel HISTORY_MSG_429;Retinex - Herhalingen -HISTORY_MSG_430;Retinex - Transmissie Verloop -HISTORY_MSG_431;Retinex - Sterkte Verloop +HISTORY_MSG_430;Retinex - Transmissieverloop +HISTORY_MSG_431;Retinex - Sterkteverloop HISTORY_MSG_432;Retinex - M - Hoge lichten HISTORY_MSG_433;Retinex - M - Hoge lichten TW HISTORY_MSG_434;Retinex - M - Schaduwen @@ -682,28 +685,28 @@ HISTORY_MSG_439;Retinex - Verwerken HISTORY_MSG_440;DC - Methode HISTORY_MSG_441;Retinex - Toename transmissie HISTORY_MSG_442;Retinex - Schaal -HISTORY_MSG_443;Uivoer Zwartpunt Compensatie -HISTORY_MSG_444;WB - Temp afwijking +HISTORY_MSG_443;Zwartpuntcompensatie uitvoerprofiel +HISTORY_MSG_444;WB - Temp. afwijking HISTORY_MSG_445;Raw Sub-afbeelding HISTORY_MSG_449;PV ISO toepassen HISTORY_MSG_452;PV Toon beweging HISTORY_MSG_453;PV Toon alleen masker HISTORY_MSG_457;PV Controleer rood/blauw HISTORY_MSG_462;PV Controleer groen -HISTORY_MSG_464;PV Vervagen bewagingsmasker +HISTORY_MSG_464;PV Vervagen bewegingsmasker HISTORY_MSG_465;PV Vervagen straal HISTORY_MSG_468;PV Vul holtes -HISTORY_MSG_469;PV Mediaann +HISTORY_MSG_469;PV Mediaan HISTORY_MSG_471;PV Bewegingscorrectie HISTORY_MSG_472;PV Zachte overgang HISTORY_MSG_474;PV Balans HISTORY_MSG_475;PS - Kanaalbalans -HISTORY_MSG_476;CAM02 - Temp uit +HISTORY_MSG_476;CAM02 - Temp. uit HISTORY_MSG_477;CAM02 - Groen uit HISTORY_MSG_478;CAM02 - Yb uit HISTORY_MSG_479;CAM02 - CAT02 aanpassing uit HISTORY_MSG_480;CAM02 - Automatische CAT02 uit -HISTORY_MSG_481;CAM02 - Temp scène +HISTORY_MSG_481;CAM02 - Temp. scène HISTORY_MSG_482;CAM02 - Groen scène HISTORY_MSG_483;CAM02 - Yb scène HISTORY_MSG_484;CAM02 - Auto Yb scène @@ -714,56 +717,56 @@ HISTORY_MSG_488;Compressie Dynamisch Bereik HISTORY_MSG_489;DRC - Detail HISTORY_MSG_490;DRC - Hoeveelheid HISTORY_MSG_491;Witbalans -HISTORY_MSG_492;RGB Curven -HISTORY_MSG_493;L*a*b* Adjustments +HISTORY_MSG_492;RGB-curven +HISTORY_MSG_493;L*a*b* aanpassingen HISTORY_MSG_494;verscherpen HISTORY_MSG_CLAMPOOG;Kleuren afkappen die buiten het gamma vallen HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Kleurcorrectie HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Kleurcorrectie HISTORY_MSG_COLORTONING_LABREGION_CHANNEL;CT - Kanaal -HISTORY_MSG_COLORTONING_LABREGION_CHROMATICITYMASK;CT - gebied C masker -HISTORY_MSG_COLORTONING_LABREGION_HUEMASK;CT - H masker +HISTORY_MSG_COLORTONING_LABREGION_CHROMATICITYMASK;CT - gebied C-masker +HISTORY_MSG_COLORTONING_LABREGION_HUEMASK;CT - H-masker HISTORY_MSG_COLORTONING_LABREGION_LIGHTNESS;CT - Licht -HISTORY_MSG_COLORTONING_LABREGION_LIGHTNESSMASK;CT - L masker +HISTORY_MSG_COLORTONING_LABREGION_LIGHTNESSMASK;CT - L-masker HISTORY_MSG_COLORTONING_LABREGION_LIST;CT - Lijst HISTORY_MSG_COLORTONING_LABREGION_MASKBLUR;CT - verzachtingsmasker gebied -HISTORY_MSG_COLORTONING_LABREGION_OFFSET;CT - offset gebied +HISTORY_MSG_COLORTONING_LABREGION_OFFSET;CT - verschuiving gebied HISTORY_MSG_COLORTONING_LABREGION_POWER;CT - sterkte gebied HISTORY_MSG_COLORTONING_LABREGION_SATURATION;CT - Verzadiging HISTORY_MSG_COLORTONING_LABREGION_SHOWMASK;CT - toon gebiedsmasker HISTORY_MSG_COLORTONING_LABREGION_SLOPE;CT - hellingsgebied -HISTORY_MSG_DEHAZE_DEPTH;Nevelvermindering - Diepte -HISTORY_MSG_DEHAZE_ENABLED;Nevelvermindering -HISTORY_MSG_DEHAZE_SHOW_DEPTH_MAP;Nevelvermindering - Toon dieptemap -HISTORY_MSG_DEHAZE_STRENGTH;Nevelvermindering - Sterkte +HISTORY_MSG_DEHAZE_DEPTH;Ontnevelen - Diepte +HISTORY_MSG_DEHAZE_ENABLED;Ontnevelen +HISTORY_MSG_DEHAZE_SHOW_DEPTH_MAP;Ontnevelen - Toon dieptemap +HISTORY_MSG_DEHAZE_STRENGTH;Ontnevelen - Sterkte HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST;Dual-demozaïek - auto-drempel HISTORY_MSG_DUALDEMOSAIC_CONTRAST;Dual-demozaïek - Contrastdrempel HISTORY_MSG_FILMNEGATIVE_ENABLED;Filmnegatief HISTORY_MSG_FILMNEGATIVE_VALUES;Filmnegatief waarden -HISTORY_MSG_HISTMATCHING;Auto-matched tooncurve -HISTORY_MSG_ICM_OUTPUT_PRIMARIES;Uitvoer - Primaries +HISTORY_MSG_HISTMATCHING;Auto-tooncurve +HISTORY_MSG_ICM_OUTPUT_PRIMARIES;Uitvoer - Primaire kleuren HISTORY_MSG_ICM_OUTPUT_TEMP;Uitvoer - ICC-v4 illuminant D HISTORY_MSG_ICM_OUTPUT_TYPE;Uitvoer - Type -HISTORY_MSG_ICM_WORKING_GAMMA;Working - Gamma -HISTORY_MSG_ICM_WORKING_SLOPE;Working - Helling -HISTORY_MSG_ICM_WORKING_TRC_METHOD;Working - TRC methode -HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Hoeveelheid -HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Donker +HISTORY_MSG_ICM_WORKING_GAMMA;Werkend - Gamma +HISTORY_MSG_ICM_WORKING_SLOPE;Werkend - Helling +HISTORY_MSG_ICM_WORKING_TRC_METHOD;Werkend - TRC-methode +HISTORY_MSG_LOCALCONTRAST_AMOUNT;Lokaal Contrast - Hoeveelheid +HISTORY_MSG_LOCALCONTRAST_DARKNESS;Lokaal Contrast - Donker HISTORY_MSG_LOCALCONTRAST_ENABLED;Lokaal Contrast HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Lokaal Contrast - Licht HISTORY_MSG_LOCALCONTRAST_RADIUS;Lokaal Contrast - Radius HISTORY_MSG_METADATA_MODE;Metadata kopieermodus HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrastdrempel -HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto drempel -HISTORY_MSG_PDSHARPEN_AUTO_RADIUS;CS - Auto radius -HISTORY_MSG_PDSHARPEN_CHECKITER;CS - Auto limiet herhalingen +HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto-drempel +HISTORY_MSG_PDSHARPEN_AUTO_RADIUS;CS - Auto-radius +HISTORY_MSG_PDSHARPEN_CHECKITER;CS - Auto-limiet herhalingen HISTORY_MSG_PDSHARPEN_CONTRAST;CS - Contrastdrempel HISTORY_MSG_PDSHARPEN_ITERATIONS;CS - Herhalingen -HISTORY_MSG_PDSHARPEN_RADIUS;CS - Radius -HISTORY_MSG_PDSHARPEN_RADIUS_BOOST;CS - Toename hoekradius +HISTORY_MSG_PDSHARPEN_RADIUS;CS - Straal +HISTORY_MSG_PDSHARPEN_RADIUS_BOOST;CS - Toename hoekstraal HISTORY_MSG_PIXELSHIFT_DEMOSAIC;PS - Demozaïekmethode voor beweging -HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;lijnruisfilter richting -HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lijnfilter +HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Lijnruisfilter richting +HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF-lijnfilter HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrastdrempel HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correctie - Herhalingen HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correctie - Vermijd kleurverschuiving @@ -777,7 +780,7 @@ HISTORY_MSG_SOFTLIGHT_STRENGTH;Zacht licht - Sterkte HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - Anker HISTORY_MSG_TRANS_METHOD;Geometrie - Methode HISTORY_NEWSNAPSHOT;Nieuw -HISTORY_NEWSNAPSHOT_TOOLTIP;Sneltoets: Alt-s +HISTORY_NEWSNAPSHOT_TOOLTIP;Sneltoets: Alt+S HISTORY_SNAPSHOT;Nieuw HISTORY_SNAPSHOTS;Snapshots ICCPROFCREATOR_COPYRIGHT;Copyright: @@ -785,9 +788,9 @@ ICCPROFCREATOR_COPYRIGHT_RESET_TOOLTIP;Zet terug naar standaard copyright, verle ICCPROFCREATOR_CUSTOM;Handmatig ICCPROFCREATOR_DESCRIPTION;Beschriiving: ICCPROFCREATOR_DESCRIPTION_ADDPARAM;Voeg gamma- en hellingwaarden toe aan de beschrijving -ICCPROFCREATOR_DESCRIPTION_TOOLTIP;Laat leeg voor de standaard beschrijving. +ICCPROFCREATOR_DESCRIPTION_TOOLTIP;Laat leeg voor de standaardbeschrijving. ICCPROFCREATOR_GAMMA;Gamma -ICCPROFCREATOR_ICCVERSION;ICC versie: +ICCPROFCREATOR_ICCVERSION;ICC-versie: ICCPROFCREATOR_ILL;Illuminant: ICCPROFCREATOR_ILL_41;D41 ICCPROFCREATOR_ILL_50;D50 @@ -815,10 +818,10 @@ ICCPROFCREATOR_PRIM_REDX;Rood X ICCPROFCREATOR_PRIM_REDY;Rood Y ICCPROFCREATOR_PRIM_SRGB;sRGB ICCPROFCREATOR_PRIM_TOOLTIP;U kunt alleen aangepaste primaries voor ICC v4-profielen instellen. -ICCPROFCREATOR_PRIM_WIDEG;Widegamut +ICCPROFCREATOR_PRIM_WIDEG;Wijd kleurenscala ICCPROFCREATOR_PROF_V2;ICC v2 ICCPROFCREATOR_PROF_V4;ICC v4 -ICCPROFCREATOR_SAVEDIALOG_TITLE;Bewaar ICC profiel als... +ICCPROFCREATOR_SAVEDIALOG_TITLE;Bewaar ICC-profiel als... ICCPROFCREATOR_SLOPE;Helling ICCPROFCREATOR_TRC_PRESET;Toonresponscurve: IPTCPANEL_CATEGORY;Categorie @@ -826,8 +829,8 @@ IPTCPANEL_CATEGORYHINT;Het onderwerp van de afbeelding. IPTCPANEL_CITY;Plaats IPTCPANEL_CITYHINT;Plaats waar de afbeelding is genomen. IPTCPANEL_COPYHINT;Kopieer IPTC-instellingen naar klembord -IPTCPANEL_COPYRIGHT;Copyright melding -IPTCPANEL_COPYRIGHTHINT;Melding over de huidige copyright houder van de afbeelding, bijvoorbeeld ©2008 Jane Doe. +IPTCPANEL_COPYRIGHT;Copyright-melding +IPTCPANEL_COPYRIGHTHINT;Melding over de huidige copyright-houder van de afbeelding, bijvoorbeeld ©2008 Jane Doe. IPTCPANEL_COUNTRY;Land IPTCPANEL_COUNTRYHINT;Land waar de afbeelding is genomen. IPTCPANEL_CREATOR;Maker @@ -839,7 +842,7 @@ IPTCPANEL_CREDITHINT;Naam van de leverancier van de foto, niet noodzakelijkerwij IPTCPANEL_DATECREATED;Opnamedatum IPTCPANEL_DATECREATEDHINT;Datum waarop de afbeelding is genomen. IPTCPANEL_DESCRIPTION;Beschrijving -IPTCPANEL_DESCRIPTIONHINT;Bijschrift dat het wie, wat of waarom beschrijft van wat er gebeurt in de afbeelding. Dit kan inclusief de namen van de persone zijn en of hun rol in de actie die plaatsvindt in de afbeelding. +IPTCPANEL_DESCRIPTIONHINT;Bijschrift dat het wie, wat of waarom beschrijft van wat er gebeurt in de afbeelding. Dit kan inclusief de namen van de personen zijn en of hun rol in de actie die plaatsvindt in de afbeelding. IPTCPANEL_DESCRIPTIONWRITER;Schrijver van de beschrijving. IPTCPANEL_DESCRIPTIONWRITERHINT;De naam van de persoon die is betrokken bij het schrijven, wijzigen of corrigeren van de beschrijving van de afbeelding. IPTCPANEL_EMBEDDED;Ingebed @@ -865,27 +868,27 @@ IPTCPANEL_TRANSREFERENCE;Referentienummer IPTCPANEL_TRANSREFERENCEHINT;Het nummer dat wordt gebruikt voor de 'workflow control' of voor de tracking. MAIN_BUTTON_FULLSCREEN;Volledig scherm MAIN_BUTTON_ICCPROFCREATOR;ICC Profielmaker -MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigeer naar de volgende afbeelding relatief ten opzichte van de geopende afbeelding in de Editor\nSneltoets: Shift-F4\n\nNavigeer naar de volgende afbeelding relatief ten opzichte van de miniatuur geselecteerd in de Bestandsnavigator\nSneltoets: F4 -MAIN_BUTTON_NAVPREV_TOOLTIP;Navigeer naar de vorige afbeelding relatief ten opzichte van de geopende afbeelding in de Editor\nSneltoets: Shift-F3 \n\nNavigeer naar de vorige afbeelding relatief ten opzichte van de miniatuur geselecteerd in de Bestandsnavigator\nSneltoets: F3 -MAIN_BUTTON_NAVSYNC_TOOLTIP;Synchroniseer de Bestandsnavigator met de Editor om de miniatuur te tonen van de huidig geopende afbeelding, en verwijder de filters in de Bestandsnavigator \nSneltoets: x\n\nAls voorgaand, maar zonder het verwijderen van de filters in de Bestandsnavigator \nSneltoets: y\n(NB de miniatuur van de geopende afbeelding zal niet worden getoond indien gefilterd) +MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigeer naar de volgende afbeelding relatief ten opzichte van de geopende afbeelding in de Fotobewerker\nSneltoets: Shift+F4\n\nNavigeer naar de volgende afbeelding relatief ten opzichte van de miniatuur geselecteerd in de Bestandsnavigator\nSneltoets: F4 +MAIN_BUTTON_NAVPREV_TOOLTIP;Navigeer naar de vorige afbeelding relatief ten opzichte van de geopende afbeelding in de Fotobewerker\nSneltoets: Shift+F3 \n\nNavigeer naar de vorige afbeelding relatief ten opzichte van de miniatuur geselecteerd in de Bestandsnavigator\nSneltoets: F3 +MAIN_BUTTON_NAVSYNC_TOOLTIP;Synchroniseer de Bestandsnavigator met de Fotobewerker om de miniatuur te tonen van de huidig geopende afbeelding, en verwijder de filters in de Bestandsnavigator \nSneltoets: x\n\nAls voorgaand, maar zonder het verwijderen van de filters in de Bestandsnavigator \nSneltoets: y\n(NB. De miniatuur van de geopende afbeelding zal niet worden getoond indien gefilterd) MAIN_BUTTON_PREFERENCES;Voorkeuren MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Plaats huidige foto in verwerkingsrij.\nSneltoets: Ctrl+B MAIN_BUTTON_SAVE_TOOLTIP;Bewaar huidige foto.\nSneltoets: Ctrl+S -MAIN_BUTTON_SENDTOEDITOR;Bewerk afbeelding in externe editor +MAIN_BUTTON_SENDTOEDITOR;Bewerk afbeelding in externe fotobewerker MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Stuur huidige foto naar extern fotobewerkingsprogramma.\nSneltoets: Ctrl+E -MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;Toon/verberg alle zijpanelen.\nSneltoets: m +MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;Toon/verberg alle zijpanelen.\nSneltoets: M MAIN_BUTTON_UNFULLSCREEN;Verlaat volledig scherm MAIN_FRAME_EDITOR;Fotobewerker -MAIN_FRAME_EDITOR_TOOLTIP; Bewerking.\nSneltoets: Ctrl-F4 +MAIN_FRAME_EDITOR_TOOLTIP; Bewerking.\nSneltoets: Ctrl+F4 MAIN_FRAME_FILEBROWSER;Bestandsnavigator -MAIN_FRAME_FILEBROWSER_TOOLTIP; Bestandsnavigator.\nSneltoets: Ctrl-F2 +MAIN_FRAME_FILEBROWSER_TOOLTIP; Bestandsnavigator.\nSneltoets: Ctrl+F2 MAIN_FRAME_PLACES;Locaties MAIN_FRAME_PLACES_ADD;Nieuw MAIN_FRAME_PLACES_DEL;Verwijderen MAIN_FRAME_QUEUE;Verwerkingsrij -MAIN_FRAME_QUEUE_TOOLTIP; Verwerkingsrij.\nSneltoets: Ctrl-F3 +MAIN_FRAME_QUEUE_TOOLTIP; Verwerkingsrij.\nSneltoets: Ctrl+F3 MAIN_FRAME_RECENT;Recente mappen -MAIN_MSG_ALREADYEXISTS;Bestand bestaat reeds. +MAIN_MSG_ALREADYEXISTS;Bestand bestaat al MAIN_MSG_CANNOTLOAD;Fout bij laden MAIN_MSG_CANNOTSAVE;Fout bij opslaan van de afbeelding MAIN_MSG_CANNOTSTARTEDITOR;Kan fotoprogramma niet starten. @@ -894,51 +897,51 @@ MAIN_MSG_EMPTYFILENAME;Geen bestandsnaam opgegeven! MAIN_MSG_IMAGEUNPROCESSED;Deze opdracht vereist dat alle geselecteerde foto's eerst moeten zijn verwerkt. MAIN_MSG_NAVIGATOR;Navigator MAIN_MSG_OPERATIONCANCELLED;Opdracht afgebroken -MAIN_MSG_PATHDOESNTEXIST;Het pad\n\n%1\n\nbestaat niet. Zet een correct pad bij Voorkeuren. +MAIN_MSG_PATHDOESNTEXIST;Het pad\n\n%1\n\nbestaat niet. Geef een correct pad op in Voorkeuren. MAIN_MSG_QOVERWRITE;Wilt u het bestand overschrijven? -MAIN_MSG_SETPATHFIRST;Specificeer eerst een doelmap in Voorkeuren \nom deze functionaliteit te kunnen gebruiken! +MAIN_MSG_SETPATHFIRST;Specificeer eerst een doelmap in Voorkeuren\nom deze functionaliteit te kunnen gebruiken! MAIN_MSG_TOOMANYOPENEDITORS;Teveel open fotobewerkers.\nSluit er een om verder te kunnen. MAIN_MSG_WRITEFAILED;Niet opgeslagen\n\n"%1"\n\nControleer of de map bestaat en dat u schrijfrechten heeft. MAIN_TAB_ADVANCED;Geavanceerd -MAIN_TAB_ADVANCED_TOOLTIP;Sneltoets: Alt-a +MAIN_TAB_ADVANCED_TOOLTIP;Sneltoets: Alt+A MAIN_TAB_COLOR;Kleur -MAIN_TAB_COLOR_TOOLTIP;Sneltoets: Alt-c +MAIN_TAB_COLOR_TOOLTIP;Sneltoets: Alt+C MAIN_TAB_DETAIL;Detail -MAIN_TAB_DETAIL_TOOLTIP;Sneltoets: Alt-d +MAIN_TAB_DETAIL_TOOLTIP;Sneltoets: Alt+D MAIN_TAB_DEVELOP;Ontwikkel MAIN_TAB_EXIF;Exif MAIN_TAB_EXPORT; Exporteren MAIN_TAB_EXPOSURE;Belichting -MAIN_TAB_EXPOSURE_TOOLTIP;Sneltoets: Alt-e +MAIN_TAB_EXPOSURE_TOOLTIP;Sneltoets: Alt+E MAIN_TAB_FAVORITES;Favorieten -MAIN_TAB_FAVORITES_TOOLTIP;Sneltoets: Alt-u +MAIN_TAB_FAVORITES_TOOLTIP;Sneltoets: Alt+U MAIN_TAB_FILTER;Filter -MAIN_TAB_INSPECT; Inspecteren +MAIN_TAB_INSPECT; Inspecteer MAIN_TAB_IPTC;IPTC MAIN_TAB_METADATA;Metadata -MAIN_TAB_METADATA_TOOLTIP;Sneltoets: Alt-m +MAIN_TAB_METADATA_TOOLTIP;Sneltoets: Alt+M MAIN_TAB_RAW;RAW -MAIN_TAB_RAW_TOOLTIP;Sneltoets: Alt-r +MAIN_TAB_RAW_TOOLTIP;Sneltoets: Alt+R MAIN_TAB_TRANSFORM;Transformeer -MAIN_TAB_TRANSFORM_TOOLTIP;Sneltoets: Alt-t -MAIN_TOOLTIP_BACKCOLOR0;Achtergrond kleur van het voorbeeld: Thema-based\nSneltoets: 8 +MAIN_TAB_TRANSFORM_TOOLTIP;Sneltoets: Alt+T +MAIN_TOOLTIP_BACKCOLOR0;Achtergrond kleur van het voorbeeld: Gebaseerd op thema\nSneltoets: 8 MAIN_TOOLTIP_BACKCOLOR1;Achtergrond kleur van het voorbeeld: Zwart\nSneltoets: 9 MAIN_TOOLTIP_BACKCOLOR2;Achtergrond kleur van het voorbeeld: Wit\nSneltoets: 0 -MAIN_TOOLTIP_BACKCOLOR3;Achtergrondkleur van het voorbeeld: middelgrijs\nSneltoets: 9 -MAIN_TOOLTIP_BEFOREAFTERLOCK;Vergrendel / Ontgrendel de Voorafbeelding.\n\nVergrendel: hou de Voorafbeelding ongewijzigd.\nDit is handig om het cumulatieve effect van meerdere gereedschappen te beoordelen.\nBovendien kan er worden vergeleken met elke stap in de geschiedenislijst.\n\nOntgrendel: de Voorafbeelding volgt een stap achter de Naafbeelding en laat de afbeelding zien zonder het effect van het huidige gereedschap. +MAIN_TOOLTIP_BACKCOLOR3;Achtergrondkleur van het voorbeeld: Middelgrijs\nSneltoets: 9 +MAIN_TOOLTIP_BEFOREAFTERLOCK;Vergrendel/Ontgrendel de Voorafbeelding.\n\nVergrendeld: hou de Voorafbeelding ongewijzigd.\nDit is handig om het cumulatieve effect van meerdere gereedschappen te beoordelen.\nBovendien kan er worden vergeleken met elke stap in de geschiedenislijst.\n\nOntgrendeld: de Voorafbeelding volgt een stap achter de Naafbeelding en laat de afbeelding zien zonder het effect van het huidige gereedschap. MAIN_TOOLTIP_HIDEHP;Toon/verberg linkerpaneel (geschiedenis).\nSneltoets: H MAIN_TOOLTIP_INDCLIPPEDH;Overbelichtingsindicatie.\nSneltoets: > MAIN_TOOLTIP_INDCLIPPEDS;Onderbelichtingsindicatie.\nSneltoets: < -MAIN_TOOLTIP_PREVIEWB;Bekijk het Blauwe kanaal.\nSneltoets: b -MAIN_TOOLTIP_PREVIEWFOCUSMASK;Bekijk het Focus Masker.\nSneltoets: Shift-F\n\nAccurater bij afbeeldingen met geringe scherptediepte, weinig ruis en hogere zoomniveaus.\n\nBekijk de afbeelding op lagere zoomniveaus (10-30%) om de accuratesse te vergroten bij afbeeldingen met veel ruis.\n\nHet voorbeeld wordt langzamer aangemaakt als Focus Masker aanstaat. -MAIN_TOOLTIP_PREVIEWG;Bekijk het Groene kanaal.\nSneltoets: g -MAIN_TOOLTIP_PREVIEWL;Bekijk de Luminositeit.\nSneltoets: v\n\n0.299*R + 0.587*G + 0.114*B -MAIN_TOOLTIP_PREVIEWR;Bekijk het Rode kanaal.\nSneltoets: r -MAIN_TOOLTIP_PREVIEWSHARPMASK;Bekijk het scherptecontrastmasker.\nSneltoets: p\nWerkt alleen als verscherping is geactiveerd en het zoomniveau >= 100%. +MAIN_TOOLTIP_PREVIEWB;Bekijk het Blauwe kanaal.\nSneltoets: B +MAIN_TOOLTIP_PREVIEWFOCUSMASK;Bekijk het Focusmasker.\nSneltoets: Shift+F\n\nAccurater bij afbeeldingen met geringe scherptediepte, weinig ruis en hogere zoomniveaus.\n\nBekijk de afbeelding op lagere zoomniveaus (10-30%) om de accuratesse te vergroten bij afbeeldingen met veel ruis.\n\nHet voorbeeld wordt langzamer aangemaakt als Focusmasker aanstaat. +MAIN_TOOLTIP_PREVIEWG;Bekijk het Groene kanaal.\nSneltoets: G +MAIN_TOOLTIP_PREVIEWL;Bekijk de Luminositeit.\nSneltoets: V\n\n0.299*R + 0.587*G + 0.114*B +MAIN_TOOLTIP_PREVIEWR;Bekijk het Rode kanaal.\nSneltoets: R +MAIN_TOOLTIP_PREVIEWSHARPMASK;Bekijk het Scherptecontrastmasker.\nSneltoets: P\nWerkt alleen als verscherping is geactiveerd en het zoomniveau >= 100%. MAIN_TOOLTIP_QINFO;Beknopte fotogegevens -MAIN_TOOLTIP_SHOWHIDELP1;Toon/verberg linkerpaneel.\nSneltoets: l -MAIN_TOOLTIP_SHOWHIDERP1;Toon/verberg rechterpaneel.\nSneltoets: Alt-l -MAIN_TOOLTIP_SHOWHIDETP1;Toon/verberg bovenste paneel.\nSneltoets: Shift-L +MAIN_TOOLTIP_SHOWHIDELP1;Toon/verberg linkerpaneel.\nSneltoets: L +MAIN_TOOLTIP_SHOWHIDERP1;Toon/verberg rechterpaneel.\nSneltoets: Alt+L +MAIN_TOOLTIP_SHOWHIDETP1;Toon/verberg bovenste paneel.\nSneltoets: Shift+L MAIN_TOOLTIP_THRESHOLD;Drempel MAIN_TOOLTIP_TOGGLE;Vergelijk origineel en bewerking MONITOR_PROFILE_SYSTEM;Systeem standaardwaarde @@ -955,13 +958,13 @@ NAVIGATOR_V;V: NAVIGATOR_XY_FULL;Breedte: %1, Hoogte: %2 NAVIGATOR_XY_NA;x: --, y: -- OPTIONS_BUNDLED_MISSING;Het gebundelde profiel "%1" werd niet gevonden!\n\nUw installatie kan beschadigd zijn.\n\nDaarom worden interne standaardwaarden gebruikt. -OPTIONS_DEFIMG_MISSING;Het standaardprofiel voor niet-raw- foto's werd niet gevonden of is niet ingesteld.\n\nControleer de profielenmap, het kan ontbreken of beschadigd zijn.\n\n"%1" wordt daarom gebruikt. -OPTIONS_DEFRAW_MISSING;Het standaardprofiel voor raw-foto's werd niet gevonden of is niet ingesteld.\n\nControleer de profielenmap, het kan ontbreken of beschadigd zijn.\n\n"%1" wordt daarom gebruikt. +OPTIONS_DEFIMG_MISSING;Het standaardprofiel voor niet-RAW-afbeeldingen werd niet gevonden of is niet ingesteld.\n\nControleer de profielmap, het kan ontbreken of beschadigd zijn.\n\nDaarom wordt "%1" gebruikt. +OPTIONS_DEFRAW_MISSING;Het standaardprofiel voor RAW-afbeeldingen werd niet gevonden of is niet ingesteld.\n\nControleer de profielmap, het kan ontbreken of beschadigd zijn.\n\nDaarom wordt "%1" gebruikt. PARTIALPASTE_ADVANCEDGROUP;Geavanceerd PARTIALPASTE_BASICGROUP;Basisinstellingen PARTIALPASTE_CACORRECTION;C/A-correctie -PARTIALPASTE_CHANNELMIXER;Kleurkanaal mixer -PARTIALPASTE_CHANNELMIXERBW;Zwart-Wit +PARTIALPASTE_CHANNELMIXER;Kleurkanaalmixer +PARTIALPASTE_CHANNELMIXERBW;Zwart-wit PARTIALPASTE_COARSETRANS;90 graden roteren/spiegelen PARTIALPASTE_COLORAPP;CIE Color Appearance Model 2002 PARTIALPASTE_COLORGROUP;Kleurgerelateerde instellingen @@ -972,42 +975,42 @@ PARTIALPASTE_CROP;Bijsnijden PARTIALPASTE_DARKFRAMEAUTOSELECT;Donkerframe autom. selectie PARTIALPASTE_DARKFRAMEFILE;Donkerframe-opname PARTIALPASTE_DEFRINGE;Verzachten -PARTIALPASTE_DEHAZE;Nevel verminderen +PARTIALPASTE_DEHAZE;Ontnevelen PARTIALPASTE_DETAILGROUP;Detailinstellingen PARTIALPASTE_DIALOGLABEL;Profiel gedeeltelijk plakken... PARTIALPASTE_DIRPYRDENOISE;Ruisonderdrukking PARTIALPASTE_DIRPYREQUALIZER;Detailcontrast PARTIALPASTE_DISTORTION;Corrigeer lensvervorming -PARTIALPASTE_EPD;Tonemapping +PARTIALPASTE_EPD;Toonmappen PARTIALPASTE_EQUALIZER;Wavelet Balans PARTIALPASTE_EVERYTHING;Alles PARTIALPASTE_EXIFCHANGES;Wijzig Exif-gegevens PARTIALPASTE_EXPOSURE;Belichting -PARTIALPASTE_FILMNEGATIVE;Film Negatief -PARTIALPASTE_FILMSIMULATION;Film Simuleren +PARTIALPASTE_FILMNEGATIVE;Filmnegatief +PARTIALPASTE_FILMSIMULATION;Filmsimulatie PARTIALPASTE_FLATFIELDAUTOSELECT;Vlakveld autoselectie PARTIALPASTE_FLATFIELDBLURRADIUS;Vlakveld verzachting straal PARTIALPASTE_FLATFIELDBLURTYPE;Vlakveld verzachting type -PARTIALPASTE_FLATFIELDCLIPCONTROL;Vlakveld clip controle +PARTIALPASTE_FLATFIELDCLIPCONTROL;Vlakveld afkapcontrole PARTIALPASTE_FLATFIELDFILE;Vlakveldopname -PARTIALPASTE_GRADIENT;Grijsverloop Filter +PARTIALPASTE_GRADIENT;Grijsverloopfilter PARTIALPASTE_HSVEQUALIZER;HSV-balans PARTIALPASTE_ICMSETTINGS;ICM-instellingen -PARTIALPASTE_IMPULSEDENOISE;Spot ruisonderdrukking +PARTIALPASTE_IMPULSEDENOISE;Spot-ruisonderdrukking PARTIALPASTE_IPTCINFO;IPTC-informatie PARTIALPASTE_LABCURVE;LAB-curve PARTIALPASTE_LENSGROUP;Lensgerelateerde instellingen -PARTIALPASTE_LENSPROFILE;Lens correctie profiel +PARTIALPASTE_LENSPROFILE;Lenscorrectieprofiel PARTIALPASTE_LOCALCONTRAST;Lokaal contrast PARTIALPASTE_METADATA;Metadata modus PARTIALPASTE_METAGROUP;Metadata -PARTIALPASTE_PCVIGNETTE;Vignettering Filter +PARTIALPASTE_PCVIGNETTE;Vignetteringsfilter PARTIALPASTE_PERSPECTIVE;Perspectief -PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dode pixels filter +PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dodepixels-filter PARTIALPASTE_PREPROCESS_GREENEQUIL;Groenbalans -PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hete pixels filter +PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hetepixels-filter PARTIALPASTE_PREPROCESS_LINEDENOISE;Lijnruisfilter -PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lijnfilter +PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF-lijnfilter PARTIALPASTE_PRSHARPENING;Verscherp na verkleinen PARTIALPASTE_RAWCACORR_AUTO;Autom. C/A-correctie PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA vermijd kleurverschuiving @@ -1021,8 +1024,8 @@ PARTIALPASTE_RAW_DCBITERATIONS;aantal DCB-herhalingen PARTIALPASTE_RAW_DMETHOD;Demozaïekmethode PARTIALPASTE_RAW_FALSECOLOR;Demozaïek stapgrootte kleurfoutonderdrukking PARTIALPASTE_RAW_IMAGENUM;Sub-afbeelding -PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE verbetering -PARTIALPASTE_RAW_PIXELSHIFT;PixelVerschuiving +PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE-verbetering +PARTIALPASTE_RAW_PIXELSHIFT;Pixelverschuiving PARTIALPASTE_RESIZE;Wijzig grootte PARTIALPASTE_RETINEX;Retinex PARTIALPASTE_RGBCURVES;RGB-curven @@ -1039,53 +1042,53 @@ PARTIALPASTE_WHITEBALANCE;Witbalans PREFERENCES_ADD;Toevoegen PREFERENCES_APPEARANCE;Uiterlijk PREFERENCES_APPEARANCE_COLORPICKERFONT;Lettertype kleurenkiezer -PREFERENCES_APPEARANCE_CROPMASKCOLOR;Kleur bijsnijdmasker +PREFERENCES_APPEARANCE_CROPMASKCOLOR;Kleur bijsnijmasker PREFERENCES_APPEARANCE_MAINFONT;Standaard lettertype PREFERENCES_APPEARANCE_NAVGUIDECOLOR;Navigator randkleur PREFERENCES_APPEARANCE_PSEUDOHIDPI;Pseudo-HiDPI modus PREFERENCES_APPEARANCE_THEME;Thema PREFERENCES_APPLNEXTSTARTUP;herstart vereist -PREFERENCES_AUTOMONPROFILE;Gebruik automatisch het standaard monitorprofiel \nvan het besturingsysteem +PREFERENCES_AUTOMONPROFILE;Gebruik automatisch het standaard monitorprofiel \nvan het besturingssysteem PREFERENCES_AUTOSAVE_TP_OPEN;Bewaar positie gereedschappen (open/dicht) bij afsluiten -PREFERENCES_BATCH_PROCESSING;Batch-verwerking +PREFERENCES_BATCH_PROCESSING;Groepsverwerking PREFERENCES_BEHADDALL;Alles op 'Toevoegen' -PREFERENCES_BEHADDALLHINT;Zet alle parameters in de Toevoegen mode.\nWijzigingen van parameters in de batch tool zijn deltas op de opgeslagen waarden. +PREFERENCES_BEHADDALLHINT;Zet alle parameters in de Toevoegen-modus.\nWijzigingen van de parameters voor groepsverwerking zijn deltas op de opgeslagen waarden. PREFERENCES_BEHAVIOR;Gedrag PREFERENCES_BEHSETALL;Alles op 'Activeer' -PREFERENCES_BEHSETALLHINT;Zet alle parameters in de Activeer mode.\nWijzigingen van parameters in de batch tool zijn absoluut. De actuele waarden worden gebruikt. +PREFERENCES_BEHSETALLHINT;Zet alle parameters in de Activeer-modus.\nWijzigingen van de parameters voor groepsverwerking zijn absoluut. De actuele waarden worden gebruikt. PREFERENCES_CACHECLEAR;Wissen PREFERENCES_CACHECLEAR_ALL;Wis alle bestanden in de cache: PREFERENCES_CACHECLEAR_ALLBUTPROFILES;Wis alle bestanden in de cache behalve verwerkingsprofielen: PREFERENCES_CACHECLEAR_ONLYPROFILES;Wis alleen verwerkingsprofielen in de cache: PREFERENCES_CACHECLEAR_SAFETY;Alleen bestanden in de cache worden gewist. Verwerkingsprofielen van de oorspronkelijke afbeeldingen blijven ongemoeid. -PREFERENCES_CACHEMAXENTRIES;Maximaal aantal elementen in cache +PREFERENCES_CACHEMAXENTRIES;Maximaal aantal elementen in de cache PREFERENCES_CACHEOPTS;Cache-opties PREFERENCES_CACHETHUMBHEIGHT;Maximale hoogte miniaturen PREFERENCES_CHUNKSIZES;Tegels per thread -PREFERENCES_CHUNKSIZE_RAW_AMAZE;AMaZE demosaïek -PREFERENCES_CHUNKSIZE_RAW_CA;Raw CA correctie -PREFERENCES_CHUNKSIZE_RAW_RCD;RCD demosaïek -PREFERENCES_CHUNKSIZE_RAW_XT;Xtrans demosaïek -PREFERENCES_CHUNKSIZE_RGB;RGB verwerking +PREFERENCES_CHUNKSIZE_RAW_AMAZE;AMaZE-demozaïek +PREFERENCES_CHUNKSIZE_RAW_CA;Raw CA-correctie +PREFERENCES_CHUNKSIZE_RAW_RCD;RCD-demozaïek +PREFERENCES_CHUNKSIZE_RAW_XT;Xtrans-demozaïek +PREFERENCES_CHUNKSIZE_RGB;RGB-verwerking PREFERENCES_CLIPPINGIND;Indicatie over-/onderbelichting -PREFERENCES_CLUTSCACHE;HaldCLUT cache -PREFERENCES_CLUTSCACHE_LABEL;Maximum aantal cached Cluts -PREFERENCES_CLUTSDIR;HaldCLUT map -PREFERENCES_CMMBPC;Zwartpunt Compensatie +PREFERENCES_CLUTSCACHE;HaldCLUT-cache +PREFERENCES_CLUTSCACHE_LABEL;Maximum aantal cluts in de cache +PREFERENCES_CLUTSDIR;HaldCLUT-map +PREFERENCES_CMMBPC;Zwartpuntcompensatie PREFERENCES_CROP;Uitsnijden PREFERENCES_CROP_AUTO_FIT;Automatisch zoomen tot de uitsnede PREFERENCES_CROP_GUIDES;Getoonde hulplijnen als uitsnede niet bewerkt wordt PREFERENCES_CROP_GUIDES_FRAME;Frame PREFERENCES_CROP_GUIDES_FULL;Origineel PREFERENCES_CROP_GUIDES_NONE;Geen -PREFERENCES_CURVEBBOXPOS;Positie copy/paste knoppen bij Curves +PREFERENCES_CURVEBBOXPOS;Positie kopieer/plak-knoppen bij Curves PREFERENCES_CURVEBBOXPOS_ABOVE;Boven PREFERENCES_CURVEBBOXPOS_BELOW;Beneden PREFERENCES_CURVEBBOXPOS_LEFT;Links PREFERENCES_CURVEBBOXPOS_RIGHT;Rechts PREFERENCES_CUSTPROFBUILD;Eigen/externe profielgenerator -PREFERENCES_CUSTPROFBUILDHINT;Programma (of script) dat wordt aangeroepen om een initieel profiel voor foto te maken.\nOntvangt terminalparameters voor het genereren van pp3's gebaseerd op regels:\n[Pad RAW/JPG] [Pad default profiel] [f-getal] [belichting in sec] [brandpuntsafstand in mm] [ISO] [lens] [Camera make] [camera model]\n\n WAARSCHUWING: Indien een pad spaties bevat moeten er dubbele quotes worden gezet om het pad. -PREFERENCES_CUSTPROFBUILDKEYFORMAT;Keys formaat +PREFERENCES_CUSTPROFBUILDHINT;Programma (of script) dat wordt aangeroepen om een initieel profiel voor een foto te maken.\nOntvangt terminalparameters voor het genereren van pp3's gebaseerd op regels:\n[Pad RAW/JPG] [Pad standaardprofiel] [f-getal] [belichting in sec] [brandpuntsafstand in mm] [ISO] [lens] [Camerafabrikant] [cameramodel]\n\n Let op: Indien een pad spaties bevat moeten er dubbele quotes om het pad worden gezet. +PREFERENCES_CUSTPROFBUILDKEYFORMAT;'Keys'-formaat PREFERENCES_CUSTPROFBUILDKEYFORMAT_NAME;Naam PREFERENCES_CUSTPROFBUILDKEYFORMAT_TID;TagID PREFERENCES_CUSTPROFBUILDPATH;Pad naar programma of script @@ -1093,7 +1096,7 @@ PREFERENCES_DARKFRAMEFOUND;Gevonden PREFERENCES_DARKFRAMESHOTS;foto's PREFERENCES_DARKFRAMETEMPLATES;sjablonen PREFERENCES_DATEFORMAT;Datumformaat -PREFERENCES_DATEFORMATHINT;U kunt de volgende formaten gebruiken:\n%y : jaar\n%m : maand\n%d : dag\n\nHet Nederlandse datumformaat is bijvoorbeeld:\n%d/%m/%y +PREFERENCES_DATEFORMATHINT;U kunt de volgende formaten gebruiken:\n%y : jaar\n%m : maand\n%d : dag\n\nHet Nederlandse datumformaat is \n%d/%m/%y PREFERENCES_DIRDARKFRAMES;Map met donkerframes PREFERENCES_DIRECTORIES;Mappen PREFERENCES_DIRHOME;Standaardmap @@ -1120,9 +1123,9 @@ PREFERENCES_HISTOGRAM_TOOLTIP;Het werkprofiel wordt gebruikt voor het Hoofdhisto PREFERENCES_HLTHRESHOLD;Grenswaarde overbelichting PREFERENCES_ICCDIR;Map met ICC-profielen PREFERENCES_IMPROCPARAMS;Standaardprofiel -PREFERENCES_INSPECT_LABEL;Inspecteren -PREFERENCES_INSPECT_MAXBUFFERS_LABEL;Maximum aantal afbeeldingen in cache -PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Het maximum aantal afbeeldingen in de cache wanneer je in de Bestandsnavigator met de cursor over de miniaturen beweegt. Op computers met weinig RAM geheugen (2 Gb) moet deze waarde op 1 of 2 worden gezet. +PREFERENCES_INSPECT_LABEL;Inspecteer +PREFERENCES_INSPECT_MAXBUFFERS_LABEL;Maximum aantal afbeeldingen in de cache +PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Het maximum aantal afbeeldingen in de cache wanneer je in de Bestandsnavigator met de cursor over de miniaturen beweegt. Op computers met erg weinig RAM-geheugen (2 GB) moet deze waarde op 1 of 2 worden gezet. PREFERENCES_INTENT_ABSOLUTE;Absolute colorimetrie PREFERENCES_INTENT_PERCEPTUAL;Waargenomen colorimetrie PREFERENCES_INTENT_RELATIVE;Relatieve colorimetrie @@ -1137,32 +1140,32 @@ PREFERENCES_MENUGROUPLABEL;Groepeer labelen PREFERENCES_MENUGROUPPROFILEOPERATIONS;Groepeer profielbewerkingen PREFERENCES_MENUGROUPRANK;Groepeer markering PREFERENCES_MENUOPTIONS;Menu-opties -PREFERENCES_MONINTENT;Standaard monitor weergave +PREFERENCES_MONINTENT;Standaard weergave-intentie monitor PREFERENCES_MONITOR;Monitor PREFERENCES_MONPROFILE;Standaard kleurprofiel -PREFERENCES_MONPROFILE_WARNOSX;Als gevolg van MacOS beperkingen wordt alleen sRGB ondersteund. +PREFERENCES_MONPROFILE_WARNOSX;Als gevolg van beperkingen van macOS wordt alleen sRGB ondersteund. PREFERENCES_MULTITAB;Multi-tab: elke foto opent in nieuw tabvenster PREFERENCES_MULTITABDUALMON;Multi-tab, indien beschikbaar op tweede monitor PREFERENCES_NAVIGATIONFRAME;Navigatie PREFERENCES_OVERLAY_FILENAMES;Toon bestandsnamen over miniaturen PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Toon bestandsnaam over miniaturen in het Bewerkingsvenster -PREFERENCES_OVERWRITEOUTPUTFILE;Overschrijf bestaande output-bestanden +PREFERENCES_OVERWRITEOUTPUTFILE;Overschrijf bestaande uitvoerbestanden PREFERENCES_PANFACTORLABEL;Factor PREFERENCES_PARSEDEXT;Extensies (verwerkingsvolgorde) PREFERENCES_PARSEDEXTADD;Voeg extensie toe -PREFERENCES_PARSEDEXTADDHINT;Typ nieuwe extensie en druk op knop om aan lijst toe te voegen +PREFERENCES_PARSEDEXTADDHINT;Geef nieuwe extensie op en druk op de knop om aan de lijst toe te voegen PREFERENCES_PARSEDEXTDELHINT;Verwijder geselecteerde extensie(s) uit lijst PREFERENCES_PARSEDEXTDOWNHINT;Verplaats extensie naar beneden PREFERENCES_PARSEDEXTUPHINT;Verplaats extensie naar boven PREFERENCES_PERFORMANCE_MEASURE;Meting -PREFERENCES_PERFORMANCE_MEASURE_HINT;Log verwerkingstijden in de console +PREFERENCES_PERFORMANCE_MEASURE_HINT;Log de verwerkingstijden in de console PREFERENCES_PERFORMANCE_THREADS;Threads -PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximaal aantal threads voor ruisvermindering and Wavelet Niveaus (0 = Automatisch) -PREFERENCES_PREVDEMO;Voorbeeld Demozaïekmethode +PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximaal aantal threads voor ruisvermindering en Wavelet-niveaus (0 = automatisch) +PREFERENCES_PREVDEMO;Voorbeeld demozaïekmethode PREFERENCES_PREVDEMO_FAST;Snel PREFERENCES_PREVDEMO_LABEL;Demozaïekmethode van het voorbeeld bij <100% zoom: PREFERENCES_PREVDEMO_SIDECAR;Gelijk aan PP3 -PREFERENCES_PRINTER;Printer (Proefafdruk) +PREFERENCES_PRINTER;Printer (soft-proof) PREFERENCES_PROFILEHANDLING;Verwerking profielen PREFERENCES_PROFILELOADPR;Laadprioriteit profielen PREFERENCES_PROFILEPRCACHE;Profiel in cache @@ -1173,16 +1176,16 @@ PREFERENCES_PROFILESAVEINPUT;Bewaar profiel bij RAW-bestand PREFERENCES_PROFILESAVELOCATION;Opslaglocatie profielen PREFERENCES_PROFILE_NONE;Geen PREFERENCES_PROPERTY;Eigenschap -PREFERENCES_PRTINTENT;Grafische weergave +PREFERENCES_PRTINTENT;Weergave-intentie PREFERENCES_PRTPROFILE;Kleurprofiel PREFERENCES_PSPATH;Installatiemap Adobe Photoshop -PREFERENCES_REMEMBERZOOMPAN;Onthoud zoom % en pan startpunt -PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Onthoud het zoom % en pan startpunt van de huidige afbeelding als er een nieuwe afbeelding wordt geopend.\n\nDeze optie werkt alleen in "Single Editor Tab Mode" en wanneer "Demozaïekmethode van het voorbeeld <100% zoom" hetzelfde is als "Gelijk aan PP3". +PREFERENCES_REMEMBERZOOMPAN;Onthoud zoom% en pan-startpunt +PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Onthoud het zoompercentage en pan-startpunt van de huidige afbeelding als er een nieuwe afbeelding wordt geopend.\n\nDeze optie werkt alleen in Enkeltab-modus en wanneer "Demozaïekmethode van het voorbeeld <100% zoom" hetzelfde is als "Gelijk aan PP3". PREFERENCES_SAVE_TP_OPEN_NOW;Bewaar open/dicht-status van de gereedschappen nu PREFERENCES_SELECTLANG;Selecteer taal -PREFERENCES_SERIALIZE_TIFF_READ;TIFF Lees Instellingen -PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serieel lezen van TIFF bestanden -PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;Als een map veel ongecomprimeerde TIFF bestanden bevat dan versnelt deze optie het genereren van de miniaturen. +PREFERENCES_SERIALIZE_TIFF_READ;TIFF-leesinstellingen +PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serieel lezen van TIFF-bestanden +PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;Als een map veel ongecomprimeerde TIFF-bestanden bevat dan versnelt deze optie het aanmaken van de miniaturen. PREFERENCES_SET;Activeer PREFERENCES_SHOWBASICEXIF;Toon standaard Exif-info PREFERENCES_SHOWDATETIME;Toon datum en tijd @@ -1198,14 +1201,14 @@ PREFERENCES_SND_THRESHOLDSECS;na seconden PREFERENCES_STARTUPIMDIR;Standaardmap bij opstarten PREFERENCES_TAB_BROWSER;Bestandsnavigator PREFERENCES_TAB_COLORMGR;Kleurbeheer -PREFERENCES_TAB_DYNAMICPROFILE;Dynamisch Profielregel +PREFERENCES_TAB_DYNAMICPROFILE;Dynamische Profielregel PREFERENCES_TAB_GENERAL;Algemeen PREFERENCES_TAB_IMPROC;Beeldverwerking -PREFERENCES_TAB_PERFORMANCE;Performantie +PREFERENCES_TAB_PERFORMANCE;Prestaties PREFERENCES_TAB_SOUND;Geluiden -PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Ingesloten JPEG voorbeeld +PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Ingesloten JPEG-voorbeeld PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Te tonen foto -PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutrale raw rendering +PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutrale raw-rendering PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Ingesloten JPEG indien vol formaat, anders neutrale raw PREFERENCES_TP_LABEL;Gereedschapspaneel: PREFERENCES_TP_VSCROLLBAR;Verberg de schuifbalk van het gereedschapspaneel @@ -1216,7 +1219,7 @@ PROFILEPANEL_GLOBALPROFILES;Gebundelde profielen PROFILEPANEL_LABEL;Profielen PROFILEPANEL_LOADDLGLABEL;Kies profiel... PROFILEPANEL_LOADPPASTE;Te laden parameters -PROFILEPANEL_MODE_TOOLTIP;Profiel aanvullen.\n\nKnop ingedrukt: gedeeltelijke profielen worden omgezet naar volledige profielen. De ontbrekende waarden worden vervangen door hard-coded defaults.\n\nKnop neutraal: profielen worden toegepast zo als ze zijn, alleen de aanwezige waarden worden gewijzigd. +PROFILEPANEL_MODE_TOOLTIP;Profiel aanvullen.\n\nKnop ingedrukt: gedeeltelijke profielen worden omgezet naar volledige profielen. De ontbrekende waarden worden vervangen door standaardwaarden.\n\nKnop neutraal: profielen worden toegepast zoals ze zijn, alleen de aanwezige waarden worden gewijzigd. PROFILEPANEL_MYPROFILES;Mijn profielen PROFILEPANEL_PASTEPPASTE;Te plakken parameters PROFILEPANEL_PCUSTOM;Handmatig @@ -1228,13 +1231,13 @@ PROFILEPANEL_SAVEDLGLABEL;Bewaar profiel... PROFILEPANEL_SAVEPPASTE;Te bewaren parameters PROFILEPANEL_TOOLTIPCOPY;Kopieer huidig profiel naar klembord PROFILEPANEL_TOOLTIPLOAD;Laad profiel uit bestand -PROFILEPANEL_TOOLTIPPASTE; Plak profiel van klembord -PROFILEPANEL_TOOLTIPSAVE;Bewaar huidig profiel.\nCtrl-click voor het selecteren van de instellingen voor opslaan. +PROFILEPANEL_TOOLTIPPASTE;Plak profiel van klembord +PROFILEPANEL_TOOLTIPSAVE;Bewaar huidig profiel.\nCtrl+klik voor het selecteren van de instellingen voor opslaan. PROGRESSBAR_DECODING;Decoderen... -PROGRESSBAR_GREENEQUIL;Groen blancering... +PROGRESSBAR_GREENEQUIL;Groenbalancering... PROGRESSBAR_HLREC;Reconstructie hoge lichten... -PROGRESSBAR_HOTDEADPIXELFILTER;Hot/dead pixel filter... -PROGRESSBAR_LINEDENOISE;Lijnruis filter... +PROGRESSBAR_HOTDEADPIXELFILTER;Hete/dodepixels-filter... +PROGRESSBAR_LINEDENOISE;Lijnruisfilter... PROGRESSBAR_LOADING;Afbeelding laden... PROGRESSBAR_LOADINGTHUMBS;Miniaturen laden... PROGRESSBAR_LOADJPEG;Laden JPEG-bestand... @@ -1243,28 +1246,28 @@ PROGRESSBAR_LOADTIFF;Laden TIFF-bestand... PROGRESSBAR_NOIMAGES;Geen afbeeldingen PROGRESSBAR_PROCESSING;Foto verwerken... PROGRESSBAR_PROCESSING_PROFILESAVED;Uitvoeren 'Profiel opslaan' -PROGRESSBAR_RAWCACORR;Raw CA correctie... +PROGRESSBAR_RAWCACORR;Raw CA-correctie... PROGRESSBAR_READY;Gereed PROGRESSBAR_SAVEJPEG;Opslaan JPEG-bestand... PROGRESSBAR_SAVEPNG;Opslaan PNG-bestand... PROGRESSBAR_SAVETIFF;Opslaan TIFF-bestand... PROGRESSBAR_SNAPSHOT_ADDED;Snapshot toegevoegd -PROGRESSDLG_PROFILECHANGEDINBROWSER;Profiel veranderd in bestandsnavigator +PROGRESSDLG_PROFILECHANGEDINBROWSER;Profiel veranderd in Bestandsnavigator QINFO_FRAMECOUNT;%2 frames QINFO_HDR;HDR / %2 frame(s) QINFO_ISO;ISO QINFO_NOEXIF;Exif-gegevens niet beschikbaar. -QINFO_PIXELSHIFT;Pixel Shift / %2 frame(s) +QINFO_PIXELSHIFT;Pixel-Shift / %2 frame(s) QUEUE_AUTOSTART;Autostart QUEUE_AUTOSTART_TOOLTIP;Start verwerking automatisch wanneer nieuwe foto arriveert QUEUE_DESTFILENAME;Pad en bestandsnaam QUEUE_FORMAT_TITLE;Bestandstype QUEUE_LOCATION_FOLDER;Sla op in map QUEUE_LOCATION_TEMPLATE;Gebruik sjabloon -QUEUE_LOCATION_TEMPLATE_TOOLTIP;U kunt de volgende formaten gebruiken:\n%f, %d1, %d2, ..., %p1, %p2, ..., %r\n\nDeze formaten hebben betrekking op de mappen, submappen en atributen van het RAW-bestand.\n\nAls bijvoorbeeld /home/tom/image/02-09-2006/dsc0012.nef is geopend, hebben deze formaten de volgende betekenis:\n%f=dsc0012, %d1=02-09-2006, %d2=foto, ...\n%p1=/home/tom/image/02-09-2006, %p2=/home/tom/image, p3=/home/tom, ...\n\n%r wordt vervangen door de rank van de foto. Als de foto geen rank heeft, wordt %r vervangen door '0'. Als de foto in de prullenbak zit zal %r worden vervangen door 'x'.\n\nWanneer de geconverteerde RAW-foto in dezelfde map moet komen als het origineel, schrijf dan:\n%p1/%f\n\nIndien u de geconverteerde RAW-foto in een map genaamd 'geconverteerd' wilt plaatsen die een submap is van de oorspronkelijke locatie, schrijft u:\n%p1/geconverteerd/%f\n\nWilt u het geconverteerde RAW-bestand bewaren in map '/home/tom/geconverteerd' met behoud van dezelfde submap met datums, schrijf dan:\n%p2/geconverteerd/%d1/%f +QUEUE_LOCATION_TEMPLATE_TOOLTIP;U kunt de volgende formaten gebruiken:\n%f, %d1, %d2, ..., %p1, %p2, ..., %r\n\nDeze formaten hebben betrekking op de mappen, submappen en atributen van het RAW-bestand.\n\nAls bijvoorbeeld /home/tom/image/02-09-2024/dsc0012.nef is geopend, hebben deze formaten de volgende betekenis:\n%f=dsc0012, %d1=02-09-2024, %d2=foto, ...\n%p1=/home/tom/image/02-09-2024, %p2=/home/tom/image, p3=/home/tom, ...\n\n%r wordt vervangen door de waardering van de foto. Als de foto geen waardering heeft, wordt %r vervangen door '0'. Als de foto in de prullenbak zit zal %r worden vervangen door 'x'.\n\nWanneer de geconverteerde RAW-foto in dezelfde map moet komen als het origineel, schrijf dan:\n%p1/%f\n\nIndien u de geconverteerde RAW-foto in een map genaamd 'geconverteerd' wilt plaatsen die een submap is van de oorspronkelijke locatie, schrijft u:\n%p1/geconverteerd/%f\n\nWilt u het geconverteerde RAW-bestand bewaren in map '/home/tom/geconverteerd' met behoud van dezelfde submap met datums, schrijf dan:\n%p2/geconverteerd/%d1/%f QUEUE_LOCATION_TITLE;Uitvoerlocatie -QUEUE_STARTSTOP_TOOLTIP;;Start of stop de verwerking van foto's in de rij.\n\nSneltoets: Ctrl+s -SAMPLEFORMAT_0;onbekend data formaat +QUEUE_STARTSTOP_TOOLTIP;Start of stop de verwerking van foto's in de rij.\n\nSneltoets: Ctrl+S +SAMPLEFORMAT_0;onbekend dataformaat SAMPLEFORMAT_1;8-bit unsigned SAMPLEFORMAT_2;16-bit unsigned SAMPLEFORMAT_4;24-bit LogLuv @@ -1286,7 +1289,7 @@ SAVEDLG_SUBSAMP;Subsampling SAVEDLG_SUBSAMP_1;Beste compressie SAVEDLG_SUBSAMP_2;Gebalanceerd SAVEDLG_SUBSAMP_3;Beste kwaliteit -SAVEDLG_SUBSAMP_TOOLTIP;Beste Compressie:\nJ:a:b 4:2:0\nh/v 2/2\nChroma gehalveerd horizontaal en vertikaal\n\nGebalanceerd:\nJ:a:b 4:2:2\nh/v 2/1\nChroma gehalveerd horizontaal.\n\nBeste kwaliteit:\nJ:a:b 4:4:4\nh/v 1/1\nGeen chroma subsampling. +SAVEDLG_SUBSAMP_TOOLTIP;Beste Compressie:\nJ:a:b 4:2:0\nh/v 2/2\nChroma gehalveerd horizontaal en verticaal\n\nGebalanceerd:\nJ:a:b 4:2:2\nh/v 2/1\nChroma gehalveerd horizontaal.\n\nBeste kwaliteit:\nJ:a:b 4:4:4\nh/v 1/1\nGeen chroma-subsampling. SAVEDLG_TIFFUNCOMPRESSED;Geen compressie SAVEDLG_WARNFILENAME;Bestandsnaam wordt SHCSELECTOR_TOOLTIP;Klik op de rechtermuisknop om\nde 3 knoppen te verschuiven @@ -1295,29 +1298,29 @@ SOFTPROOF_TOOLTIP;Soft-proofing simuleert hoe een foto wordt getoond:\n- als dez THRESHOLDSELECTOR_B;Onderkant THRESHOLDSELECTOR_BL;Onderkant-links THRESHOLDSELECTOR_BR;Onderkant-rechts -THRESHOLDSELECTOR_HINT;Houdt de Shift-toets ingedrukt om individuele controle punten te verschuiven. +THRESHOLDSELECTOR_HINT;Houd de Shift-toets ingedrukt om individuele controlepunten te verschuiven. THRESHOLDSELECTOR_T;Bovenkant THRESHOLDSELECTOR_TL;Bovenkant-links THRESHOLDSELECTOR_TR;Bovenkant-rechts -TOOLBAR_TOOLTIP_COLORPICKER;Vergrendelbare Kleurkiezer\n\nKlik met de linkermuisknop in het voorbeeld om een kleurkiezer toe te voegen\nBeweeg het punt door de linkermuisknop ingedrukt te houden\nVerwijder de kleurkiezer met een rechtermuisknop klik\nVerwijder allle kleurkiezers met Shift + rechtermuisknop klik\nMet een rechtermuisklik naast een kleurkiezer komt het selecteer handje terug. -TOOLBAR_TOOLTIP_CROP;Bijsnijden.\nSneltoets: c -TOOLBAR_TOOLTIP_HAND;Sleepgereedschap.\nSneltoets: h -TOOLBAR_TOOLTIP_STRAIGHTEN;Rechtmaken / Kleine rotaties.\nSneltoets: s\n\nBepaal de vertikale of horizontale as door het trekken van een hulplijn over de afbeelding. De rotatiehoek wordt naast de hulplijn getoond. Het centrum van de roatatie is het geometrische midden van de afbeelding. -TOOLBAR_TOOLTIP_WB;Witbalans.\nSneltoets: w +TOOLBAR_TOOLTIP_COLORPICKER;Vergrendelbare kleurkiezer\n\nKlik met de linkermuisknop in het voorbeeld om een kleurkiezer toe te voegen\nBeweeg het punt door de linkermuisknop ingedrukt te houden\nVerwijder de kleurkiezer met rechts-klik\nVerwijder alle kleurkiezers met Shift+rechtsklik\nMet een rechtermuisklik naast een kleurkiezer komt het selectiehandje terug. +TOOLBAR_TOOLTIP_CROP;Bijsnijden.\nSneltoets: C +TOOLBAR_TOOLTIP_HAND;Sleepgereedschap.\nSneltoets: H +TOOLBAR_TOOLTIP_STRAIGHTEN;Rechtzetten/Kleine rotaties.\nSneltoets: S\n\nBepaal de verticale of horizontale as door een hulplijn over de afbeelding te trekken. De rotatiehoek wordt naast de hulplijn getoond. Het centrum van de roatatie is het geometrische midden van de afbeelding. +TOOLBAR_TOOLTIP_WB;Witbalans.\nSneltoets: W TP_BWMIX_ALGO;Algoritme OYCPM TP_BWMIX_ALGO_LI;Lineair TP_BWMIX_ALGO_SP;Speciale effecten -TP_BWMIX_ALGO_TOOLTIP;Lineair: creëert een normale lineaire response.\n Speciale effecten: creëert speciale effecten door kanalen non-lineair te mixen.TP_BWMIX_AUTOCH;Auto +TP_BWMIX_ALGO_TOOLTIP;Lineair: creëert een normale lineaire respons.\n Speciale effecten: creëert speciale effecten door kanalen non-lineair te mixen. TP_BWMIX_AUTOCH;Auto TP_BWMIX_CC_ENABLED;Wijzig complementaire kleur -TP_BWMIX_CC_TOOLTIP;Automatische aanpassing van complementaire kleuren in ROYGCBPM mode. -TP_BWMIX_CHANNEL;Luminantie Balans -TP_BWMIX_CURVEEDITOR1;'Voor' curve -TP_BWMIX_CURVEEDITOR2;'Na' curve -TP_BWMIX_CURVEEDITOR_AFTER_TOOLTIP;Toon curve wordt toegepast na de Zwart-Wit conversie. -TP_BWMIX_CURVEEDITOR_BEFORE_TOOLTIP;Toon curve wordt toegepast voor de Zwart-Wit conversie\nHoudt rekening met de kleur componenten. -TP_BWMIX_CURVEEDITOR_LH_TOOLTIP;Wijzig luminantie in de functie van hue\nNegatieve waarden kunnen artefacten of onregelmatigheden veroorzaken. -TP_BWMIX_FILTER;Kleur Filter +TP_BWMIX_CC_TOOLTIP;Automatische aanpassing van complementaire kleuren in ROYGCBPM-modus. +TP_BWMIX_CHANNEL;Luminantiebalans +TP_BWMIX_CURVEEDITOR1;'Voor'-curve +TP_BWMIX_CURVEEDITOR2;'Na'-curve +TP_BWMIX_CURVEEDITOR_AFTER_TOOLTIP;Tooncurve wordt toegepast na de zwart-witconversie. +TP_BWMIX_CURVEEDITOR_BEFORE_TOOLTIP;Tooncurve wordt toegepast voor de zwart-witconversie.\nHoud rekening met de kleurcomponenten. +TP_BWMIX_CURVEEDITOR_LH_TOOLTIP;Luminantie als functie van tint (L=f(T).\nPas op met extreme waarden, deze kunnen onregelmatigheden veroorzaken. +TP_BWMIX_FILTER;Filterkleur TP_BWMIX_FILTER_BLUE;Blauw TP_BWMIX_FILTER_BLUEGREEN;Blauw-Groen TP_BWMIX_FILTER_GREEN;Groen @@ -1326,56 +1329,56 @@ TP_BWMIX_FILTER_NONE;Geen TP_BWMIX_FILTER_PURPLE;Paars TP_BWMIX_FILTER_RED;Rood TP_BWMIX_FILTER_REDYELLOW;Rood-Geel -TP_BWMIX_FILTER_TOOLTIP;Het kleurfilter heeft hetzelfde effect als een voor de lens geplaatst filter. Kleurfilters reduceren specifieke reeksen van kleuren en beïnvloeden de helderheid. Bv. een rood filter maak een blauwe lucht donkerder. +TP_BWMIX_FILTER_TOOLTIP;Het kleurfilter heeft hetzelfde effect als een voor de lens geplaatst filter. Kleurfilters reduceren specifieke reeksen van kleuren en beïnvloeden de helderheid. Zo maakt een rood filter een blauwe lucht donkerder. TP_BWMIX_FILTER_YELLOW;Geel -TP_BWMIX_GAMMA;Gamma Correctie -TP_BWMIX_GAM_TOOLTIP;Corrigeer gamma voor elk RGB kanaal -TP_BWMIX_LABEL;Zwart-Wit +TP_BWMIX_GAMMA;Gammacorrectie +TP_BWMIX_GAM_TOOLTIP;Corrigeer gamma voor elk RGB-kanaal +TP_BWMIX_LABEL;Zwart-wit TP_BWMIX_MET;Methode TP_BWMIX_MET_CHANMIX;Kanaalmixer TP_BWMIX_MET_DESAT;Desatureren -TP_BWMIX_MET_LUMEQUAL;Luminantie Balans -TP_BWMIX_MIXC;Kanaal Mixer +TP_BWMIX_MET_LUMEQUAL;Luminantie-equalizer +TP_BWMIX_MIXC;Kanalenmixer TP_BWMIX_NEUTRAL;Terugzetten TP_BWMIX_RGBLABEL;R: %1%% G: %2%% B: %3%% Totaal: %4%% -TP_BWMIX_RGBLABEL_HINT;RGB omrekeningsfactoren. Hierin zijn alle gekozen opties vewerkt.\nTotaal toont de som van de uit te voeren RGB factoren:\n- dit is altijd 100% in relatieve mode\n- hoger (lichter) of lager (donkerder) dan 100% in absolute mode. -TP_BWMIX_RGB_TOOLTIP;Mix de RGB kanalen. Gebruik Voorinstellingen voor aanwijzingen.\nNegatieve waarden kunnen artefacten of onregelmatigheden veroorzaken. +TP_BWMIX_RGBLABEL_HINT;RGB-omrekeningsfactoren. Hierin zijn alle gekozen opties verwerkt.\nTotaal toont de som van de uit te voeren RGB-factoren:\n- dit is altijd 100% in relatieve modus\n- groter (lichter) of kleiner (donkerder) dan 100% in absolute modus. +TP_BWMIX_RGB_TOOLTIP;Mix de RGB-kanalen. Gebruik Voorinstellingen voor aanwijzingen.\nNegatieve waarden kunnen onregelmatigheden veroorzaken. TP_BWMIX_SETTING;Voorinstellingen TP_BWMIX_SETTING_TOOLTIP;Verschillende voorinstellingen (film, landschap, etc.) of handmatige instellingen van de kanaalmixer. -TP_BWMIX_SET_HIGHCONTAST;Hoog Contrast -TP_BWMIX_SET_HIGHSENSIT;Hoge Gevoeligheid -TP_BWMIX_SET_HYPERPANCHRO;Hyper Panchromatisch +TP_BWMIX_SET_HIGHCONTAST;Hoog contrast +TP_BWMIX_SET_HIGHSENSIT;Hoge gevoeligheid +TP_BWMIX_SET_HYPERPANCHRO;Hyperpanchromatisch TP_BWMIX_SET_INFRARED;Infrarood TP_BWMIX_SET_LANDSCAPE;Landschap -TP_BWMIX_SET_LOWSENSIT;Lage Gevoeligheid +TP_BWMIX_SET_LOWSENSIT;Lage gevoeligheid TP_BWMIX_SET_LUMINANCE;Luminantie -TP_BWMIX_SET_NORMCONTAST;Normaal Contrast +TP_BWMIX_SET_NORMCONTAST;Normaal contrast TP_BWMIX_SET_ORTHOCHRO;Orthochromatisch TP_BWMIX_SET_PANCHRO;Panchromatisch TP_BWMIX_SET_PORTRAIT;Portret -TP_BWMIX_SET_RGBABS;Absolute RGB -TP_BWMIX_SET_RGBREL;Relatieve RGB -TP_BWMIX_SET_ROYGCBPMABS;Absolute ROYGCBPM -TP_BWMIX_SET_ROYGCBPMREL;Relatieve ROYGCBPM -TP_BWMIX_TCMODE_FILMLIKE;Z&W Film-achtig -TP_BWMIX_TCMODE_SATANDVALBLENDING;Z-W Verzadiging en Waarde menging +TP_BWMIX_SET_RGBABS;RGB-absoluut +TP_BWMIX_SET_RGBREL;RGB-relatief +TP_BWMIX_SET_ROYGCBPMABS;ROYGCBPM-absoluut +TP_BWMIX_SET_ROYGCBPMREL;ROYGCBPM-relatief +TP_BWMIX_TCMODE_FILMLIKE;Z-W Filmachtig +TP_BWMIX_TCMODE_SATANDVALBLENDING;Z-W Verzadiging en Waarde mengen TP_BWMIX_TCMODE_STANDARD;Z-W Standaard -TP_BWMIX_TCMODE_WEIGHTEDSTD;Z-W Gewogen Standard +TP_BWMIX_TCMODE_WEIGHTEDSTD;Z-W Gewogen standaard TP_BWMIX_VAL;L TP_CACORRECTION_BLUE;Blauw -TP_CACORRECTION_LABEL;Corrigeer chromatische aberratie +TP_CACORRECTION_LABEL;Corrigeer chromatische afwijking TP_CACORRECTION_RED;Rood -TP_CBDL_AFT;Na Zwart-Wit -TP_CBDL_BEF;Voor Zwart-Wit +TP_CBDL_AFT;Na zwart-wit +TP_CBDL_BEF;Voor zwart-wit TP_CBDL_METHOD;Uitvoeren -TP_CBDL_METHOD_TOOLTIP;Kies of Detailcontrast moet worden uitgevoerd na de Zwart-Wit bewerking waardoor het werkt in L*a*b*, of voor de Zwart-Wit bewerking waardoor het werkt in RGB +TP_CBDL_METHOD_TOOLTIP;Kies of Detailcontrast moet worden uitgevoerd ná de zwart-witbewerking waardoor het werkt in L*a*b*, of vòòr de zwart-witbewerking waardoor het werkt in RGB TP_CHMIXER_BLUE;Blauw TP_CHMIXER_GREEN;Groen -TP_CHMIXER_LABEL;Kleurkanaal mixer +TP_CHMIXER_LABEL;Kleurkanaalmixer TP_CHMIXER_RED;Rood TP_COARSETRAF_TOOLTIP_HFLIP;Horizontaal spiegelen -TP_COARSETRAF_TOOLTIP_ROTLEFT;Rotate left.\n\nSneltoets:\n[ - Multi-tab Mode,\nAlt-[ - Enkel-tab Mode. -TP_COARSETRAF_TOOLTIP_ROTRIGHT;Rotate right.\n\nSneltoets:\n] - Multi-tab Mode,\nAlt-] - Enkel-tab Mode. +TP_COARSETRAF_TOOLTIP_ROTLEFT;Roteer links.\n\nSneltoets:\n[ - Multitab-modus,\nAlt+[ - Enkeltab-modus. +TP_COARSETRAF_TOOLTIP_ROTRIGHT;Rotate right.\n\nSneltoets:\n] - Multitab-modus,\nAlt+] - Enkeltab-modus. TP_COARSETRAF_TOOLTIP_VFLIP;Verticaal spiegelen TP_COLORAPP_ABSOLUTELUMINANCE;Absolute luminantie TP_COLORAPP_ALGO;Algoritme @@ -1384,64 +1387,64 @@ TP_COLORAPP_ALGO_JC;Lichtheid + Chroma (JC) TP_COLORAPP_ALGO_JS;Lichtheid + Verzadiging (JS) TP_COLORAPP_ALGO_QM;Helderheid + Kleurrijkheid (QM) TP_COLORAPP_ALGO_TOOLTIP;Keuze uit parameters -TP_COLORAPP_BADPIXSL;Hete/dode pixel filter -TP_COLORAPP_BADPIXSL_TOOLTIP;Onderdruk hete/dode (sterk gekleurde) pixels.\n 0=geen effect 1=mediaan 2=gaussian.\n\nDeze artefacten zijn het gevolg van de beperkingen van CIECAM02. Het alternatief is het aanpassen van de afbeelding om zeer donkere schaduwen te voorkomen. +TP_COLORAPP_BADPIXSL;Hete/dode-pixelsfilter +TP_COLORAPP_BADPIXSL_TOOLTIP;Onderdruk hete/dode (sterk gekleurde) pixels.\n 0 = geen effect 1 = mediaan 2 = gaussiaans.\n\nDeze onregelmatigheden zijn het gevolg van de beperkingen van CIECAM02. Het alternatief is het aanpassen van de afbeelding om zeer donkere schaduwen te voorkomen. TP_COLORAPP_BRIGHT;Helderheid (Q) TP_COLORAPP_BRIGHT_TOOLTIP;Helderheid in CIECAM02 is verschillend van Lab en RGB, hou rekening met de luminositeit van wit -TP_COLORAPP_CAT02ADAPTATION_TOOLTIP;Bij manuele aanpassing worden waardon boven 65 aanbevolen. +TP_COLORAPP_CAT02ADAPTATION_TOOLTIP;Bij handmatige aanpassing worden waarden boven 65 aanbevolen. TP_COLORAPP_CHROMA;Chroma (C) TP_COLORAPP_CHROMA_M;Kleurrijkheid (M) TP_COLORAPP_CHROMA_M_TOOLTIP;Kleurrijkheid in CIECAM02 is verschillend van Lab en RGB TP_COLORAPP_CHROMA_S;Verzadiging (S) TP_COLORAPP_CHROMA_S_TOOLTIP;Verzadiging in CIECAM02 is verschillend van Lab en RGB TP_COLORAPP_CHROMA_TOOLTIP;Chroma in CIECAM02 is verschillend van Lab en RGB -TP_COLORAPP_CIECAT_DEGREE;CAT02 toepassen +TP_COLORAPP_CIECAT_DEGREE;Chromatische aanpassing Scène TP_COLORAPP_CONTRAST;Contrast (J) TP_COLORAPP_CONTRAST_Q;Contrast (Q) -TP_COLORAPP_CONTRAST_Q_TOOLTIP;Contrast (Q)in CIECAM02 is verschillend van Lab en RGB +TP_COLORAPP_CONTRAST_Q_TOOLTIP;Contrast (Q) in CIECAM02 is verschillend van Lab en RGB TP_COLORAPP_CONTRAST_TOOLTIP;Contrast (J) in CIECAM02 is verschillend van Lab en RGB -TP_COLORAPP_CURVEEDITOR1;Toon curve 1 -TP_COLORAPP_CURVEEDITOR1_TOOLTIP;Toont het histogram van L (Lab) voor CIECAM wijzigingen.\n\nHet histogram toont J,Q na toepassing van CIECAM, indien het selectievakje 'Toon CIECAM uitvoer' is aangezet.\n(J,Q) worden niet getoond in het hoofd histogram. \n\nRaadpleeg voor de definitieve uitvoer het Histogram paneel. -TP_COLORAPP_CURVEEDITOR2;Toon curve 2 -TP_COLORAPP_CURVEEDITOR2_TOOLTIP;Heeft dezelfde werking als belichtings 'Toon Curve 2'. -TP_COLORAPP_CURVEEDITOR3;Chroma curve -TP_COLORAPP_CURVEEDITOR3_TOOLTIP;Wijzigt ofwel chroma, verzadiging of kleurrijkheid.\n Het Histogram toont chromaticiteit (Lab) voor CIECAM wijzigingen.\nHet Histogram toont C,s,M na toepassing van CIECAM indien het selectievakje 'Toon CIECAM uitvoer' is aangezet.\n(C,s,M) worden niet getoond in het Hoofd histogram paneel. \nRaadpleeg het Histogram paneel voor de definitieve uitvoer -TP_COLORAPP_DATACIE;CIECAM02 uitvoer histogram in de curven -TP_COLORAPP_DATACIE_TOOLTIP;Indien aangezet, tonen de histogrammen van de CIECAM02 curven bij benadering de waarden/reeksen voor J of Q, en C, s of M na de CIECAM02 aanpassingen.\nDit beïnvloed niet het hoofd histogram paneel.\n\nIndien uitgezet tonen de histogrammen van de CIECAM02 curven de Lab waarden zoals deze waren voor de CIECAM02 aanpassingen -TP_COLORAPP_FREE;Vrije temp+groen + CAT02 + [uitvoer] -TP_COLORAPP_GAMUT;Gamut controle (Lab) +TP_COLORAPP_CURVEEDITOR1;Tooncurve 1 +TP_COLORAPP_CURVEEDITOR1_TOOLTIP;Toont het histogram van L (Lab) voor CIECAM-wijzigingen.\n\nHet histogram toont J,Q na toepassing van CIECAM, indien het selectievakje 'Toon CIECAM-uitvoer' is aangezet.\n(J,Q) worden niet getoond in het hoofdhistogram. \n\nZie voor de definitieve uitvoer het Histogrampaneel. +TP_COLORAPP_CURVEEDITOR2;Tooncurve 2 +TP_COLORAPP_CURVEEDITOR2_TOOLTIP;Heeft dezelfde werking als belichtings-tooncurve 2. +TP_COLORAPP_CURVEEDITOR3;Chroma-curve +TP_COLORAPP_CURVEEDITOR3_TOOLTIP;Wijzigt ofwel chroma, verzadiging of kleurrijkheid.\n Het histogram toont chromaticiteit (Lab) voor CIECAM-aanpassingen.\nHet histogram toont C, S en M na toepassing van CIECAM indien de optie 'Toon CIECAM-uitvoer' is aangevinkt.\nC, S en M worden niet getoond in het hoofdhistogram. \nDe definitieve uitvoer is te zien in het histogrampaneel. +TP_COLORAPP_DATACIE;CIECAM02 uitvoerhistogram in de curven +TP_COLORAPP_DATACIE_TOOLTIP;Indien aangevinkt tonen de histogrammen van de CIECAM02-curven bij benadering de waarden/reeksen voor J of Q, en C, S of M na de CIECAM02-aanpassingen.\nDit heeft geen invloed op het hoofdhistogram.\n\nIndien uitgevinkt tonen de histogrammen van de CIECAM02-curven de Lab-waarden zoals deze waren voor de CIECAM02-aanpassingen +TP_COLORAPP_FREE;Vrije temp + groen + CAT02 + [uitvoer] +TP_COLORAPP_GAMUT;Beperk kleurbereik (Lab) TP_COLORAPP_HUE;Tint (h) TP_COLORAPP_HUE_TOOLTIP;Tint (h) - hoek tussen 0° en 360° TP_COLORAPP_LABEL;CIE Color Appearance Model 2002 TP_COLORAPP_LABEL_CAM02;Afbeelding wijzigen -TP_COLORAPP_LABEL_SCENE;Opnameomstandigheden +TP_COLORAPP_LABEL_SCENE;Scène-omstandigheden TP_COLORAPP_LABEL_VIEWING;Weergaveomstandigheden TP_COLORAPP_LIGHT;Lichtheid (J) -TP_COLORAPP_LIGHT_TOOLTIP;Lichtheid in CIECAM02 verschilt van Lab en RGB lichtheid +TP_COLORAPP_LIGHT_TOOLTIP;Lichtheid in CIECAM02 verschilt van Lab en RGB TP_COLORAPP_MEANLUMINANCE;Gemiddelde luminantie (Yb%) -TP_COLORAPP_MODEL;Witpunt Model -TP_COLORAPP_MODEL_TOOLTIP;WB [RT] + [uitvoer]:\nRT's WB wordt gebruikt voor de opname, CIECAM02 wordt gezet op D50. Het uitvoerapparaat's wit gebruikt de instelling van Voorkeuren > Kleurbeheer\n\nWB [RT+CAT02] + [output]:\nRT's WB instellingen worden gebruikt door CAT02 en het uitvoerapparaat's wit gebruikt de waarde van de Voorkeuren. +TP_COLORAPP_MODEL;Witpuntmodel +TP_COLORAPP_MODEL_TOOLTIP;WitpuntmodelWB [RT] + [uitvoer]:\nRT's witbalans wordt gebruikt voor de scène (opname), CIECAM02 gebruikt D50. De witbalans van het uitvoerapparaat (beeldscherm bv.) wordt opgegeven in Weergaveomstandigheden. wit gebruikt de instelling van Voorkeuren > Kleurbeheer\n\nWB [RT+CAT02/16] + [uitvoer]:\nDe witbalansinstellingen van RT worden gebruikt door CAT02 en de witbalans van het uitvoerapparaat wordt opgegeven in Weergaveomstandigheden.\n\nFree temp + tint + CAT02/16 + [uitvoer]: kleurtemperatuur en tint worden opgegeven door de gebruiker en de witbalans van het uitvoerapparaat wordt opgegeven in Weergaveomstandigheden. TP_COLORAPP_NEUTRAL;Terugzetten TP_COLORAPP_NEUTRAL_TOOLTIP;Zet alle regelaars, vinkjes en curves terug naar hun standaardwaarde -TP_COLORAPP_RSTPRO;Rode en Huidtinten bescherming -TP_COLORAPP_RSTPRO_TOOLTIP;Rode en Huidtinten bescherming (schuifbalk en curven) +TP_COLORAPP_RSTPRO;Bescherming huid- en rode tinten +TP_COLORAPP_RSTPRO_TOOLTIP;Bescherm huid- en rode tinten (schuifbalk en curven) TP_COLORAPP_SURROUND;Omgeving -TP_COLORAPP_SURROUND_AVER;Gemmiddeld +TP_COLORAPP_SURROUND_AVER;Gemiddeld TP_COLORAPP_SURROUND_DARK;Donker TP_COLORAPP_SURROUND_DIM;Gedimd TP_COLORAPP_SURROUND_EXDARK;Duister -TP_COLORAPP_SURROUND_TOOLTIP;Verander tonen en kleuren rekening houdend met de weergaveomstandigheden van het uitvoerapparaat\n\nGemiddeld:\nGemiddeld verlichte omgeving (standaard)\nDe afbeelding zal niet veranderen \n\nGedimd:\nGedimde omgeving (TV)\nDe afbeelding zal enigszins donkerder worden\n\nDonker:\nDonkere omgeving (projector)\nDe afbeelding zal veel donkerder worden\n\nDuister:\nDuistere omgeving\nDe afbeelding zal zeer donker worden +TP_COLORAPP_SURROUND_TOOLTIP;Verander tonen en kleuren rekening houdend met de weergaveomstandigheden van het uitvoerapparaat\n\nGemiddeld:\nGemiddeld verlichte omgeving (standaard)\nDe afbeelding zal niet veranderen \n\nGedimd:\nGedimde omgeving (TV)\nDe afbeelding zal enigszins donkerder worden\n\nDonker:\nDonkere omgeving (projector)\nDe afbeelding zal veel donkerder worden\n\nDuister:\nDuistere omgeving\nDe afbeelding zal zeer donker worden. TP_COLORAPP_TCMODE_BRIGHTNESS;Helderheid TP_COLORAPP_TCMODE_CHROMA;Chroma TP_COLORAPP_TCMODE_COLORF;Kleurrijkheid TP_COLORAPP_TCMODE_LABEL1;Curve modus 1 TP_COLORAPP_TCMODE_LABEL2;Curve modus 2 -TP_COLORAPP_TCMODE_LABEL3;Curve chroma modus -TP_COLORAPP_TCMODE_LIGHTNESS;lichtheid +TP_COLORAPP_TCMODE_LABEL3;Curve chroma-modus +TP_COLORAPP_TCMODE_LIGHTNESS;Lichtheid TP_COLORAPP_TCMODE_SATUR;Verzadiging TP_COLORAPP_TEMP_TOOLTIP;Zet altijd Tint=1 om een lichtbron te selecteren.\n\nA temp=2856\nD50 temp=5003\nD55 temp=5503\nD65 temp=6504\nD75 temp=7504 -TP_COLORAPP_TONECIE;Tonemapping gebruik makend van CIECAM -TP_COLORAPP_TONECIE_TOOLTIP;Indien uitgezet zal tonemapping plaats vinden in Lab.\nIndien aangezet zal tonemapping gebruik maken van CIECAM02.\nVoorwaarde is dat Tonemapping (Lab/CIECAM02) actief is. +TP_COLORAPP_TONECIE;Tonemappen met CIECAM +TP_COLORAPP_TONECIE_TOOLTIP;Indien uitgevinkt zal het toonmappen plaatsvinden in Lab.\nIndien aangevinkt zal toonmappen gebruikmaken van CIECAM02.\nVoorwaarde is dat Tonemappen (Lab/CIECAM02) actief is. TP_COLORAPP_VIEWING_ABSOLUTELUMINANCE_TOOLTIP;Absolute luminantie van de weergaveomgeving \n(gebruikelijk 16cd/m²) TP_COLORAPP_WBCAM;WB [RT+CAT02] + [uitvoer] TP_COLORAPP_WBRT;WB [RT] + [uitvoer] @@ -1451,14 +1454,14 @@ TP_COLORTONING_BALANCE;Balans TP_COLORTONING_BY;o C/L TP_COLORTONING_CHROMAC;Dekking TP_COLORTONING_COLOR;Kleur -TP_COLORTONING_CURVEEDITOR_CL_TOOLTIP;Chroma dekking als een functie van Luminantie oC=f(L) +TP_COLORTONING_CURVEEDITOR_CL_TOOLTIP;Chroma-dekking als functie van Luminantie oC=f(L) TP_COLORTONING_HIGHLIGHT;Hoge lichten TP_COLORTONING_HUE;Kleurtint -TP_COLORTONING_LAB;L*a*b* menging +TP_COLORTONING_LAB;L*a*b*-menging TP_COLORTONING_LABEL;Kleurtinten -TP_COLORTONING_LABGRID;L*a*b* kleurcorrectie raster +TP_COLORTONING_LABGRID;L*a*b* kleurcorrectieraster TP_COLORTONING_LABGRID_VALUES;HL: a=%1 b=%2\nS: a=%3 b=%4 -TP_COLORTONING_LABREGIONS;Kleurcorrectie gebieden +TP_COLORTONING_LABREGIONS;Kleurcorrectiegebieden TP_COLORTONING_LABREGION_ABVALUES;a=%1 b=%2 TP_COLORTONING_LABREGION_CHANNEL;Kanaal TP_COLORTONING_LABREGION_CHANNEL_ALL;Alle @@ -1467,12 +1470,12 @@ TP_COLORTONING_LABREGION_CHANNEL_G;Groen TP_COLORTONING_LABREGION_CHANNEL_R;Rood TP_COLORTONING_LABREGION_CHROMATICITYMASK;C TP_COLORTONING_LABREGION_HUEMASK;H -TP_COLORTONING_LABREGION_LIGHTNESS;Helderheid(L) +TP_COLORTONING_LABREGION_LIGHTNESS;Helderheid (L) TP_COLORTONING_LABREGION_LIGHTNESSMASK;L TP_COLORTONING_LABREGION_LIST_TITLE;Correctie TP_COLORTONING_LABREGION_MASK;Masker TP_COLORTONING_LABREGION_MASKBLUR;Verzachtingsmasker -TP_COLORTONING_LABREGION_OFFSET;Offset +TP_COLORTONING_LABREGION_OFFSET;Verschuiving TP_COLORTONING_LABREGION_POWER;Kracht TP_COLORTONING_LABREGION_SATURATION;Verzadiging TP_COLORTONING_LABREGION_SHOWMASK;Toon masker @@ -1481,26 +1484,26 @@ TP_COLORTONING_LUMA;Luminantie TP_COLORTONING_LUMAMODE;Behoud luminantie TP_COLORTONING_LUMAMODE_TOOLTIP;Wanneer de kleur wijzigt (rood, groen, cyaan, blauw, etc.) blijft de luminatie van elke pixel behouden. TP_COLORTONING_METHOD;Methode -TP_COLORTONING_METHOD_TOOLTIP;"L*a*b* menging", "RGB schuifbalk" en "RGB curven" gebruiken interpolatie kleurmenging.\n"Kleurbalans" (Schaduwen/Midden tonen/Hoge lichten) en "Verzadigen 2 kleuren" gebruiken directe kleuren.\nAlle methodes werken ook op Zwart-Wit. -TP_COLORTONING_MIDTONES;Midden tonen +TP_COLORTONING_METHOD_TOOLTIP;L*a*b*-menging, RGB-schuifbalken en RGB-curven gebruiken geïnterpoleerde kleurmenging.\nKleurbalans SMH en Verzadiging twee kleuren gebruiken directe kleuren.\nAlle methodes werken ook met zwart-wit. +TP_COLORTONING_MIDTONES;Middentonen TP_COLORTONING_NEUTRAL;Terug naar beginstand -TP_COLORTONING_NEUTRAL_TOOLTIP;Zet alle waarden (Schaduwen, Midden tonen, Hoge lichten) terug naar default. +TP_COLORTONING_NEUTRAL_TOOLTIP;Zet alle waarden (schaduwen, middentonen, hoge lichten) terug naar hun standaardwaarden. TP_COLORTONING_OPACITY;Dekking TP_COLORTONING_RGBCURVES;RGB - Curven TP_COLORTONING_RGBSLIDERS;RGB - Schuifbalken -TP_COLORTONING_SA;Verzadiging bescherming +TP_COLORTONING_SA;Bescherm verzadiging TP_COLORTONING_SATURATEDOPACITY;Sterkte TP_COLORTONING_SATURATIONTHRESHOLD;Drempel TP_COLORTONING_SHADOWS;Schaduwen -TP_COLORTONING_SPLITCO;Schaduwen/Midden tonen/Hoge lichten +TP_COLORTONING_SPLITCO;Schaduwen/Middentonen/Hoge lichten TP_COLORTONING_SPLITCOCO;Kleurbalans SMH -TP_COLORTONING_SPLITLR;Verzadiging 2 kleuren +TP_COLORTONING_SPLITLR;Verzadiging twee kleuren TP_COLORTONING_STR;Sterkte TP_COLORTONING_STRENGTH;Sterkte -TP_COLORTONING_TWO2;Speciaal chroma '2 kleuren' +TP_COLORTONING_TWO2;Speciaal chroma twee kleuren TP_COLORTONING_TWOALL;Speciaal chroma TP_COLORTONING_TWOBY;Speciaal a* en b* -TP_COLORTONING_TWOCOLOR_TOOLTIP;Standaard chroma:\nLineaire response, a* = b*.\n\nSpeciaal chroma:\nLineaire response, a* = b*, maar zonder begrenzing - probeer beneden de diagonaal.\n\nSpeciaal a* en b*:\nLineaire response zonder begrenzing met aparte curves voor a* en b*. Bedoeld voor speciale effecten.\n\nSpeciaal chroma 2 kleuren: meest voorspelbare uitkomst. +TP_COLORTONING_TWOCOLOR_TOOLTIP;Standaard chroma:\nLineaire respons, a* = b*.\n\nSpeciaal chroma:\nLineaire respons, a* = b*, maar ontbonden - gebruik de diagonaal hieronder.\n\nSpeciaal a* en b*:\nLineair ontbonden respons met aparte curves voor a* en b*. Bedoeld voor speciale effecten.\n\nSpeciaal chroma twee kleuren: beter voorspelbaar. TP_COLORTONING_TWOSTD;Standaard chroma TP_CROP_FIXRATIO;Verhouding: TP_CROP_GTDIAGONALS;Diagonaalmethode @@ -1527,79 +1530,79 @@ TP_DEFRINGE_LABEL;Verzachten (Lab/CIECAM02) TP_DEFRINGE_RADIUS;Straal TP_DEFRINGE_THRESHOLD;Drempel TP_DEHAZE_DEPTH;Diepte -TP_DEHAZE_LABEL;Nevel vermindering -TP_DEHAZE_SHOW_DEPTH_MAP;Toon de dieptemap +TP_DEHAZE_LABEL;Nevelvermindering +TP_DEHAZE_SHOW_DEPTH_MAP;Toon dieptemap TP_DEHAZE_STRENGTH;Sterkte TP_DIRPYRDENOISE_CHROMINANCE_AMZ;Auto multi-zone TP_DIRPYRDENOISE_CHROMINANCE_AUTOGLOBAL;Automatisch algemeen TP_DIRPYRDENOISE_CHROMINANCE_BLUEYELLOW;Chrominantie Blauw & Geel -TP_DIRPYRDENOISE_CHROMINANCE_CURVE;Chrominantie curve -TP_DIRPYRDENOISE_CHROMINANCE_CURVE_TOOLTIP;Verhoog (vermenigvuldig) de waarde van alle chrominantie regelaars.\nDeze curve regelt de sterkte van de chromatische ruisvermindering als een functie van de chromaticiteit, om bijvoorbeeld het effect te vergroten in gebieden met lage verzadiging en te verminderen in deze met lage verzadiging. +TP_DIRPYRDENOISE_CHROMINANCE_CURVE;Chrominantie-curve +TP_DIRPYRDENOISE_CHROMINANCE_CURVE_TOOLTIP;Verhoog (vermenigvuldig) de waarde van alle chrominantieschuiven.\nDeze curve regelt de sterkte van de chromatische ruisvermindering als een functie van de chromaticiteit, om bijvoorbeeld het effect te verhogen in gebieden met weinig verzadiging en te verlagen in gebieden met veel verzadiging. TP_DIRPYRDENOISE_CHROMINANCE_FRAME;Chrominantie TP_DIRPYRDENOISE_CHROMINANCE_MANUAL;Handmatig TP_DIRPYRDENOISE_CHROMINANCE_MASTER;Chrominantie (master) -TP_DIRPYRDENOISE_CHROMINANCE_METHOD;Auto methode -TP_DIRPYRDENOISE_CHROMINANCE_METHODADVANCED_TOOLTIP;Handmatig\nWerkt op de hele afbeelding.\nDe instellingen voor ruisonderdrukking moeten zelf worden bepaald.\n\nAutomatisch algemeen\nWerkt op de hele afbeelding.\n9 gebieden worden gebruikt om de chroma ruisonderdrukking te bepalen.\n\nVoorbeeld\nWerkt op de hele afbeelding.\nHet deel van de afbeelding dat zichtbaar is in het voorbeeld wordt gebruikt om de chroma ruisonderdrukking te bepalen. -TP_DIRPYRDENOISE_CHROMINANCE_METHOD_TOOLTIP;Handmatig\nWerkt op de hele afbeelding.\nDe instellingen voor ruisonderdrukking moeten zelf worden bepaald.\n\nAutomatisch algemeen\nWerkt op de hele afbeelding.\n9 gebieden worden gebruikt om de chroma ruisonderdrukking te bepalen.\n\nAutomatisch multi-zones\nGeen voorbeeld - werkt alleen bij opslaan. Gebruik de "Voorbeeld" methode om een idee te krijgen van het verwachte resultaat door de tegelgrootte en het centrum van het voorbeeld te matchen.\nDe afbeelding is verdeeld in tegels (10 tot 70 afhankelijk van de afbeeldingsgrootte) en van elke tegel wordt de eigen chroma ruisonderdrukking bepaald.\n\Voorbeeld\nWerkt op de hele afbeelding.\nHet deel van de afbeelding dat zichtbaar is in het voorbeeld wordt gebruikt om de chroma ruisonderdrukking te bepalen. +TP_DIRPYRDENOISE_CHROMINANCE_METHOD;Auto-methode +TP_DIRPYRDENOISE_CHROMINANCE_METHODADVANCED_TOOLTIP;Handmatig\nWerkt op de hele afbeelding.\nDe instellingen voor ruisonderdrukking moeten zelf worden bepaald.\n\nAutomatisch algemeen\nWerkt op de hele afbeelding.\nNegen gebieden worden gebruikt om de chroma-ruisonderdrukking te bepalen.\n\nVoorbeeld\nWerkt op de hele afbeelding.\nHet deel van de afbeelding dat zichtbaar is in het voorbeeld wordt gebruikt om de chroma-ruisonderdrukking te bepalen. +TP_DIRPYRDENOISE_CHROMINANCE_METHOD_TOOLTIP;Handmatig\nWerkt op de hele afbeelding.\nDe instellingen voor ruisonderdrukking moeten zelf worden bepaald.\n\nAutomatisch algemeen\nWerkt op de hele afbeelding.\nNegen gebieden worden gebruikt om de chroma-ruisonderdrukking te bepalen.\n\nAutomatisch multi-zones\nGeen voorbeeld - werkt alleen bij opslaan. Gebruik de Voorbeeld-methode om een idee te krijgen van het verwachte resultaat door de tegelgrootte en het centrum van het voorbeeld te matchen.\nDe afbeelding is verdeeld in tegels (10 tot 70 afhankelijk van de afbeeldingsgrootte) en van elke tegel wordt de eigen chroma-ruisonderdrukking bepaald.\n\Voorbeeld\nWerkt op de hele afbeelding.\nHet deel van de afbeelding dat zichtbaar is in het voorbeeld wordt gebruikt om de chroma-ruisonderdrukking te bepalen. TP_DIRPYRDENOISE_CHROMINANCE_PMZ;Voorbeeld multi-zone TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW;Voorbeeld -TP_DIRPYRDENOISE_CHROMINANCE_PREVIEWRESIDUAL_INFO_TOOLTIP;Toont de overgebleven ruisniveaus van het zichtbare deel van de afbeelding in het voorbeeld na wavelet.\n\n>300 Veel ruis\n100-300 Gemiddeld ruis\n50-100 Weinig ruis\n<50 Zeer weinig ruis\n\nVoorzichtig, de waarden zullen verschillen tussen RGB en L*a*b* mode. De RGB waarden zijn minder accuraat omdat de RGB mode luminantie en chrominantie niet volledig scheidt. +TP_DIRPYRDENOISE_CHROMINANCE_PREVIEWRESIDUAL_INFO_TOOLTIP;Toont de overgebleven ruisniveaus van het zichtbare deel van de afbeelding in het voorbeeld na Wavelet.\n\n>300 Veel ruis\n100-300 Gemiddelde ruis\n50-100 Weinig ruis\n<50 Zeer weinig ruis\n\nVoorzichtig, de waarden zullen verschillen tussen RGB- en L*a*b*-modus. De RGB-waarden zijn minder accuraat omdat de RGB-modus luminantie en chrominantie niet volledig scheidt. TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_INFO;Voorbeeld grootte=%1, Centrum: Px=%2 Py=%3 TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO;Voorbeeld ruis: Gemiddeld=%1 Hoog=%2 TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO_EMPTY;Voorbeeld ruis: Gemiddeld= - Hoog= - -TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_TILEINFO;Tegel grootte=%1, Centrum: Tx=%2 Ty=%3 +TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_TILEINFO;Tegelgrootte=%1, Centrum: Tx=%2 Ty=%3 TP_DIRPYRDENOISE_CHROMINANCE_REDGREEN;Chrominantie Rood & Groen TP_DIRPYRDENOISE_LABEL;Ruisvermindering TP_DIRPYRDENOISE_LUMINANCE_CONTROL;Type gereedschap -TP_DIRPYRDENOISE_LUMINANCE_CURVE;Luminantie curve -TP_DIRPYRDENOISE_LUMINANCE_DETAIL;Luminantie Detail +TP_DIRPYRDENOISE_LUMINANCE_CURVE;Luminantie-curve +TP_DIRPYRDENOISE_LUMINANCE_DETAIL;Luminantie-detail TP_DIRPYRDENOISE_LUMINANCE_FRAME;Luminantie TP_DIRPYRDENOISE_LUMINANCE_SMOOTHING;Luminantie TP_DIRPYRDENOISE_MAIN_COLORSPACE;Methode TP_DIRPYRDENOISE_MAIN_COLORSPACE_LAB;L*a*b* TP_DIRPYRDENOISE_MAIN_COLORSPACE_RGB;RGB -TP_DIRPYRDENOISE_MAIN_COLORSPACE_TOOLTIP;Voor raw afbeeldingen kan RGB of Lab methode worden gebruikt.\n\nVoor niet-raw afbeeldingen zal altijd de Lab methode worden gebruikt, ongeacht de geselecteerde methode. +TP_DIRPYRDENOISE_MAIN_COLORSPACE_TOOLTIP;Voor RAW-afbeeldingen kan de RGB- of Lab-methode worden gebruikt.\n\nVoor niet-RAW-afbeeldingen zal altijd de Lab-methode worden gebruikt, ongeacht de geselecteerde methode. TP_DIRPYRDENOISE_MAIN_GAMMA;Gamma -TP_DIRPYRDENOISE_MAIN_GAMMA_TOOLTIP;Gamma varieert de mate van ruisonderdrukking over het bereik van tinten. Kleinere waarden beperken zich tot schaduwen, terwijl grotere waarden het bereik oprekken tot heldere tinten +TP_DIRPYRDENOISE_MAIN_GAMMA_TOOLTIP;Gamma varieert de mate van ruisonderdrukking over het bereik van tinten. Kleinere waarden beperken zich tot schaduwen, terwijl grotere waarden het bereik oprekken tot heldere tinten. TP_DIRPYRDENOISE_MAIN_MODE;Kwaliteit TP_DIRPYRDENOISE_MAIN_MODE_AGGRESSIVE;Hoog TP_DIRPYRDENOISE_MAIN_MODE_CONSERVATIVE;Standaard TP_DIRPYRDENOISE_MAIN_MODE_TOOLTIP;De kwaliteit kan worden aangepast aan de hoeveelheid ruis. \nHoog verbetert de ruisonderdrukking, maar verlengt de verwerkingstijd TP_DIRPYRDENOISE_MEDIAN_METHOD;Methode -TP_DIRPYRDENOISE_MEDIAN_METHOD_CHROMINANCE;Alleen chroma +TP_DIRPYRDENOISE_MEDIAN_METHOD_CHROMINANCE;Alleen Chroma TP_DIRPYRDENOISE_MEDIAN_METHOD_LAB;L*a*b* -TP_DIRPYRDENOISE_MEDIAN_METHOD_LABEL;Mediaan filter +TP_DIRPYRDENOISE_MEDIAN_METHOD_LABEL;Mediaan-filter TP_DIRPYRDENOISE_MEDIAN_METHOD_LUMINANCE;Alleen Luminantie TP_DIRPYRDENOISE_MEDIAN_METHOD_RGB;RGB -TP_DIRPYRDENOISE_MEDIAN_METHOD_TOOLTIP;De "Alleen Luminantie" en "L*a*b*" methodes worden meteen na de wavelet stap uitgevoerd bij het onderdrukken van ruis.\nDe "RGB" methode, wordt echter als laatste stap uitgevoerd bij ruisonderdrukking. +TP_DIRPYRDENOISE_MEDIAN_METHOD_TOOLTIP;De Alleen Luminantie- en L*a*b*-methodes worden meteen na de Wavelet-stap uitgevoerd bij het onderdrukken van ruis.\nDe RGB-methode wordt echter als laatste stap uitgevoerd bij ruisonderdrukking. TP_DIRPYRDENOISE_MEDIAN_METHOD_WEIGHTED;Gewogen L* (weinig) + a*b* (normaal) -TP_DIRPYRDENOISE_MEDIAN_PASSES;Mediaan herhalingen -TP_DIRPYRDENOISE_MEDIAN_PASSES_TOOLTIP;Het gebruik van drie mediaan filter herhalingen met een 3×3 venster grootte geeft meestal een beter resultaat dan het gebruik van één mediaan filter herhaling met eeen 7×7 venster grootte. +TP_DIRPYRDENOISE_MEDIAN_PASSES;Mediaan-herhalingen +TP_DIRPYRDENOISE_MEDIAN_PASSES_TOOLTIP;Het gebruik van drie mediaanfilter-herhalingen met een 3×3 venstergrootte geeft meestal een beter resultaat dan het gebruik van één mediaanfilter-herhaling met een 7×7 venstergrootte. TP_DIRPYRDENOISE_MEDIAN_TYPE;Type -TP_DIRPYRDENOISE_MEDIAN_TYPE_TOOLTIP;Gebruik een mediaan filter van gewenste venster grootte. Hoe groter het venster hoe langer het duurt.\n\n3×3 zacht: behandeld 5 pixels in een 3×3 pixel venster.\n3×3: behandeld 9 pixels in een 3×3 pixel venster.\n5×5 zacht: behandeld 13 pixels in een 5×5 pixel venster.\n5×5: behandeld 25 pixels in een 5×5 pixel venster.\n7×7: behandeld 49 pixels in een 7×7 pixel venster.\n9×9: behandeld 81 pixels in a 9×9 pixel venster.\n\nSoms is het mogelijk om een betere kwaliteit te krijgen door het uitvoeren van meerdere herhalingen met een kleiner venster dan één uitvoering met een groter venster. +TP_DIRPYRDENOISE_MEDIAN_TYPE_TOOLTIP;Gebruik een mediaanfilter van gewenste venstergrootte. Hoe groter het venster hoe langer het duurt.\n\n3×3 zacht: behandelt 5 pixels in een 3×3 pixelvenster.\n3×3: behandelt 9 pixels in een 3×3 pixelvenster.\n5×5 zacht: behandelt 13 pixels in een 5×5 pixelvenster.\n5×5: behandelt 25 pixels in een 5×5 pixelvenster.\n7×7: behandelt 49 pixels in een 7×7 pixelvenster.\n9×9: behandelt 81 pixels in een 9×9 pixelvenster.\n\nSoms is het mogelijk om een betere kwaliteit te krijgen door het uitvoeren van meerdere herhalingen met een kleiner venster dan één uitvoering met een groter venster. TP_DIRPYRDENOISE_TYPE_3X3;3×3 TP_DIRPYRDENOISE_TYPE_3X3SOFT;3×3 zacht TP_DIRPYRDENOISE_TYPE_5X5;5×5 TP_DIRPYRDENOISE_TYPE_5X5SOFT;5×5 zacht TP_DIRPYRDENOISE_TYPE_7X7;7×7 TP_DIRPYRDENOISE_TYPE_9X9;9×9 -TP_DIRPYREQUALIZER_ALGO;Algoritme Huid -TP_DIRPYREQUALIZER_ALGO_TOOLTIP;Fijn: behoud de kleuren van de huid, minimaliseert de actie op andere kleuren\nGroot: vermijd artefacten -TP_DIRPYREQUALIZER_ARTIF;Verminder artefacten +TP_DIRPYREQUALIZER_ALGO;Huid-algoritme +TP_DIRPYREQUALIZER_ALGO_TOOLTIP;Fijn: behoud de huidskleuren, minimaliseert de actie op andere kleuren\nGroot: vermijd onregelmatigheden +TP_DIRPYREQUALIZER_ARTIF;Verminder onregelmatigheden TP_DIRPYREQUALIZER_HUESKIN;Huidtint -TP_DIRPYREQUALIZER_HUESKIN_TOOLTIP;De onderste punten zetten het begin van de transitie zone, en de bovenste punten het einde. Daar is het effect het sterkst.\n\nAls je de zone sterk moet verschuiven of als er sprake is van artefacten, dan is de witbalans incorrect.\nJe kunt de zone enigzins wijzigen om te voorkomen dat de rest van de afbeelding wordt beïnvloed. +TP_DIRPYREQUALIZER_HUESKIN_TOOLTIP;De onderste punten zetten het begin van de transitiezone, en de bovenste punten het einde. Daar is het effect het sterkst.\n\nAls je de zone sterk moet verschuiven of als er sprake is van artefacten, dan is de witbalans incorrect.\nJe kunt de zone enigszins wijzigen om te voorkomen dat de rest van de afbeelding wordt beïnvloed. TP_DIRPYREQUALIZER_LABEL;Detailcontrast (Lab/CIECAM02) TP_DIRPYREQUALIZER_LUMACOARSEST;grofste -TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast- -TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast+ +TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;< Contrast +TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast > TP_DIRPYREQUALIZER_LUMAFINEST;fijnste TP_DIRPYREQUALIZER_LUMANEUTRAL;Neutraal TP_DIRPYREQUALIZER_SKIN;Huidtinten Wijzigen/Beschermen -TP_DIRPYREQUALIZER_SKIN_TOOLTIP;Bij -100 huidtinten worden gewijzigd.\nBij 0 alle tinten worden gelijk behandeld.\nBij +100 huidtinten worden beschermd en alle andere tinten worden gewijzigd +TP_DIRPYREQUALIZER_SKIN_TOOLTIP;Bij -100 worden huidtinten gewijzigd.\nBij 0 worden alle tinten gelijk behandeld.\nBij +100 worden huidtinten beschermd en alle andere tinten worden gewijzigd TP_DIRPYREQUALIZER_THRESHOLD;Drempel -TP_DIRPYREQUALIZER_TOOLTIP;Probeert artefacten te verminderen die het gevolg zijn van kleurverschuiving van de huidtinten(hue, chroma, luma) en de rest van de afbeelding +TP_DIRPYREQUALIZER_TOOLTIP;Probeer onregelmatigheden te verminderen die het gevolg zijn van een kleurverschuiving van de huidtinten (tint, chroma, luma) en de rest van de afbeelding TP_DISTORTION_AMOUNT;Hoeveelheid -TP_DISTORTION_AUTO_TOOLTIP;Corrigeert automatisch lens afwijkingen in raw afbeeldingen op basis van de ingebedde JPEG indien deze is gecorrigeerd door de camera. +TP_DISTORTION_AUTO_TOOLTIP;Corrigeert automatisch lensafwijkingen in RAW-afbeeldingen op basis van de ingebedde JPEG indien deze is gecorrigeerd door de camera. TP_DISTORTION_LABEL;Corrigeer lensvervorming TP_EPD_EDGESTOPPING;Randen TP_EPD_GAMMA;Gamma @@ -1611,42 +1614,42 @@ TP_EXPOSURE_AUTOLEVELS;Autom. niveaus TP_EXPOSURE_AUTOLEVELS_TOOLTIP;Activeer automatische niveaus\nActiveer Herstel Hoge lichten indien nodig. TP_EXPOSURE_BLACKLEVEL;Schaduwen TP_EXPOSURE_BRIGHTNESS;Helderheid -TP_EXPOSURE_CLAMPOOG;Knip kleuren die buiten het gamma vallen -TP_EXPOSURE_CLIP;Clip % +TP_EXPOSURE_CLAMPOOG;Kap kleuren die buiten het gamma vallen af +TP_EXPOSURE_CLIP;Afkap % TP_EXPOSURE_CLIP_TOOLTIP;Het deel van de pixels dat moet worden hersteld bij gebruik van automatische niveaus. -TP_EXPOSURE_COMPRHIGHLIGHTS;Hoge lichten Comprimeren -TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Drempel Hoge lichten Comprimeren +TP_EXPOSURE_COMPRHIGHLIGHTS;Hoge lichten comprimeren +TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Drempel compressie hoge lichten TP_EXPOSURE_COMPRSHADOWS;Schaduwcompressie TP_EXPOSURE_CONTRAST;Contrast TP_EXPOSURE_CURVEEDITOR;Tooncurve -TP_EXPOSURE_CURVEEDITOR1;Toon curve 1 -TP_EXPOSURE_CURVEEDITOR2;Toon curve 2 +TP_EXPOSURE_CURVEEDITOR1;Tooncurve 1 +TP_EXPOSURE_CURVEEDITOR2;Tooncurve 2 TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Raadpleeg de volgende paragraaf van de handleiding om te leren hoe U het beste resultaat kunt boeken bij het werken met dubbele curven:\n The Toolbox > Exposure Tab > Exposure Panel > Tone Curve TP_EXPOSURE_EXPCOMP;Belichtingscompensatie -TP_EXPOSURE_HISTMATCHING;Automatische Tooncurve -TP_EXPOSURE_HISTMATCHING_TOOLTIP;Pas automatisch de curves en schuifregelaars aan (behalve belichtingscompensatie) om overeen te komen met de ingesloten JPEG miniatuur. +TP_EXPOSURE_HISTMATCHING;Automatische tooncurve +TP_EXPOSURE_HISTMATCHING_TOOLTIP;Pas automatisch de curves en schuifregelaars aan (behalve belichtingscompensatie) volgens de in de RAW ingebedde JPEG-afbeelding. TP_EXPOSURE_LABEL;Belichting TP_EXPOSURE_SATURATION;Verzadiging -TP_EXPOSURE_TCMODE_FILMLIKE;Film-achtig +TP_EXPOSURE_TCMODE_FILMLIKE;Filmachtig TP_EXPOSURE_TCMODE_LABEL1;Curve modus 1 TP_EXPOSURE_TCMODE_LABEL2;Curve modus 2 TP_EXPOSURE_TCMODE_LUMINANCE;Luminantie TP_EXPOSURE_TCMODE_PERCEPTUAL;Perceptueel TP_EXPOSURE_TCMODE_SATANDVALBLENDING;Verzadiging en Waarde mengen TP_EXPOSURE_TCMODE_STANDARD;Standaard -TP_EXPOSURE_TCMODE_WEIGHTEDSTD;Gewogen Standaard -TP_EXPOS_BLACKPOINT_LABEL;Raw Zwartpunten -TP_EXPOS_WHITEPOINT_LABEL;Raw Witpunten -TP_FILMNEGATIVE_BLUE;Blauw verhouding -TP_FILMNEGATIVE_GREEN;Referentie exponent (contrast) -TP_FILMNEGATIVE_GUESS_TOOLTIP;Zet automatisch de rood/groen verhouding door 2 gebieden te kiezen met een neutrale tint (geen kleur) in het origineel. De gebieden moeten verschillen in helderheid. Zet de witbalans nadien. -TP_FILMNEGATIVE_LABEL;Film Negatief +TP_EXPOSURE_TCMODE_WEIGHTEDSTD;Gewogen standaard +TP_EXPOS_BLACKPOINT_LABEL;Raw-zwartpunten +TP_EXPOS_WHITEPOINT_LABEL;Raw-witpunten +TP_FILMNEGATIVE_BLUE;Blauw-verhouding +TP_FILMNEGATIVE_GREEN;Referentie-exponent (contrast) +TP_FILMNEGATIVE_GUESS_TOOLTIP;Bepaal automatisch de rood/groen-verhouding door twee gebieden te kiezen met een neutrale tint (geen kleur) in het origineel. De gebieden moeten verschillen in helderheid. Kies de witbalans nadien. +TP_FILMNEGATIVE_LABEL;Filmnegatief TP_FILMNEGATIVE_PICK;Kies neutrale punten -TP_FILMNEGATIVE_RED;Rood verhouding -TP_FILMSIMULATION_LABEL;Film Simuleren -TP_FILMSIMULATION_SLOWPARSEDIR;Map met Hald CLUT afbeeldingen. Deze worden gebruikt voor Film Simuleren.\nGa naar Voorkeuren > Beeldverwerking > Film Simuleren\nDe aanbeveling is om een map te gebruiken die alleen Hald CLUT afbeeldingen bevat.\n\nLees het Film Simuleren artikel in RawPedia voor meer informatie.\n\nWilt u de scan afbreken? +TP_FILMNEGATIVE_RED;Rood-verhouding +TP_FILMSIMULATION_LABEL;Filmsimulatie +TP_FILMSIMULATION_SLOWPARSEDIR;RawTherapee zoekt naar HaldCLUT-afbeeldingen om de Filmsimulatie uit te voeren, maar deze bevinden zich in een map die teveel tijd kost om te lezen.\n Kijk bij Voorkeuren > Beeldverwerking > Filmsimulatie om te zien welke map gebruikt wordt\nAanbevolen wordt om een map te gebruiken die alleen HaldCLUT-afbeeldingen bevat of kies een lege folder als u Filmsimulatie niet wilt gebruiken.\n\nMeer informatie is te vinden in het (Engelstalige) artikel over Filmsimulatie op RawPedia.\n\nWilt u de scan nu afbreken? TP_FILMSIMULATION_STRENGTH;Sterkte -TP_FILMSIMULATION_ZEROCLUTSFOUND;Specificeer HaldCLUT map in Voorkeuren +TP_FILMSIMULATION_ZEROCLUTSFOUND;Specificeer HaldCLUT-map in Voorkeuren TP_FLATFIELD_AUTOSELECT;Automatische selectie TP_FLATFIELD_BLURRADIUS;Verzachten: straal TP_FLATFIELD_BLURTYPE;Verzachten: type @@ -1654,8 +1657,8 @@ TP_FLATFIELD_BT_AREA;Gebied TP_FLATFIELD_BT_HORIZONTAL;Horizontaal TP_FLATFIELD_BT_VERTHORIZ;Vert. + Horiz. TP_FLATFIELD_BT_VERTICAL;Verticaal -TP_FLATFIELD_CLIPCONTROL;Clip controle -TP_FLATFIELD_CLIPCONTROL_TOOLTIP;Clip controle vermijd geclipte hoge lichten veroorzaakt door het toepassen van vlakveld. Als er al geclipte hoge lichten waren voor het toepassen van vlakveld dan kan clip controle kleurzweem veroorzaken. +TP_FLATFIELD_CLIPCONTROL;Afkapcontrole +TP_FLATFIELD_CLIPCONTROL_TOOLTIP;Afkapcontrole vermijdt uitgevreten hoge lichten veroorzaakt door het toepassen van een vlakveld. Als er al uitgevreten hoge lichten waren voor het toepassen van het vlakveld, dan kan afkapcontrole kleurzweem veroorzaken. TP_FLATFIELD_LABEL;Vlakveld TP_GENERAL_11SCALE_TOOLTIP;De werking is alleen zichtbaar op schaal 1:1 van het voorbeeld TP_GRADIENT_CENTER;Centrum @@ -1664,17 +1667,17 @@ TP_GRADIENT_CENTER_X_TOOLTIP;Rotatiepunt X-as: \n-100=linkerkant \n0=centrum \n+ TP_GRADIENT_CENTER_Y;Centrum Y TP_GRADIENT_CENTER_Y_TOOLTIP;Rotatiepunt Y-as: \n-100=bovenkant \n0=centrum \n+100=onderkant TP_GRADIENT_DEGREE;Hoek -TP_GRADIENT_DEGREE_TOOLTIP;Rotatie hoek in graden +TP_GRADIENT_DEGREE_TOOLTIP;Rotatiehoek in graden TP_GRADIENT_FEATHER;Verloop TP_GRADIENT_FEATHER_TOOLTIP;Verloop als percentage van de afbeeldingsdiagonaal -TP_GRADIENT_LABEL;Grijsverloop Filter +TP_GRADIENT_LABEL;Grijsverloopfilter TP_GRADIENT_STRENGTH;Sterkte TP_GRADIENT_STRENGTH_TOOLTIP;Filtersterkte in stops TP_HLREC_BLEND;Mengen -TP_HLREC_CIELAB;CIELab-blending +TP_HLREC_CIELAB;CIELab-menging TP_HLREC_COLOR;Kleurherstel TP_HLREC_ENA_TOOLTIP;Kan worden geactiveerd door automatische niveaus -TP_HLREC_LABEL;Hoge lichten Herstellen +TP_HLREC_LABEL;Hoge lichten herstellen TP_HLREC_LUMINANCE;Lichtherstel TP_HLREC_METHOD;Methode: TP_HSVEQUALIZER_CHANNEL;HSV-balans @@ -1682,20 +1685,20 @@ TP_HSVEQUALIZER_HUE;Tint TP_HSVEQUALIZER_LABEL;HSV-balans TP_HSVEQUALIZER_SAT;Verzadiging TP_HSVEQUALIZER_VAL;Waarde -TP_ICM_APPLYBASELINEEXPOSUREOFFSET;DCP basis belichting -TP_ICM_APPLYBASELINEEXPOSUREOFFSET_TOOLTIP;Gebruik de ingebedde DCP basis belichting. De instelling is allen actief als de DCP een basis belichting heeft. -TP_ICM_APPLYHUESATMAP;DCP basis tabel -TP_ICM_APPLYHUESATMAP_TOOLTIP;Gebruik de ingebedde DCP basis tabel (HueSatMap). De instelling is allen actief als de DCP een basis tabel heeft. -TP_ICM_APPLYLOOKTABLE;DCP 'look' tabel -TP_ICM_APPLYLOOKTABLE_TOOLTIP;Gebruik de ingebedde DCP 'look' tabel. De instelling is allen actief als de DCP een looktable heeft. -TP_ICM_BPC;Zwartpunt Compensatie +TP_ICM_APPLYBASELINEEXPOSUREOFFSET;DCP-basisbelichting +TP_ICM_APPLYBASELINEEXPOSUREOFFSET_TOOLTIP;Gebruik de ingebedde DCP-basisbelichting. De instelling is alleen actief als de DCP een basisbelichting heeft. +TP_ICM_APPLYHUESATMAP;DCP-basistabel +TP_ICM_APPLYHUESATMAP_TOOLTIP;Gebruik de ingebedde DCP-basistabel (HueSatMap). De instelling is alleen actief als de DCP een basistabel heeft. +TP_ICM_APPLYLOOKTABLE;DCP-look-tabel +TP_ICM_APPLYLOOKTABLE_TOOLTIP;Gebruik de ingebedde DCP-look-tabel. De instelling is alleen actief als de DCP een look-tabel heeft. +TP_ICM_BPC;Zwartpuntcompensatie TP_ICM_DCPILLUMINANT;Illuminant TP_ICM_DCPILLUMINANT_INTERPOLATED;Interpoleren -TP_ICM_DCPILLUMINANT_TOOLTIP;Kies welk ingebed DCP illuminant moet worden gebruikt. Standaard is dit "interpoleren". Dit is een mix van de twee gebaseerd op de witbalans. De instelling is alleen actief als een Dual-Illuminant DCP met interpolatie is geselecteerd. +TP_ICM_DCPILLUMINANT_TOOLTIP;Kies welk ingebed DCP-illuminant moet worden gebruikt. Standaard is dit 'interpoleren'. Dit is een mix van de twee gebaseerd op de witbalans. De instelling is alleen actief als een Dual-Illuminant DCP met interpolatie is geselecteerd. TP_ICM_INPUTCAMERA;Camera standaard TP_ICM_INPUTCAMERAICC;Camera-specifiek kleurprofiel -TP_ICM_INPUTCAMERAICC_TOOLTIP;Gebruik RawTherapee's camera-specifieke DCP- of ICC-kleurprofiel dat preciezer is dan een eenvoudige matrix. Beschikbaar voor sommige camera's. Deze profielen zijn opgeslagen in de map /iccprofiles/input en worden automatisch opgehaald gebaseerd op de exacte overeenkomst van bestandsnaam met de modelnaam van de camera. -TP_ICM_INPUTCAMERA_TOOLTIP;Gebruik de eenvoudige kleurenmatrix van dcraw, of de uitgebreidere RawTherapee-versie (indien aanwezig voor het cameramodel) of gebruik het ingebedde profiel in de DNG. +TP_ICM_INPUTCAMERAICC_TOOLTIP;Gebruik RawTherapee's camera-specifieke DCP- of ICC-invoerkleurprofielen. Deze zijn preciezer dan een eenvoudige matrix maar niet beschikbaar voor alle camera's. Deze profielen zijn opgeslagen in de map /iccprofiles/input en /dccprofiles en worden automatisch geladen gebaseerd op een bestandsnaam die exact overeenkomt met de modelnaam van de camera. +TP_ICM_INPUTCAMERA_TOOLTIP;Gebruik een eenvoudige kleurenmatrix van dcraw, een uitgebreidere RawTherapee-versie (indien aanwezig voor het cameramodel), of gebruik het ingebedde profiel in de DNG. TP_ICM_INPUTCUSTOM;Handmatig TP_ICM_INPUTCUSTOM_TOOLTIP;Selecteer eigen DCP/ICC-kleurenprofiel voor uw camera. TP_ICM_INPUTDLGLABEL;Selecteer invoer-ICC-profiel... @@ -1707,16 +1710,16 @@ TP_ICM_INPUTPROFILE;Invoerprofiel TP_ICM_LABEL;Kleurbeheer TP_ICM_NOICM;Geen ICM: sRGB-uitvoer TP_ICM_OUTPUTPROFILE;Uitvoerprofiel -TP_ICM_PROFILEINTENT;Grafische weergave -TP_ICM_SAVEREFERENCE;Bewaar Referentie Afbeelding +TP_ICM_PROFILEINTENT;Weergave-intentie +TP_ICM_SAVEREFERENCE;Bewaar referentie-afbeelding TP_ICM_SAVEREFERENCE_APPLYWB;Toepassen witbalans -TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Gebruik witbalans bij het opslaan van afbeeldingen voor het maken van ICC profielen. Gebruik geen witbalans bij het maken van DCP profielen. -TP_ICM_SAVEREFERENCE_TOOLTIP;Sla de lineaire TIFF afbeelding op voordat het invoer profiel is toegepast. Het resultaat kan worden gebruikt voor calibratie en het genereren van een camera profiel. -TP_ICM_TONECURVE;Gebruik DCP's toon curve -TP_ICM_TONECURVE_TOOLTIP;Gebruik de ingebedde DCP toon curve. De instelling is alleen actief als de geselecteerd DCP een toon curve heeft. +TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Gebruik witbalans bij het opslaan van afbeeldingen voor het maken van ICC-profielen. Gebruik geen witbalans bij het maken van DCP-profielen. +TP_ICM_SAVEREFERENCE_TOOLTIP;Sla de lineaire TIFF-afbeelding op voordat het invoerprofiel is toegepast. Het resultaat kan worden gebruikt voor kalibratie en het genereren van een cameraprofiel. +TP_ICM_TONECURVE;Gebruik DCP-tooncurve +TP_ICM_TONECURVE_TOOLTIP;Gebruik de ingebedde DCP-tooncurve. De instelling is alleen actief als de geselecteerde DCP een tooncurve bevat. TP_ICM_WORKINGPROFILE;Werkprofiel TP_ICM_WORKING_TRC;Tooncurve: -TP_ICM_WORKING_TRC_CUSTOM;Gebruiker gedefinieerd +TP_ICM_WORKING_TRC_CUSTOM;Door gebruiker gedefinieerd TP_ICM_WORKING_TRC_GAMMA;Gamma TP_ICM_WORKING_TRC_NONE;Geen TP_ICM_WORKING_TRC_SLOPE;Helling @@ -1724,10 +1727,10 @@ TP_ICM_WORKING_TRC_TOOLTIP;Enkel voor ingebouwde profielen. TP_IMPULSEDENOISE_LABEL;Spot-ruisonderdrukking TP_IMPULSEDENOISE_THRESH;Drempel TP_LABCURVE_AVOIDCOLORSHIFT;Vermijd kleurverschuiving -TP_LABCURVE_AVOIDCOLORSHIFT_TOOLTIP;Plaats de kleuren in het gamut van de kleurruimte van het werkprofiel\nen pas Munsell correctie toe +TP_LABCURVE_AVOIDCOLORSHIFT_TOOLTIP;Plaats de kleuren in het bereik van de kleurruimte van het werkprofiel\nen pas Munsell-correctie toe TP_LABCURVE_BRIGHTNESS;Helderheid TP_LABCURVE_CHROMATICITY;Chromaticiteit -TP_LABCURVE_CHROMA_TOOLTIP;Voor Z-W tonen, zet Chromaticiteit op -100 +TP_LABCURVE_CHROMA_TOOLTIP;Voor zwartwit, zet Chromaticiteit op -100 TP_LABCURVE_CONTRAST;Contrast TP_LABCURVE_CURVEEDITOR;Luminantiecurve TP_LABCURVE_CURVEEDITOR_A_RANGE1;Groen verzadigd @@ -1740,44 +1743,44 @@ TP_LABCURVE_CURVEEDITOR_B_RANGE3;Geel pastel TP_LABCURVE_CURVEEDITOR_B_RANGE4;Geel verzadigd TP_LABCURVE_CURVEEDITOR_CC;CC TP_LABCURVE_CURVEEDITOR_CC_RANGE1;Neutraal -TP_LABCURVE_CURVEEDITOR_CC_RANGE2;Saai +TP_LABCURVE_CURVEEDITOR_CC_RANGE2;Slap TP_LABCURVE_CURVEEDITOR_CC_RANGE3;Pastel TP_LABCURVE_CURVEEDITOR_CC_RANGE4;Verzadigd -TP_LABCURVE_CURVEEDITOR_CC_TOOLTIP;Chromaticiteit volgens chromaticeit C=f(C) +TP_LABCURVE_CURVEEDITOR_CC_TOOLTIP;Chromaticiteit volgens Chromaticiteit C=f(C) TP_LABCURVE_CURVEEDITOR_CH;CH -TP_LABCURVE_CURVEEDITOR_CH_TOOLTIP;Chromaticiteit volgens Tint C=f(H) +TP_LABCURVE_CURVEEDITOR_CH_TOOLTIP;Chromaticiteit volgens Tint C=f(T) TP_LABCURVE_CURVEEDITOR_CL;CL TP_LABCURVE_CURVEEDITOR_CL_TOOLTIP;Chromaticiteit volgens Luminantie C=f(L) TP_LABCURVE_CURVEEDITOR_HH;HH -TP_LABCURVE_CURVEEDITOR_HH_TOOLTIP;Hue volgens hue H=f(H) +TP_LABCURVE_CURVEEDITOR_HH_TOOLTIP;Hue volgens Tint H=f(T) TP_LABCURVE_CURVEEDITOR_LC;LC -TP_LABCURVE_CURVEEDITOR_LC_TOOLTIP;Luminantie volgens chromaticiteit L=f(C) +TP_LABCURVE_CURVEEDITOR_LC_TOOLTIP;Luminantie volgens Chromaticiteit L=f(C) TP_LABCURVE_CURVEEDITOR_LH;LH -TP_LABCURVE_CURVEEDITOR_LH_TOOLTIP;Luminantie volgens hue L=f(H) -TP_LABCURVE_CURVEEDITOR_LL_TOOLTIP;Luminantie volgens luminantie L=f(L) +TP_LABCURVE_CURVEEDITOR_LH_TOOLTIP;Luminantie volgens Tint L=f(H) +TP_LABCURVE_CURVEEDITOR_LL_TOOLTIP;Luminantie volgens Luminantie L=f(L) TP_LABCURVE_LABEL;Lab -TP_LABCURVE_LCREDSK;Beperkt LC tot Rode en Huidtinten -TP_LABCURVE_LCREDSK_TOOLTIP;Indien ingeschakeld, beïnvloed de LC Curve alleen rode en huidtinten\nIndien uitgeschakeld, is het van toepassing op all tinten -TP_LABCURVE_RSTPROTECTION;Rode en huidtinten Bescherming -TP_LABCURVE_RSTPRO_TOOLTIP;Kan worden gebruikt met de chromaticiteits schuifbalk en de CC curve. +TP_LABCURVE_LCREDSK;Beperk LC tot huid- en rode tinten +TP_LABCURVE_LCREDSK_TOOLTIP;Indien ingeschakeld beïnvloedt de LC-curve alleen huid- en rode tinten.\nIndien uitgeschakeld is het van toepassing op alle tinten. +TP_LABCURVE_RSTPROTECTION;Bescherming huid- en rode tinten +TP_LABCURVE_RSTPRO_TOOLTIP;Kan worden gebruikt met de chromaticiteits-schuifbalk en de CC-curve. TP_LENSGEOM_AUTOCROP;Automatisch bijsnijden TP_LENSGEOM_FILL;Automatisch uitvullen TP_LENSGEOM_LABEL;Objectief / Geometrie TP_LENSGEOM_LIN;Lineair TP_LENSGEOM_LOG;Logarithmisch TP_LENSPROFILE_CORRECTION_AUTOMATCH;Automatische selectie -TP_LENSPROFILE_CORRECTION_LCPFILE;LCP bestand -TP_LENSPROFILE_CORRECTION_MANUAL;Manuele selectie -TP_LENSPROFILE_LABEL;Lenscorrectie Profielen -TP_LENSPROFILE_LENS_WARNING;Waarschuwing: de gebruikte lens profiel crop factor komt niet overeen met de camera crop factor, de resultaten kunnen verkeerd zijn. -TP_LENSPROFILE_MODE_HEADER;Lens Profiel +TP_LENSPROFILE_CORRECTION_LCPFILE;LCP-bestand +TP_LENSPROFILE_CORRECTION_MANUAL;Handmatige selectie +TP_LENSPROFILE_LABEL;Lenscorrectieprofielen +TP_LENSPROFILE_LENS_WARNING;Waarschuwing: de gebruikte bijsnijdfactor van het lensprofiel komt niet overeen met de bijsnijdfactor van de camera, de resultaten kunnen onjuist zijn. +TP_LENSPROFILE_MODE_HEADER;Lensprofiel TP_LENSPROFILE_USE_CA;Chromatische afwijking TP_LENSPROFILE_USE_GEOMETRIC;Geometrische vervorming TP_LENSPROFILE_USE_HEADER;Lenscorrecties TP_LENSPROFILE_USE_VIGNETTING;Vignettering TP_LOCALCONTRAST_AMOUNT;Hoeveelheid TP_LOCALCONTRAST_DARKNESS;Donker niveau -TP_LOCALCONTRAST_LABEL;Lokaal Contrast +TP_LOCALCONTRAST_LABEL;Lokaal contrast TP_LOCALCONTRAST_LIGHTNESS;helderheidsniveau TP_LOCALCONTRAST_RADIUS;Straal TP_METADATA_EDIT;Pas wijzigingen toe @@ -1788,7 +1791,7 @@ TP_NEUTRAL;Terugzetten TP_NEUTRAL_TOOLTIP;Alle belichtingsinstellingen naar 0 TP_PCVIGNETTE_FEATHER;Straal TP_PCVIGNETTE_FEATHER_TOOLTIP;Straal: \n0=alleen hoeken \n50=halverwege tot het centrum \n100=tot aan het centrum -TP_PCVIGNETTE_LABEL;Vignettering Filter +TP_PCVIGNETTE_LABEL;Vignetteringsfilter TP_PCVIGNETTE_ROUNDNESS;Vorm TP_PCVIGNETTE_ROUNDNESS_TOOLTIP;Vorm: \n0=rechthoek \n50=ellips \n100=circel TP_PCVIGNETTE_STRENGTH;Sterkte @@ -1799,10 +1802,10 @@ TP_PERSPECTIVE_LABEL;Perspectief TP_PERSPECTIVE_VERTICAL;Verticaal TP_PFCURVE_CURVEEDITOR_CH;Tint TP_PFCURVE_CURVEEDITOR_CH_TOOLTIP;Bepaalt de mate van verzachten per kleur. Hoger = meer, lager = minder. -TP_PREPROCESS_DEADPIXFILT;Dode pixels filter +TP_PREPROCESS_DEADPIXFILT;Dodepixels-filter TP_PREPROCESS_DEADPIXFILT_TOOLTIP;Onderdrukt dode pixels. TP_PREPROCESS_GREENEQUIL;Groenbalans -TP_PREPROCESS_HOTPIXFILT;Hete pixels filter +TP_PREPROCESS_HOTPIXFILT;Hetepixels-filter TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Onderdrukt hete pixels. TP_PREPROCESS_LABEL;Voorbewerking TP_PREPROCESS_LINEDENOISE;Lijnruisfilter @@ -1812,16 +1815,16 @@ TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontaal TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontaal enkel op PDAF-rijen TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Verticaal TP_PREPROCESS_NO_FOUND;Niet gevonden -TP_PREPROCESS_PDAFLINESFILTER;PDAF lijnfilter +TP_PREPROCESS_PDAFLINESFILTER;PDAF-lijnfilter TP_PRSHARPENING_LABEL;Verscherp na verkleinen -TP_PRSHARPENING_TOOLTIP;Verscherp na verkleinen. Werkt alleen als verkleinen actief is en Verkleinen methode 'Lanczos' is. Omdat 'verkleinen' geen effect heeft op het voorbeeld, heeft 'post verkleinen verscherping' ook geen effect op het voorbeeld. +TP_PRSHARPENING_TOOLTIP;Verscherp na verkleinen. Werkt alleen als verkleinen actief is en de methode 'Lanczos' is. Omdat verkleinen geen effect heeft op het voorbeeld, heeft 'post-verkleinen verscherping' ook geen effect op het voorbeeld. TP_RAWCACORR_AUTO;Automatische CA-correctie TP_RAWCACORR_AUTOIT;Herhalingen -TP_RAWCACORR_AUTOIT_TOOLTIP;Deze schuif is alleen actief als Automatische CA-correctie is aangevinkt.\nAuto-correctie werkt conservatief en corrigeert meestal niet alle chromatische aberratie.\nOm de resterende CA te corrigeren, kunt u dit proces tot vijf keer herhalen.\nElke herhaling vermindert de CA van de vorige herhaling, maar gaat wel ten koste van extra rekentijd. +TP_RAWCACORR_AUTOIT_TOOLTIP;Deze schuif is alleen actief als Automatische CA-correctie is aangevinkt.\nAuto-correctie werkt conservatief en corrigeert meestal niet alle chromatische afwijkingen.\nOm de resterende CA te corrigeren, kunt u dit proces tot vijf keer herhalen.\nElke herhaling vermindert de CA van de vorige herhaling, maar gaat wel ten koste van extra rekentijd. TP_RAWCACORR_AVOIDCOLORSHIFT;Vermijd kleurverschuiving TP_RAWCACORR_CABLUE;Blauw TP_RAWCACORR_CARED;Rood -TP_RAWCACORR_LABEL;Corrigeer chromatische aberratie +TP_RAWCACORR_LABEL;Corrigeer chromatische afwijking TP_RAWEXPOS_BLACK_0;Groen 1 (leidend) TP_RAWEXPOS_BLACK_1;Rood TP_RAWEXPOS_BLACK_2;Blauw @@ -1829,77 +1832,77 @@ TP_RAWEXPOS_BLACK_3;Groen 2 TP_RAWEXPOS_BLACK_BLUE;Blauw TP_RAWEXPOS_BLACK_GREEN;Groen TP_RAWEXPOS_BLACK_RED;Rood -TP_RAWEXPOS_LINEAR;Witpunt Correctie +TP_RAWEXPOS_LINEAR;Witpuntcorrectie TP_RAWEXPOS_RGB;Rood, Groen, Blauw TP_RAWEXPOS_TWOGREEN;Koppel Groen 1 en 2 -TP_RAW_1PASSMEDIUM;1 keer (Gemiddeld) -TP_RAW_2PASS;1-pass+snel -TP_RAW_3PASSBEST;3 keer (Beste) -TP_RAW_4PASS;3-pass+snel +TP_RAW_1PASSMEDIUM;1 keer (Markesteijn) +TP_RAW_2PASS;1-gang+snel +TP_RAW_3PASSBEST;3 gangen (Markesteijn) +TP_RAW_4PASS;3-gangen+snel TP_RAW_AHD;AHD TP_RAW_AMAZE;AMaZE TP_RAW_AMAZEVNG4;AMaZE+VNG4 TP_RAW_BORDER;Rand TP_RAW_DCB;DCB -TP_RAW_DCBENHANCE;DCB Verbetering +TP_RAW_DCBENHANCE;DCB-verbetering TP_RAW_DCBITERATIONS;Aantal DCB-herhalingen TP_RAW_DCBVNG4;DCB+VNG4 TP_RAW_DMETHOD;Methode TP_RAW_DMETHOD_PROGRESSBAR;%1 Demozaïeken... -TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Demozaïek verfijning... -TP_RAW_DMETHOD_TOOLTIP;IGV en LMMSE zijn speciaal bedoeld voor hoge ISO afbeeldingen -TP_RAW_DUALDEMOSAICAUTOCONTRAST;Auto drempel -TP_RAW_DUALDEMOSAICAUTOCONTRAST_TOOLTIP;Als checkbox is aangevinkt (aanbevolen), berekent RT een optimale waarde gebaseerd op vlakke gebieden in de foto.\nIndien die niet gevonden worden of de foto bevat veel ruis, wordt de waarde op 0 gezet.\nOm de waarde handmatig in te voeren moet u eerst de checkbox uitvinken (redelijke waarden zijn afhankelijk van het soort foto). -TP_RAW_DUALDEMOSAICCONTRAST;Contrast drempel +TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Demozaïekverfijning... +TP_RAW_DMETHOD_TOOLTIP;IGV en LMMSE zijn speciaal bedoeld voor afbeeldingen met hoge ISO-waarden +TP_RAW_DUALDEMOSAICAUTOCONTRAST;Auto-drempel +TP_RAW_DUALDEMOSAICAUTOCONTRAST_TOOLTIP;Als checkbox is aangevinkt (aanbevolen), berekent RT een optimale waarde gebaseerd op vlakke gebieden in de foto.\nIndien die niet gevonden worden of de foto veel ruis bevat, wordt de waarde op 0 gezet.\nOm de waarde handmatig in te voeren moet u eerst de checkbox uitvinken (redelijke waarden zijn afhankelijk van het soort foto). +TP_RAW_DUALDEMOSAICCONTRAST;Contrastdrempel TP_RAW_EAHD;EAHD TP_RAW_FALSECOLOR;Stapgrootte kleurfoutonderdrukking TP_RAW_FAST;Snel TP_RAW_HD;Drempel -TP_RAW_HD_TOOLTIP;Lagere waarden maken Hete/Dode pixel detectie agressiever, maar valse positieven kunnen leiden tot meer artefacten. Als er artefacten verschijnen bij het gebruik van de Hete/Dode Pixel Filters verminder dan geleidelijk de drempelwaarde totdat ze verdwijnen. +TP_RAW_HD_TOOLTIP;Lagere waarden maken hete/dodepixel-detectie agressiever, maar valse positieven kunnen leiden tot meer onregelmatigheden. Als er onregelmatigheden verschijnen bij het gebruik van de hete/dodepixel-filters, verminder dan geleidelijk de drempelwaarde tot ze verdwijnen. TP_RAW_HPHD;HPHD TP_RAW_IGV;IGV TP_RAW_IMAGENUM;Sub-afbeelding -TP_RAW_IMAGENUM_SN;SN modus -TP_RAW_IMAGENUM_TOOLTIP;Sommige raw bestanden bestaan uit verschillende sub-afbeeldingen (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\Als een andere demozaïek methode dan Pixel Shift gebruikt wordt, selecteert dit de gebruikte sub-afbeelding.\n\nBij gebruik van de Pixel Shift demozaïek methode op een Pixel Shift raw, worden alle sub-afbeeldingen gebruikt, and dit selecteert de subafbeeldijg die gebruikt wordt voor bewegende moving gebieden. +TP_RAW_IMAGENUM_SN;SN-modus +TP_RAW_IMAGENUM_TOOLTIP;Sommige RAW-bestanden bestaan uit verschillende sub-afbeeldingen (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\Als een andere demozaïekmethode dan Pixel Shift gebruikt wordt, selecteert deze de gebruikte sub-afbeelding.\n\nBij gebruik van de Pixel Shift demozaïekmethode op een Pixel Shift RAW worden alle sub-afbeeldingen gebruikt en dit selecteert de sub-afbeelding die gebruikt wordt voor bewegende gebieden. TP_RAW_LABEL;Demozaïekproces TP_RAW_LMMSE;LMMSE -TP_RAW_LMMSEITERATIONS;LMMSE Verbetering Stappen -TP_RAW_LMMSE_TOOLTIP;Toevoegen gamma (stap 1), mediaan (stappen 2-4), en verfijnen (stappen 5-6) om artefacten te verwijderen en de signaal/ruis ratio te verbeteren. +TP_RAW_LMMSEITERATIONS;LMMSE-verbeterstappen +TP_RAW_LMMSE_TOOLTIP;Toevoegen gamma (stap 1), mediaan (stappen 2-4) en verfijnen (stappen 5-6) om onregelmatigheden te verwijderen en de signaal/ruis-ratio te verbeteren. TP_RAW_MONO;Mono -TP_RAW_NONE;Geen (Toont sensor patroon) -TP_RAW_PIXELSHIFT;Pixel Verschuiven +TP_RAW_NONE;Geen (Toont sensorpatroon) +TP_RAW_PIXELSHIFT;Pixel Shift TP_RAW_PIXELSHIFTBLUR;Vervaag bewegingsmasker TP_RAW_PIXELSHIFTDMETHOD;Demozaïek voor beweging TP_RAW_PIXELSHIFTEPERISO;Gevoeligheid TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;De standaardwaarde 0 werkt goed voor lage ISO-waarden.\nHogere waarden vergroten de gevoeligheid van bewegingsdetectie.\nWijzig in kleine stappen en controleer het bewegingsmasker.\nVerhoog gevoeligheid voor onderbelichte foto's of foto's met hoge ISO-waarden. -TP_RAW_PIXELSHIFTEQUALBRIGHT;Balanseer de helderheid van de frames +TP_RAW_PIXELSHIFTEQUALBRIGHT;Balanceer de helderheid van de frames TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Balanceer per kanaal -TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Ingeschakeld: Balanceer elk RGB kanaal afzonderlijk.\nUitgeschakeld: Balanceer alle kanalen evenveel. -TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Balanseer de helderheid van de frames t.o.v. de helderheid van het geslecteerde frame.\nAls er overbelichte gebieden zijn in de frames, selecteer dan het helderste frame om een magenta kleurzweem te vermijden of selecteer bewegingsorrectie. +TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Ingeschakeld: balanceer elk RGB-kanaal afzonderlijk.\nUitgeschakeld: balanceer alle kanalen evenveel. +TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Balanceer de helderheid van de frames ten opzichte van de helderheid van het geselecteerde frame.\nAls er overbelichte gebieden zijn in de frames, selecteer dan het helderste frame om een magenta kleurzweem te vermijden of selecteer bewegingscorrectie. TP_RAW_PIXELSHIFTGREEN;Controleer groene kanaal voor beweging TP_RAW_PIXELSHIFTHOLEFILL;Vul holtes in verschuivingsmasker TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Vul holtes in het verschuivingsmasker op TP_RAW_PIXELSHIFTMEDIAN;Mediaan -TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Gebruik mediaan voor alle frames inplaats van alleen het geselecteerd frame voor gebieden met beweging.\nVerwijder objecten die voorkomen op verschillende plekken in alle frames.\nGeeft bewegingseffect voor langzaam bewegende (overlappende) objecten. +TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Gebruik mediaan voor alle frames inplaats van alleen het geselecteerde frame voor gebieden met beweging.\nVerwijder objecten die voorkomen op verschillende plekken in alle frames.\nGeeft bewegingseffect voor langzaam bewegende (overlappende) objecten. TP_RAW_PIXELSHIFTMM_AUTO;Automatisch TP_RAW_PIXELSHIFTMM_CUSTOM;Eigen TP_RAW_PIXELSHIFTMM_OFF;Uit -TP_RAW_PIXELSHIFTMOTION;Beweging detectie niveau (vervallen) -TP_RAW_PIXELSHIFTMOTIONMETHOD;Beweging Correctie -TP_RAW_PIXELSHIFTNONGREENCROSS;Controleer rood/blauw kanaal voor beweging +TP_RAW_PIXELSHIFTMOTION;Bewegingsdetectie-niveau (vervallen) +TP_RAW_PIXELSHIFTMOTIONMETHOD;Bewegingscorrectie +TP_RAW_PIXELSHIFTNONGREENCROSS;Controleer rood/blauw-kanaal voor beweging TP_RAW_PIXELSHIFTSHOWMOTION;Toon beweging TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Toon alleen masker TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Toont het bewegingsmasker zonder de afbeelding TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Toont de foto met een groen masker dat de bewegingsgebieden toont. TP_RAW_PIXELSHIFTSIGMA;Vervagen straal -TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;De standaard straal van 1.0 is goed voor normale ISO. Verhoog de waarde voor hogere ISO.\n5.0 is een goed startpunt voor hoge ISO afbeeldingen.\nControleer het bewegingsmasker bij het veranderen van de waarde. +TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;De standaardstraal van 1,0 is goed voor normale ISO-waarden. Verhoog de waarde voor hogere ISO.\n5,0 is een goed startpunt voor afbeeldingen met hoge ISO-waarden.\nControleer het bewegingsmasker bij het veranderen van de waarde. TP_RAW_PIXELSHIFTSMOOTH;Zachte overgang TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Zachte overgang tussen gebieden met en zonder beweging.\nKies 0 om Zachte overgang uit te zetten\nKies 1 voor Amaze/lmmse of Mediaan TP_RAW_RCD;RCD TP_RAW_RCDVNG4;RCD+VNG4 -TP_RAW_SENSOR_BAYER_LABEL;Sensor met Bayer matrix -TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass geeft het beste resultaat (aanbevolen voor lage ISO afbeeldingen)\n1-pass geeft hetzelfde resultaat als 3-pass voor hoge ISO afbeeldingen en is sneller. -TP_RAW_SENSOR_XTRANS_LABEL;Sensor met X-Trans matrix +TP_RAW_SENSOR_BAYER_LABEL;Sensor met Bayer-matrix +TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-gang geeft het beste resultaat (aanbevolen voor lage ISO-waarden)\n1-gang geeft hetzelfde resultaat als 3-gang voor hoge ISO-afbeeldingen en is sneller. +TP_RAW_SENSOR_XTRANS_LABEL;Sensor met X-Transmatrix TP_RAW_VNG4;VNG4 TP_RAW_XTRANS;X-Trans TP_RAW_XTRANSFAST;Snelle X-Trans @@ -1918,81 +1921,81 @@ TP_RESIZE_SCALE;Schaal TP_RESIZE_SPECIFY;Specificeer: TP_RESIZE_W;B: TP_RESIZE_WIDTH;Breedte -TP_RETINEX_CONTEDIT_HSL;Histogram balans HSL -TP_RETINEX_CONTEDIT_LAB;Histogram balans L*a*b* -TP_RETINEX_CONTEDIT_LH;Tint balans +TP_RETINEX_CONTEDIT_HSL;Histogrambalans HSL +TP_RETINEX_CONTEDIT_LAB;Histogrambalans L*a*b* +TP_RETINEX_CONTEDIT_LH;Tintbalans TP_RETINEX_CONTEDIT_MAP;Equalizer TP_RETINEX_CURVEEDITOR_CD;L=f(L) -TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminantie volgens luminantie L=f(L)\nCorrigeert ruwe data om halo's and artefacte te verminderen. +TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminantie volgens luminantie L=f(L).\nCorrigeert ruwe data om halo's en onregelmatigheden te verminderen. TP_RETINEX_CURVEEDITOR_LH;Sterkte=f(H) -TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Sterkte volgens tint Sterkte=f(H)\nDeze curve wijzigt ook chroma wanneer de "Hooglicht" retinex methode wordt gebruikt. +TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Sterkte volgens tint, Sterkte=f(H).\nDeze curve wijzigt ook chroma wanneer de Retinex-methode Hoge lichten wordt gebruikt. TP_RETINEX_CURVEEDITOR_MAP;L=f(L) -TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;Deze curve kan zowel alleen worden gebruikt of in combinatie met een Gaussiaans masker of wavelet masker.\nHou rekening met artefacten! +TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;Deze curve kan zowel losstaand worden gebruikt of in combinatie met een Gaussiaans of wavelet-masker.\nHoud rekening met onregelmatigheden. TP_RETINEX_EQUAL;Mixer TP_RETINEX_FREEGAMMA;Vrij gamma TP_RETINEX_GAIN;Verbeteren -TP_RETINEX_GAINOFFS;Versterking en Offset (helderheid) -TP_RETINEX_GAINTRANSMISSION;Transmissie versterking -TP_RETINEX_GAINTRANSMISSION_TOOLTIP;Versterk of verzwak de transmssiemap om de gewenste luminantie te bekomen.\nThe x-as is the transmissie.\nThe y-as is the versterking. +TP_RETINEX_GAINOFFS;Versterking en verschuiving (helderheid) +TP_RETINEX_GAINTRANSMISSION;Transmissieversterking +TP_RETINEX_GAINTRANSMISSION_TOOLTIP;Versterk of verzwak de transmissiemap om de gewenste luminantie te verkrijgen.\nDe x-as is de transmissie.\nDe y-as is de versterking. TP_RETINEX_GAMMA;Gamma TP_RETINEX_GAMMA_FREE;Vrij TP_RETINEX_GAMMA_HIGH;Hoog TP_RETINEX_GAMMA_LOW;Laag TP_RETINEX_GAMMA_MID;Midden TP_RETINEX_GAMMA_NONE;Geen -TP_RETINEX_GAMMA_TOOLTIP;Hersteld tinten door gamma voor en na Retinex toe te passen. Verschilt van Retinex curves en andere curves (Lab, Exposure, etc.). -TP_RETINEX_GRAD;Transmissie verloop -TP_RETINEX_GRADS;Sterkte verloop +TP_RETINEX_GAMMA_TOOLTIP;Herstel tinten door gamma voor en na Retinex toe te passen. Verschilt van Retinex-curves en andere curves (Lab, Exposure, etc.). +TP_RETINEX_GRAD;Transmissieverloop +TP_RETINEX_GRADS;Sterkteverloop TP_RETINEX_GRADS_TOOLTIP;Indien schuifbalk=0: alle herhalingen zijn gelijk.\nIndien > 0 Sterkte verminderd en herhaling vergroot, en omgekeerd. TP_RETINEX_GRAD_TOOLTIP;Indien schuifbalk=0: alle herhalingen zijn gelijk.\nIndien > 0 Variantie en Drempel worden verkleind als herhaling toeneemt, en omgekeerd. TP_RETINEX_HIGH;Hoog -TP_RETINEX_HIGHLIG;Hooglicht -TP_RETINEX_HIGHLIGHT;Drempel hooglicht -TP_RETINEX_HIGHLIGHT_TOOLTIP;Versterkt de werking van de Hooglicht methode.\nMogelijk moet de "Naburige pixels" worden aangepast en moet de "Witpunt Correctie" in de Raw tab -> Raw Witpuntent worden vergroot. -TP_RETINEX_HSLSPACE_LIN;HSL-Linear +TP_RETINEX_HIGHLIG;Hoge lichten +TP_RETINEX_HIGHLIGHT;Drempel hoge lichten +TP_RETINEX_HIGHLIGHT_TOOLTIP;Versterkt de werking van de Hoge lichten-methode.\nMogelijk moet Naburige pixels worden aangepast en moet de Witpuntcorrectie in de Raw-tab -> Raw Witpunten worden vergroot. +TP_RETINEX_HSLSPACE_LIN;HSL-Lineair TP_RETINEX_HSLSPACE_LOG;HSL-Logaritmisch -TP_RETINEX_ITER;Herhalingen (Tonemapping) -TP_RETINEX_ITERF;Tonemapping -TP_RETINEX_ITER_TOOLTIP;Simuleert tonemapping.\nHoge waarden verlengen de bewerkingstijd. +TP_RETINEX_ITER;Herhalingen (Toonmappen) +TP_RETINEX_ITERF;Toonmappen +TP_RETINEX_ITER_TOOLTIP;Simuleert toonmappen.\nHoge waarden verlengen de bewerkingstijd. TP_RETINEX_LABEL;Retinex TP_RETINEX_LABEL_MASK;Masker TP_RETINEX_LABSPACE;L*a*b* TP_RETINEX_LOW;Laag TP_RETINEX_MAP;Methode TP_RETINEX_MAP_GAUS;Gaussiaans masker -TP_RETINEX_MAP_MAPP;Verscherp masker (wavelet gedeeltelijk) -TP_RETINEX_MAP_MAPT;Verscherp masker (wavelet totaal) -TP_RETINEX_MAP_METHOD_TOOLTIP;Gebruik het masker dat is aangemaakt door de bovenstaande Gausiaanse functie (Straal, Methode) om halo’s en artefacten te verminderen.\n\nCurve: past een diagonale contrast curve toe op het masker.\nHou rekening met artefacten!\n\n Gausiaans: genereerd en gebruikt een ‘Gausiaanse blur’ op het masker.\nVerscherpen: genereert en gebruikt een ‘wavelet’ op het masker.\nLangzaam. +TP_RETINEX_MAP_MAPP;Scherptemasker (wavelet gedeeltelijk) +TP_RETINEX_MAP_MAPT;Scherptemasker (wavelet totaal) +TP_RETINEX_MAP_METHOD_TOOLTIP;Gebruik het masker dat is aangemaakt door de bovenstaande Gausiaanse functie (Straal, Methode) om halo’s en onregelmatigheden te verminderen.\n\nCurve: past een diagonale contrastcurve toe op het masker.\nHou rekening met onregelmatigheden!\n\n Gausiaans: genereert en gebruikt een Gausiaanse vervaging op het masker.\nVerscherpen: genereert en gebruikt een wavelet op het masker.\nLangzaam. TP_RETINEX_MAP_NONE;Geen -TP_RETINEX_MEDIAN;Transmissie mediaan filter +TP_RETINEX_MEDIAN;Transmissiemediaan-filter TP_RETINEX_METHOD;Methode -TP_RETINEX_METHOD_TOOLTIP;Laag = versterk lage lichten,\nUniform = gelijkmatig,\nHoog = versterk hoge lichten,\nHooglicht = verwijder magenta in hooglicht. -TP_RETINEX_MLABEL;Teruggeplaatst sluier-vrij Min=%1 Max=%2 -TP_RETINEX_MLABEL_TOOLTIP;Zou min=0 en max=32768 moeten benaderen\nTeruggeplaatste afbeelding zonder mixture. +TP_RETINEX_METHOD_TOOLTIP;Laag: schaduwen ophelderen,\nUniform: gelijkmatig,\nHoog: versterk hoge lichten,\nHoge lichten: verwijder magenta in hoge lichten. +TP_RETINEX_MLABEL;Teruggeplaatst sluiervrij Min=%1 Max=%2 +TP_RETINEX_MLABEL_TOOLTIP;De waarden zouden dichtbij Min=0 en Max=32768 (log-modus) moeten liggen, maar andere waarden zijn mogelijk. Pas 'Kap herstelde data (versterking)' en 'Verschuiving' aan om te normaliseren. \nHerstelt beeldgegevens zonder menging. TP_RETINEX_NEIGHBOR;Naburige pixels TP_RETINEX_NEUTRAL;Beginwaarde TP_RETINEX_NEUTRAL_TOOLTIP;Zet alles terug naar de beginwaarde. TP_RETINEX_OFFSET;Beginpunt TP_RETINEX_SCALES;Gaussiaans verloop -TP_RETINEX_SCALES_TOOLTIP;Indien schuifbalk=0: alle herhalingen zijn gelijk.\nIndien > 0 Schaal en straal worden verkleind als herhaling toeneemt, en omgekeerd. +TP_RETINEX_SCALES_TOOLTIP;Als schuifbalk = 0, dan zijn alle herhalingen gelijk.\nIndien > 0 dan worden schaal en straal verkleind als de herhaling toeneemt, en omgekeerd. TP_RETINEX_SETTINGS;Instellingen TP_RETINEX_SKAL;Schaal -TP_RETINEX_SLOPE;Vrij gamma helling +TP_RETINEX_SLOPE;Helling vrij gamma TP_RETINEX_STRENGTH;Sterkte TP_RETINEX_THRESHOLD;Drempel -TP_RETINEX_THRESHOLD_TOOLTIP;Beperkt in/uit.\nIn = afbeelding,\nUit = afbeeldings gauss. +TP_RETINEX_THRESHOLD_TOOLTIP;Beperkt in/uit.\nIn = bron,\nUit = afbeeldings-gauss. TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Gemiddeld=%3 Sigma=%4 TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 -TP_RETINEX_TLABEL_TOOLTIP;Transmissie resultaat.\nMin en Max worden gebruikt door Variantie.\nMeeste en Sigma\nTm=Min TM=Max van de transmissie. +TP_RETINEX_TLABEL_TOOLTIP;Transmissieresultaat.\nMin en Max worden gebruikt door Variantie.\nMeeste en Sigma\nTm=Min TM=Max van de transmissie. TP_RETINEX_TRANF;Transmissie -TP_RETINEX_TRANSMISSION;Transmissie plan -TP_RETINEX_TRANSMISSION_TOOLTIP;Transmissie volgens transmissie.\nAbscis: transmissie van negatieve waarden (min), gemiddelde, en positieve waarden (max).\nOrdinaat: versterken of verminderen. +TP_RETINEX_TRANSMISSION;Transmissiemap +TP_RETINEX_TRANSMISSION_TOOLTIP;Transmissie volgens transmissie.\nAbscis: transmissie van negatieve waarden (min), gemiddelde, en positieve waarden (max).\nOrdinaat: versterking of vermindering. TP_RETINEX_UNIFORM;Uniform TP_RETINEX_VARIANCE;Variantie TP_RETINEX_VARIANCE_TOOLTIP;Lage variantie versterkt lokaal contrast en verzadiging, maar dit kan artefacten veroorzaken. TP_RETINEX_VIEW;Proces TP_RETINEX_VIEW_MASK;Masker -TP_RETINEX_VIEW_METHOD_TOOLTIP;Standaard - Normale afbeelding.\nMasker - Toont het masker.\nOnscherp masker - Toont de afbeelding met een hoge straal.\nTransmissie - Auto/Vast - Toont de transmissie-map, voor enige actie op kontrast en helderheid.\n\nLet op: het masker komt niet overeen met de werkelijkheid, maar is versterkt om het effect beter zichtbaar te maken. +TP_RETINEX_VIEW_METHOD_TOOLTIP;Standaard - Normale weergave.\nMasker - Toont het masker.\nOnscherp masker - Toont de afbeelding met een onscherptemasker met grote straal.\nTransmissie - Auto/Vast - Toont de transmissiemap, voordat actie wordt ondernomen op contrast en helderheid.\n\nLet op: het masker komt niet overeen met de werkelijkheid, maar is versterkt om het effect beter zichtbaar te maken. TP_RETINEX_VIEW_NONE;Standaard TP_RETINEX_VIEW_TRAN;Transmissie - Auto TP_RETINEX_VIEW_TRAN2;Transmissie - Vast @@ -2001,13 +2004,13 @@ TP_RGBCURVES_BLUE;B TP_RGBCURVES_CHANNEL;Kanaal TP_RGBCURVES_GREEN;G TP_RGBCURVES_LABEL;RGB-curven -TP_RGBCURVES_LUMAMODE;Luminositeit Mode -TP_RGBCURVES_LUMAMODE_TOOLTIP;Luminositeit ModeVarieert de toewijzing van de R, G en B kanalen aan de Luminositeit van de afbeelding, zonder dat de kleur van de afbeelding wijzigt. +TP_RGBCURVES_LUMAMODE;Luminositeitsmodus +TP_RGBCURVES_LUMAMODE_TOOLTIP;LuminositeitsmodusVarieert de toewijzing van de R-, G- en B-kanalen aan de luminositeit van de afbeelding, zonder dat de kleur van de afbeelding wijzigt. TP_RGBCURVES_RED;R TP_ROTATE_DEGREE;Graden TP_ROTATE_LABEL;Roteren TP_ROTATE_SELECTLINE;Bepaal rechte lijn -TP_SAVEDIALOG_OK_TOOLTIP;Sneltoets: Ctrl-Enter +TP_SAVEDIALOG_OK_TOOLTIP;Sneltoets: Ctrl+Enter TP_SHADOWSHLIGHTS_HIGHLIGHTS;Hoge lichten TP_SHADOWSHLIGHTS_HLTONALW;Toonomvang TP_SHADOWSHLIGHTS_LABEL;Schaduwen/hoge lichten @@ -2020,7 +2023,7 @@ TP_SHARPENEDGE_PASSES;Herhaling TP_SHARPENEDGE_THREE;Alleen luminantie TP_SHARPENING_AMOUNT;Hoeveelheid TP_SHARPENING_BLUR;Vervagen straal -TP_SHARPENING_CONTRAST;Contrast drempel +TP_SHARPENING_CONTRAST;Contrastdrempel TP_SHARPENING_EDRADIUS;Straal TP_SHARPENING_EDTOLERANCE;Randtolerantie TP_SHARPENING_HALOCONTROL;Halocontrole @@ -2038,7 +2041,7 @@ TP_SHARPENING_RLD_ITERATIONS;Herhaling TP_SHARPENING_THRESHOLD;Drempel TP_SHARPENING_USM;Onscherpmasker TP_SHARPENMICRO_AMOUNT;Hoeveelheid -TP_SHARPENMICRO_CONTRAST;Contrast drempel +TP_SHARPENMICRO_CONTRAST;Contrastdrempel TP_SHARPENMICRO_LABEL;Microcontrast (Lab/CIECAM02) TP_SHARPENMICRO_MATRIX;3×3-matrix ipv. 5×5 TP_SHARPENMICRO_UNIFORMITY;Uniformiteit @@ -2046,7 +2049,7 @@ TP_SOFTLIGHT_LABEL;Zacht licht TP_SOFTLIGHT_STRENGTH;Sterkte TP_TM_FATTAL_AMOUNT;Hoeveelheid TP_TM_FATTAL_ANCHOR;Anker -TP_TM_FATTAL_LABEL;Dynamisch bereik compressie +TP_TM_FATTAL_LABEL;Compressie dynamisch bereik TP_TM_FATTAL_THRESHOLD;Detail TP_VIBRANCE_AVOIDCOLORSHIFT;Vermijd kleurverschuiving TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH @@ -2061,15 +2064,15 @@ TP_VIBRANCE_PASTELS;Pasteltinten TP_VIBRANCE_PASTSATTOG;Koppel pastel- en verzadigde tinten TP_VIBRANCE_PROTECTSKINS;Bescherm huidtinten TP_VIBRANCE_PSTHRESHOLD;Drempel pastel/verzadiging -TP_VIBRANCE_PSTHRESHOLD_SATTHRESH;Drempel Verzadiging -TP_VIBRANCE_PSTHRESHOLD_TOOLTIP;De verticale as vertegenwoordigt aan de onderkant de pastel tinten en aan de bovenkanten de verzadigde tinten.\nDe horizontale as vertegenwoordigt de verzadigde reeks. -TP_VIBRANCE_PSTHRESHOLD_WEIGTHING;Pastel/verzadigings transitie weging +TP_VIBRANCE_PSTHRESHOLD_SATTHRESH;Drempel verzadiging +TP_VIBRANCE_PSTHRESHOLD_TOOLTIP;De verticale as vertegenwoordigt pasteltinten aan de onderkant en verzadigde tinten aan de bovenkant.\nDe horizontale as vertegenwoordigt het verzadigingsbereik. +TP_VIBRANCE_PSTHRESHOLD_WEIGTHING;Gewicht pastel/verzadigingtransitie TP_VIBRANCE_SATURATED;Verzadigde tinten TP_VIGNETTING_AMOUNT;Hoeveelheid TP_VIGNETTING_CENTER;Centrum TP_VIGNETTING_CENTER_X;Centrum X TP_VIGNETTING_CENTER_Y;Centrum Y -TP_VIGNETTING_LABEL;Vignettering Correctie +TP_VIGNETTING_LABEL;Vignetteringscorrectie TP_VIGNETTING_RADIUS;Straal TP_VIGNETTING_STRENGTH;Sterkte TP_WAVELET_1;Niveau 1 @@ -2089,44 +2092,44 @@ TP_WAVELET_B2;Rest TP_WAVELET_BACKGROUND;Achtergrond TP_WAVELET_BACUR;Curve TP_WAVELET_BALANCE;Contrastbalans d/v-h -TP_WAVELET_BALANCE_TOOLTIP;Wijzigt de balans tussen de wavelet richtingen: vertikaal-horizontaal en diagonaal.\nAls contrast, chromaticiteit of 'rest' tonemapping actief zijn, wordt het effect als gevolg van de balans versterkt. -TP_WAVELET_BALCHRO;Chroma balans -TP_WAVELET_BALCHRO_TOOLTIP;De 'Contrastbalans' curve en schuifbalk wijzigen ook de chromaticiteit balans. +TP_WAVELET_BALANCE_TOOLTIP;Wijzigt de balans tussen de wavelet-richtingen: vertikaal-horizontaal en diagonaal.\nAls tonemapping in contrast, chromaticiteit of residueel actief zijn, wordt het effect als gevolg van de balans versterkt. +TP_WAVELET_BALCHRO;Chroma-balans +TP_WAVELET_BALCHRO_TOOLTIP;De Contrastbalans-curve en schuifbalk wijzigen ook de chromaticiteit-balans. TP_WAVELET_BANONE;Geen TP_WAVELET_BASLI;Schuifbalk -TP_WAVELET_BATYPE;Balans methode +TP_WAVELET_BATYPE;Balansmethode TP_WAVELET_CBENAB;Kleurtint en kleurbalans -TP_WAVELET_CB_TOOLTIP;Voor hoge waarden: kleurcorrectie door al of niet te combineren met niveau decompositie 'toning'\nVoor lage waarden de witbalans van de achtergrond (hemel, ...) wijzigen zonder die van de voorgrond, meestal meer contrastrijk +TP_WAVELET_CB_TOOLTIP;Met hoge waarden kun je speciale effecten creëren, gelijkend op wat je met de Chroma-module kunt bereiken, maar nu gericht op het residuele beeld. Met kleinere waarden kun je handmatig de witbalans corrigeren. TP_WAVELET_CCURVE;Lokaal contrast TP_WAVELET_CH1;Alle chroma's TP_WAVELET_CH2;Pastel - Verzadigd -TP_WAVELET_CH3;Koppel contrast niveaus +TP_WAVELET_CH3;Koppel contrastniveaus TP_WAVELET_CHCU;Curve -TP_WAVELET_CHR;Koppel Chroma aan contrast +TP_WAVELET_CHR;Koppel Chroma aan Contrast TP_WAVELET_CHRO;Verzadigd - Pastel TP_WAVELET_CHRO_TOOLTIP;Begrens tussen pastel en verzadigd\n 1-x niveau verzadigd\n x-9 niveau pastel -TP_WAVELET_CHR_TOOLTIP;Wijzig chroma in combinatie met Contrast niveaus +TP_WAVELET_CHR_TOOLTIP;Wijzig chroma in combinatie met contrastniveaus TP_WAVELET_CHSL;Schuifbalken -TP_WAVELET_CHTYPE;Chrominantie methode -TP_WAVELET_COLORT;Dekking Rood-Groen Niveau +TP_WAVELET_CHTYPE;Chrominantiemethode +TP_WAVELET_COLORT;Dekking Rood-Groen niveau TP_WAVELET_COMPCONT;Contrast TP_WAVELET_COMPGAMMA;Compressie gamma -TP_WAVELET_COMPGAMMA_TOOLTIP;Wijzig de gamma van de 'rest afbeelding' zodat data en histogram gelijk kunnen worden gemaakt. -TP_WAVELET_COMPTM;Tonemapping -TP_WAVELET_CONTEDIT;'Na' contrast curve -TP_WAVELET_CONTR;Gamut - controle +TP_WAVELET_COMPGAMMA_TOOLTIP;Door het gamma van het residuele beeld te wijzigen, kun je data en histogram in balans brengen. +TP_WAVELET_COMPTM;Toonmappen +TP_WAVELET_CONTEDIT;'Na'-contrastcurve +TP_WAVELET_CONTR;Kleurenscala - controle TP_WAVELET_CONTRA;Contrast -TP_WAVELET_CONTRAST_MINUS;Contrast - -TP_WAVELET_CONTRAST_PLUS;Contrast + -TP_WAVELET_CONTRA_TOOLTIP;Wijzigt het contrast van de 'rest afbeelding'. -TP_WAVELET_CTYPE;Chrominantie sterkte -TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Wijzigt lokaal contrast als een functie van het oorspronkelijke lokale contrast (abscis).\nLage abscis waarden vertegenwoordigen klein lokaal contrast (werkelijke waarden rond 10..20).\n50% abscis vertegenwoordigd gemiddeld lokaal contrast (werkelijke waarden rond 100..300).\n66% abscis vertegenwoordigd standaard deviatie van lokaal contrast (werkelijke waarden rond 300..800).\n100% abscis vertegenwoordigd maximaal lokaal contrast (werkelijke waarden rond 3000..8000). -TP_WAVELET_CURVEEDITOR_CH;Contrast niveau=f(Hue) -TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Wijzigt het contrast van elk niveau als een functie van hue.\nZorg er voor dat de wijzigingen die zijn gemaakt bij de Gamut Hue toepassing niet worden overschreven.\nDe curve werkt alleen als de 'wavelet contrast niveau schuifbalken' groter dan nul zijn. +TP_WAVELET_CONTRAST_MINUS;< Contrast +TP_WAVELET_CONTRAST_PLUS;Contrast > +TP_WAVELET_CONTRA_TOOLTIP;Wijzigt het contrast van de residuele afbeelding. +TP_WAVELET_CTYPE;Chrominantiesterkte +TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Wijzigt lokaal contrast als een functie van het oorspronkelijke lokale contrast (abscis).\nLage absciswaarden vertegenwoordigen weinig lokaal contrast (werkelijke waarden rond 10..20).\n50% abscis vertegenwoordigt gemiddeld lokaal contrast (werkelijke waarden rond 100..300).\n66% abscis vertegenwoordigt de standaarddeviatie van lokaal contrast (werkelijke waarden rond 300..800).\n100% abscis vertegenwoordigt maximaal lokaal contrast (werkelijke waarden rond 3000..8000). +TP_WAVELET_CURVEEDITOR_CH;Contrastniveau=f(Tint) +TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Wijzigt het contrast van elk niveau als een functie van tint.\nZorg er voor dat de wijzigingen die zijn gemaakt bij de Gamut Tint-toepassing niet worden overschreven.\nDe curve werkt alleen als de Wavelet contrastniveauschuifbalken groter zijn dan nul. TP_WAVELET_CURVEEDITOR_CL;L -TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Contrast luminantie curve. Wordt uitgevoerd aan het einde van de wavelet niveau behandeling. +TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Contrast luminantiecurve. Wordt uitgevoerd aan het einde van de Wavelet niveaubehandeling. TP_WAVELET_CURVEEDITOR_HH;HH -TP_WAVELET_CURVEEDITOR_HH_TOOLTIP;Wijzigt de rest van de afbeelding 's tint als een functie van tint. +TP_WAVELET_CURVEEDITOR_HH_TOOLTIP;Wijzigt de tint van de residuele afbeelding als functie van tint. TP_WAVELET_DALL;Alle richtingen TP_WAVELET_DAUB;Randen TP_WAVELET_DAUB2;D2 - laag @@ -2134,62 +2137,62 @@ TP_WAVELET_DAUB4;D4 - standaard TP_WAVELET_DAUB6;D6 - standaard plus TP_WAVELET_DAUB10;D10 - medium TP_WAVELET_DAUB14;D14 - hoog -TP_WAVELET_DAUB_TOOLTIP;Wijzigt Daubechies coëfficiënt:\nD4 = Standaard,\nD14 = Geeft meestal het beste resultaat met een iets langere verwerkingstijd.\n\nBeïnvloed zowel rand detectie als het algemen resultaat van de eerste niveau´s. De kwaliteit is niet strikt gerelateerd aan deze coëfficiënt en kan variëren per afbeelding en toepassing. -TP_WAVELET_DONE;Richting: Vertikaal -TP_WAVELET_DTHR;Richting: Diagonaal -TP_WAVELET_DTWO;Richting: Horizontaal +TP_WAVELET_DAUB_TOOLTIP;Wijzigt de Daubechies-coëfficiënten:\nD4 = Standaard,\nD14 = Geeft meestal het beste resultaat met een iets langere verwerkingstijd.\n\nBeïnvloed zowel randdetectie als het algemene resultaat van de eerste niveaus. De kwaliteit is niet strikt gerelateerd aan deze coëfficiënt en kan variëren per afbeelding en toepassing. +TP_WAVELET_DONE;Verticaal +TP_WAVELET_DTHR;Diagonaal +TP_WAVELET_DTWO;Horizontaal TP_WAVELET_EDCU;Curve TP_WAVELET_EDGCONT;Lokaal contrast -TP_WAVELET_EDGCONT_TOOLTIP;Schuif de punten naar links om het contrast te verminderen. Naar rechts schuiven vergroot het contrast.\nLinksonder, Linksboven, Rechtsboven, Rechtsonder vertegenwoordigen respectievelijk lokaal contast voor lage waarden, gemiddeld, gemiddeld+stdev, maximum. +TP_WAVELET_EDGCONT_TOOLTIP;Schuif de punten naar links om het contrast te verminderen, naar rechts vergroot het contrast.\nLinksonder, Linksboven, Rechtsboven, Rechtsonder vertegenwoordigen respectievelijk lokaal contast voor lage waarden, gemiddeld, gemiddeld+stdev en maximum. TP_WAVELET_EDGE;Randen verscherpen (Luminantie) -TP_WAVELET_EDGEAMPLI;Basis versterking -TP_WAVELET_EDGEDETECT;Gradiënt gevoeligheid +TP_WAVELET_EDGEAMPLI;Basisversterking +TP_WAVELET_EDGEDETECT;Gradiëntgevoeligheid TP_WAVELET_EDGEDETECTTHR;Drempel laag (ruis) TP_WAVELET_EDGEDETECTTHR2;Drempel hoog (detectie) -TP_WAVELET_EDGEDETECTTHR_TOOLTIP;Wijzigt de rand detectie. Bijvoorbeeld om randverscherping te voorkomen bij fijne details zoals ruis in de lucht. +TP_WAVELET_EDGEDETECTTHR_TOOLTIP;Wijzigt de randdetectie. Bijvoorbeeld om randverscherping te voorkomen bij fijne details zoals ruis in de lucht. TP_WAVELET_EDGEDETECT_TOOLTIP;Beweeg de schuifbalk naar rechts om de randgevoeligheid te vergroten. Dit wijzigt lokaal contrast, randscherpte en ruis. TP_WAVELET_EDGESENSI;Randgevoeligheid -TP_WAVELET_EDGREINF_TOOLTIP;Versterk of verminder de aktie van het eerste niveau en doe het tegenovergestelde voor het tweede niveau en laat de rest ongewijzigd. +TP_WAVELET_EDGREINF_TOOLTIP;Versterk of verminder de actie van het eerste niveau en doe het tegenovergestelde voor het tweede niveau; laat de rest ongewijzigd. TP_WAVELET_EDGTHRESH;Drempel TP_WAVELET_EDGTHRESH_TOOLTIP;Wijzigt de interactie tussen de eerste niveaus en de andere niveaus. Hoe hoger de drempel hoe meer de actie is gecentreerd op de eerste niveaus. Wees voorzichtig met negatieve waarden. Deze versterken de hogere niveaus en kunnen artefacten veroorzaken. TP_WAVELET_EDRAD;Straal -TP_WAVELET_EDRAD_TOOLTIP;Deze straalaanpassing verschilt erg van die in de andere verscherpings tools. De waarde wordt vergeleken met elk niveau op basis van een complexe functie. In dit geval heeft zelfs een nul waarde effect. +TP_WAVELET_EDRAD_TOOLTIP;Deze straalaanpassing verschilt erg van die in de andere verscherpingsgereedschappen. De waarde wordt vergeleken met elk niveau op basis van een complexe functie. In dit geval heeft zelfs een nulwaarde effect. TP_WAVELET_EDSL;Drempel schuifbalk -TP_WAVELET_EDTYPE;Lokaal contrast methode +TP_WAVELET_EDTYPE;Lokaal contrastmethode TP_WAVELET_EDVAL;Waarde TP_WAVELET_FINAL;Finale Bewerking TP_WAVELET_FINEST;fijn -TP_WAVELET_HIGHLIGHT;Hoge lichten: Luminantie Reeks (0..100) +TP_WAVELET_HIGHLIGHT;Hoge lichten: Luminantiereeks (0..100) TP_WAVELET_HS1;Alle luminanties -TP_WAVELET_HS2;Hoge lichten/Schaduwen +TP_WAVELET_HS2;Hoge lichten/schaduwen TP_WAVELET_HUESKIN;Tint reeks (huid) -TP_WAVELET_HUESKIN_TOOLTIP;De laagste punten vormen het begin van de transitie zone, en de bovenste punten het einde. Boven is het effect maximaal.\n\nAls het gebied aanzienlijk moet worden gewijzigd, of als er artefacten ontstaan, dan is de witbalans incorrect. +TP_WAVELET_HUESKIN_TOOLTIP;De laagste punten vormen het begin van de transitiezone en de bovenste punten het einde. Boven is het effect maximaal.\n\nAls het gebied aanzienlijk moet worden gewijzigd, of als er artefacten ontstaan, dan is de witbalans incorrect. TP_WAVELET_HUESKY;Tint Reeks (lucht) -TP_WAVELET_HUESKY_TOOLTIP;De laagste punten vormen het begin van de transitie zone, en de bovenste punten het einde. Boven is het effect maximaal.\n\nAls het gebied aanzienlijk moet worden gewijzigd, of als er artefacten ontstaan, dan is de witbalans incorrect. -TP_WAVELET_ITER;Balans niveau +TP_WAVELET_HUESKY_TOOLTIP;De laagste punten vormen het begin van de transitiezone en de bovenste punten het einde. Boven is het effect maximaal.\n\nAls het gebied aanzienlijk moet worden gewijzigd, of als er artefacten ontstaan, dan is de witbalans incorrect. +TP_WAVELET_ITER;Balansniveau TP_WAVELET_ITER_TOOLTIP;Links: verhoog lage niveaus en verlaag hoge niveaus.\nRechts: verlaag lage niveaus en verhoog hoge niveaus. -TP_WAVELET_LABEL;Wavelet niveaus +TP_WAVELET_LABEL;Wavelet-niveaus TP_WAVELET_LARGEST;grof TP_WAVELET_LEVCH;Chromaticiteit TP_WAVELET_LEVDIR_ALL;Alle niveaus in alle richtingen TP_WAVELET_LEVDIR_INF;Onder of gelijk aan het niveau -TP_WAVELET_LEVDIR_ONE;Eén Niveau +TP_WAVELET_LEVDIR_ONE;Eén niveau TP_WAVELET_LEVDIR_SUP;Boven het niveau -TP_WAVELET_LEVELS;Wavelet niveaus -TP_WAVELET_LEVELS_TOOLTIP;Kies het aantal detail niveaus. Meer niveaus vereisen meer RAM en de verwerking duurt langer. +TP_WAVELET_LEVELS;Wavelet-niveaus +TP_WAVELET_LEVELS_TOOLTIP;Kies het aantal detailniveaus. Meer niveaus vereisen meer RAM en de verwerking duurt langer. TP_WAVELET_LEVF;Contrast TP_WAVELET_LEVLABEL;Voorbeeld maximum mogelijke niveaus=%1 TP_WAVELET_LEVONE;Niveau 2 TP_WAVELET_LEVTHRE;Niveau 4 TP_WAVELET_LEVTWO;Niveau 3 TP_WAVELET_LEVZERO;Niveau 1 -TP_WAVELET_LINKEDG;Koppel met Randscherpte Waarde +TP_WAVELET_LINKEDG;Koppel met Randscherptewaarde TP_WAVELET_LIPST;Verbeterde methode -TP_WAVELET_LOWLIGHT;Schaduwen: Luminantie Reeks (0..100) -TP_WAVELET_MEDGREINF;Eerste Niveau +TP_WAVELET_LOWLIGHT;Grovere niveaus luminantiebereik (0..100) +TP_WAVELET_MEDGREINF;Eerste niveau TP_WAVELET_MEDI;Verminder artefacten in blauwe lucht -TP_WAVELET_MEDILEV;Rand detectie -TP_WAVELET_MEDILEV_TOOLTIP;Bij gebruik van Rand detectie:\n- Maak geen gebruik van de lage contrast niveaus's. Dit voorkomt artefacten.\n- Gebruik de hoge waarden van de Gradiënt gevoeligheid.\n\nJe kunt de sterkte moduleren met 'verfijnen' van Ruisonderdrukking. +TP_WAVELET_MEDILEV;Randdetectie +TP_WAVELET_MEDILEV_TOOLTIP;Bij gebruik van Randdetectie:\n- Maak geen gebruik van de lagecontrast-niveaus. Dit voorkomt artefacten.\n- Gebruik de hoge waarden van de Gradiënt-gevoeligheid.\n\nJe kunt de sterkte moduleren met 'verfijnen' van Ruisonderdrukking. TP_WAVELET_NEUTRAL;Neutraal TP_WAVELET_NOIS;Ruisonderdrukking TP_WAVELET_NOISE;Ruisonderdrukking @@ -2198,52 +2201,52 @@ TP_WAVELET_NPLOW;Laag TP_WAVELET_NPNONE;Geen TP_WAVELET_NPTYPE;Naburige pixels TP_WAVELET_NPTYPE_TOOLTIP;Gebruikt de nabijheid van een pixel en acht naburige pixels. Indien weinig verschil, dan worden randen verscherpt. -TP_WAVELET_OPACITY;Dekking Blauw-Geel Niveau -TP_WAVELET_OPACITYW;Contrast balans d/v-h curve -TP_WAVELET_OPACITYWL;Finale lokaal contrast -TP_WAVELET_OPACITYWL_TOOLTIP;Wijzigt het lokaal contrast aan het einde van de wavelet toepassing.\n\nHet lokaal contrast wordt sterker van links naar rechts. -TP_WAVELET_PASTEL;Pastel chromaciteit -TP_WAVELET_PROC;Process +TP_WAVELET_OPACITY;Dekking Blauw-Geel niveau +TP_WAVELET_OPACITYW;Contrastbalans d/v-h curve +TP_WAVELET_OPACITYWL;Uiteindelijk lokaal contrast +TP_WAVELET_OPACITYWL_TOOLTIP;Wijzigt het lokaal contrast aan het einde van de wavelet-toepassing.\n\nHet lokaal contrast wordt sterker van links naar rechts. +TP_WAVELET_PASTEL;Pastel-chromaciteit +TP_WAVELET_PROC;Proces TP_WAVELET_RE1;Versterkt TP_WAVELET_RE2;Ongewijzigd TP_WAVELET_RE3;Verminderd TP_WAVELET_RESCHRO;Chromaticiteit TP_WAVELET_RESCON;Schaduwen TP_WAVELET_RESCONH;Hoge lichten -TP_WAVELET_RESID;Rest van de afbeelding +TP_WAVELET_RESID;Residuele afbeelding TP_WAVELET_SAT;Verzadigd chromaciteit -TP_WAVELET_SETTINGS;Wavelet Instellingen -TP_WAVELET_SKIN;Huidtinten Wijzigen/Beschermen +TP_WAVELET_SETTINGS;Wavelet-instellingen +TP_WAVELET_SKIN;Huidtinten wijzigen/beschermen TP_WAVELET_SKIN_TOOLTIP;Bij -100 worden alleen huidtinten gewijzigd.\nBij 0 worden alle tinten gelijk behandeld.\nBij +100 worden huidtinten beschermd. Alle andere tinten worden gewijzigd. TP_WAVELET_SKY;Tint-tonen (lucht) Wijzigen/Beschermen -TP_WAVELET_SKY_TOOLTIP;Vergroot/verminder chrominantie in de tint reeks\nVermijd artefacten in blauwe lucht als gevolg van micro-contrast, micro-chroma,... +TP_WAVELET_SKY_TOOLTIP;Vergroot/verminder chrominantie in het tintbereik\nVermijd artefacten in blauwe lucht als gevolg van micro-contrast, micro-chroma,... TP_WAVELET_STREN;Sterkte TP_WAVELET_STRENGTH;Sterkte TP_WAVELET_SUP;Boven het niveau + overblijvend TP_WAVELET_SUPE;Extra -TP_WAVELET_THR;Drempel Schaduwen -TP_WAVELET_THRES;Max niveau +TP_WAVELET_THR;Drempel schaduwen +TP_WAVELET_THRES;Max. niveau TP_WAVELET_THRESHOLD;Hoge lichten: Aantal te gebruiken niveaus (fijn naar grof - leidend) TP_WAVELET_THRESHOLD2;Schaduwen: Aantal te gebruiken niveaus (grof naar fijn) -TP_WAVELET_THRESHOLD2_TOOLTIP;Alleen niveaus tussen '9' en '9 minus gekozen waarde' worden behandeld als schaduwen\nDe andere niveaus worden volledig behandeld\nHet maximum niveau voor schaduwen wordt beperkt door het aantal Hoge lichten niveaus (9- hoge lichten niveau) -TP_WAVELET_THRESHOLD_TOOLTIP;Alleen niveaus boven de gekozen waarde worden behandeld als hoge lichten\nDe andere niveaus worden volledig behandeld -TP_WAVELET_THRH;Drempel Hoge lichten -TP_WAVELET_TILES;Tegel grootte (* 128) -TP_WAVELET_TILESBIG;Grote Tegels -TP_WAVELET_TILESFULL;Volldige afbeelding -TP_WAVELET_TILESIZE;Tegel grootte -TP_WAVELET_TILES_TOOLTIP;De optie 'Volledige afbeelding' geeft een betere kwaliteit en is de aanbevolen keuze. Selecteer Tegels als er onvoldoende geheugen beschikbaar is. Raadpleeg RawPedia voor geheugen aanbevelingen. -TP_WAVELET_TMSTRENGTH;Compressie sterkte -TP_WAVELET_TMSTRENGTH_TOOLTIP;Bepaalt de sterkte van tonemapping of contrast compressie. Als de waarde anders is dan 0, dan worden de Sterkte en Gamma schuifbalken van Tonemapping in de Belichtings tab inactief. -TP_WAVELET_TMTYPE;Compressie methode +TP_WAVELET_THRESHOLD2_TOOLTIP;Alleen niveaus van de gekozen waarde tot het gekozen aantal Wavelet-niveaus zullen worden beïnvloed door het Schaduwluminantiebereik. +TP_WAVELET_THRESHOLD_TOOLTIP;Alleen niveaus beneden en inclusief de gekozen waarde zullen worden beïnvloed door het luminantiebereik van de hoge lichten. +TP_WAVELET_THRH;Drempel hoge lichten +TP_WAVELET_TILES;Tegelgrootte (* 128) +TP_WAVELET_TILESBIG;Grote tegels +TP_WAVELET_TILESFULL;Volledige afbeelding +TP_WAVELET_TILESIZE;Tegelgrootte +TP_WAVELET_TILES_TOOLTIP;De optie 'Volledige afbeelding' geeft een betere kwaliteit en is de aanbevolen keuze. Selecteer 'Grote tegels' als er onvoldoende geheugen beschikbaar is. Raadpleeg RawPedia voor geheugenaanbevelingen. +TP_WAVELET_TMSTRENGTH;Compressiesterkte +TP_WAVELET_TMSTRENGTH_TOOLTIP;Bepaalt de sterkte van het toonmappen of de contrastcompressie. Als de waarde anders is dan 0, dan worden de Sterkte- en Gamma-schuifbalken van Toonmappen in de Belichtingstab inactief. +TP_WAVELET_TMTYPE;Compressiemethode TP_WAVELET_TON;Kleurtinten TP_WBALANCE_AUTO;Automatisch TP_WBALANCE_CAMERA;Camera TP_WBALANCE_CLOUDY;Bewolkt TP_WBALANCE_CUSTOM;Handmatig TP_WBALANCE_DAYLIGHT;Daglicht (zonnig) -TP_WBALANCE_EQBLUERED;Blauw/Rood Balans -TP_WBALANCE_EQBLUERED_TOOLTIP;Wijzigt het normale gedrag van "witbalans" door de blauw/rood balans te verschuiven.\nToepassen wanneer de opname-omstandigheden sterk afwijken van: \na) standaard belichting (bv. onderwater)\nb) de condities waar de calibraties zijn uitgevoerd\nc) de matrices of ICC profielen. +TP_WBALANCE_EQBLUERED;Blauw/Rood-balans +TP_WBALANCE_EQBLUERED_TOOLTIP;Wijzigt het normale gedrag van 'witbalans' door de blauw/rood-balans te veranderen.\nToepassen wanneer de opname-omstandigheden sterk afwijken van: \na) standaardbelichting (bv. onderwater)\nb) de condities waar de kalibraties zijn uitgevoerd\nc) de matrices of ICC-profielen. TP_WBALANCE_FLASH55;Leica TP_WBALANCE_FLASH60;Standaard, Canon, Pentax, Olympus TP_WBALANCE_FLASH65;Nikon, Panasonic, Sony, Minolta @@ -2279,8 +2282,8 @@ TP_WBALANCE_SOLUX41;Solux 4100K TP_WBALANCE_SOLUX47;Solux 4700K (leverancier) TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery) TP_WBALANCE_SPOTWB;Wijs WB aan -TP_WBALANCE_TEMPBIAS;AWB temperatuur afwijking -TP_WBALANCE_TEMPBIAS_TOOLTIP;Wijzigt de berekening van "auto wit balans"\ndoor een afwijking naar warmere of koelere temperatuur \nDe afwijking wordt uitgedrukt als percentage van de berekende temperatuur,\nszodat het resultaat is "computedTemp + computedTemp * afwijking". +TP_WBALANCE_TEMPBIAS;AWB temperatuur-afwijking +TP_WBALANCE_TEMPBIAS_TOOLTIP;Wijzigt de berekening van auto-witbalans\ndoor een afwijking naar warmere of koelere temperatuur.\nDe afwijking wordt uitgedrukt als percentage van de berekende temperatuur,\nzodat het resultaat is: computedTemp + computedTemp * afwijking. TP_WBALANCE_TEMPERATURE;Kleurtemperatuur TP_WBALANCE_TUNGSTEN;Tungsten (wolfraam) TP_WBALANCE_WATER1;Onderwater 1 @@ -2288,9 +2291,9 @@ TP_WBALANCE_WATER2;Onderwater 2 TP_WBALANCE_WATER_HEADER;Onderwater ZOOMPANEL_100;(100%) ZOOMPANEL_NEWCROPWINDOW;Open (nieuw) detailvenster -ZOOMPANEL_ZOOM100;Zoom naar 100%\nSneltoets: z -ZOOMPANEL_ZOOMFITCROPSCREEN;Maak uitsnede passend in het scherm\nSneltoets: f -ZOOMPANEL_ZOOMFITSCREEN;Passend in venster\nSneltoets: Alt-f +ZOOMPANEL_ZOOM100;Zoom naar 100%\nSneltoets: Z +ZOOMPANEL_ZOOMFITCROPSCREEN;Maak uitsnede passend in het scherm\nSneltoets: F +ZOOMPANEL_ZOOMFITSCREEN;Passend in venster\nSneltoets: Alt+F ZOOMPANEL_ZOOMIN;Zoom in\nSneltoets: + ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - @@ -2298,18 +2301,27 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - ! Untranslated keys follow; remove the ! prefix after an entry is translated. !!!!!!!!!!!!!!!!!!!!!!!!! -!FILEBROWSER_POPUPINSPECT;Inspect -!GENERAL_DELETE_ALL;Delete all -!GENERAL_EDIT;Edit -!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. -!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 +ERROR_MSG_METADATA_VALUE;Metadata: fout bij omzetting %1 naar %2 +EXIFFILTER_PATH;Bestandspad +EXIFPANEL_ACTIVATE_ALL_HINT;Selecteer alle tags +EXIFPANEL_ACTIVATE_NONE_HINT;Deselecteer alle tags +EXIFPANEL_BASIC_GROUP;Basis +EXIFPANEL_VALUE_NOT_SHOWN;Niet getoond +FILEBROWSER_POPUPINSPECT;Inspecteer +FILEBROWSER_POPUPSORTBY;Sorteer bestanden +FILECHOOSER_FILTER_EXECUTABLE;Uitvoerbare bestanden +GENERAL_DELETE_ALL;Wis alles +GENERAL_EDIT;Bewerk +GENERAL_OTHER;Ander +HISTOGRAM_TOOLTIP_CROSSHAIR;Toon/verberg indicatorkruis +HISTOGRAM_TOOLTIP_SHOW_OPTIONS;Toon/verberg optieknoppen +HISTOGRAM_TOOLTIP_TRACE_BRIGHTNESS;Pas helderheid aan +HISTOGRAM_TOOLTIP_TYPE_HISTOGRAM;Histogram +HISTOGRAM_TOOLTIP_TYPE_HISTOGRAM_RAW;Raw-histogram +HISTOGRAM_TOOLTIP_TYPE_PARADE;RGB-Parade +HISTOGRAM_TOOLTIP_TYPE_VECTORbereik_HC;Tint-Chroma vectorscope +HISTOGRAM_TOOLTIP_TYPE_VECTORbereik_HS;Tint-Verzadiging vectorscope +HISTOGRAM_TOOLTIP_TYPE_WAVEFORM;Golfvorm !HISTORY_MSG_446;--unused-- !HISTORY_MSG_447;--unused-- !HISTORY_MSG_448;--unused-- @@ -2326,1003 +2338,1089 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_466;--unused-- !HISTORY_MSG_467;--unused-- !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_515;Local Adjustments -!HISTORY_MSG_516;Local - Color and light -!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_523;Local - LL Curve -!HISTORY_MSG_524;Local - CC curve -!HISTORY_MSG_525;Local - LH Curve -!HISTORY_MSG_526;Local - H curve -!HISTORY_MSG_527;Local - Color Inverse -!HISTORY_MSG_528;Local - Exposure -!HISTORY_MSG_529;Local - Exp Compensation -!HISTORY_MSG_530;Local - Exp Hlcompr -!HISTORY_MSG_531;Local - Exp hlcomprthresh -!HISTORY_MSG_532;Local - Exp black -!HISTORY_MSG_533;Local - Exp Shcompr -!HISTORY_MSG_534;Local - Warm Cool -!HISTORY_MSG_535;Local - Exp Scope -!HISTORY_MSG_536;Local - Exp Contrast curve -!HISTORY_MSG_537;Local - Vibrance -!HISTORY_MSG_538;Local - Vib Saturated -!HISTORY_MSG_539;Local - Vib Pastel -!HISTORY_MSG_540;Local - Vib Threshold -!HISTORY_MSG_541;Local - Vib Protect skin tones -!HISTORY_MSG_542;Local - Vib avoid colorshift -!HISTORY_MSG_543;Local - Vib link -!HISTORY_MSG_544;Local - Vib Scope -!HISTORY_MSG_545;Local - Vib H curve -!HISTORY_MSG_546;Local - Blur and noise -!HISTORY_MSG_547;Local - Radius -!HISTORY_MSG_548;Local - Noise -!HISTORY_MSG_549;Local - Blur scope -!HISTORY_MSG_550;Local - Blur method -!HISTORY_MSG_551;Local - Blur Luminance only -!HISTORY_MSG_552;Local - Tone mapping -!HISTORY_MSG_553;Local - TM compression strength -!HISTORY_MSG_554;Local - TM gamma -!HISTORY_MSG_555;Local - TM edge stopping -!HISTORY_MSG_556;Local - TM scale -!HISTORY_MSG_557;Local - TM Reweighting -!HISTORY_MSG_558;Local - TM scope -!HISTORY_MSG_559;Local - Retinex -!HISTORY_MSG_560;Local - Retinex method -!HISTORY_MSG_561;Local - Retinex strength -!HISTORY_MSG_562;Local - Retinex chroma -!HISTORY_MSG_563;Local - Retinex radius -!HISTORY_MSG_564;Local - Retinex contrast -!HISTORY_MSG_565;Local - scope -!HISTORY_MSG_566;Local - Retinex Gain curve -!HISTORY_MSG_567;Local - Retinex Inverse -!HISTORY_MSG_568;Local - Sharpening -!HISTORY_MSG_569;Local - Sh Radius -!HISTORY_MSG_570;Local - Sh Amount -!HISTORY_MSG_571;Local - Sh Damping -!HISTORY_MSG_572;Local - Sh Iterations -!HISTORY_MSG_573;Local - Sh Scope -!HISTORY_MSG_574;Local - Sh Inverse -!HISTORY_MSG_575;Local - CBDL -!HISTORY_MSG_576;Local - cbdl mult -!HISTORY_MSG_577;Local - cbdl chroma -!HISTORY_MSG_578;Local - cbdl threshold -!HISTORY_MSG_579;Local - cbdl scope +HISTORY_MSG_496;LA - Spot verwijderd +HISTORY_MSG_497;LA - Spot geselecteerd +!HISTORY_MSG_498;--unused-- +!HISTORY_MSG_499;--unused-- +HISTORY_MSG_500;LA - Spotvorm +HISTORY_MSG_501;LA - Spotmethode +HISTORY_MSG_502;LA - SC - Vorm method +HISTORY_MSG_503;LA - Spot - Rechts +HISTORY_MSG_504;LA - Spot - Links +HISTORY_MSG_505;LA - Spot - Onder +HISTORY_MSG_506;LA - Spot - Boven +HISTORY_MSG_507;LA - Spot - Centrum +HISTORY_MSG_508;LA - Spot - Grootte +HISTORY_MSG_509;LA - Spot kwaliteitsmethode +HISTORY_MSG_510;LA - TG - Transitiewaarde +HISTORY_MSG_511;LA - SD - Drempel ΔE-bereik +HISTORY_MSG_512;LA - SD - ΔE-verval +HISTORY_MSG_513;LA - Spot - Uitsluiting - bereik +HISTORY_MSG_514;LA - Spotstructuur +HISTORY_MSG_515;LA - Aanpassingen +HISTORY_MSG_516;LA - Kleur en Licht +HISTORY_MSG_517;LA - Activeer super +HISTORY_MSG_518;LA - Lichtheid +HISTORY_MSG_519;LA - Contrast +HISTORY_MSG_520;LA - Chrominantie +HISTORY_MSG_521;LA - Bereik +HISTORY_MSG_522;LA - Curvemethode +HISTORY_MSG_523;LA - LL-curve +HISTORY_MSG_524;LA - CC-curve +HISTORY_MSG_525;LA - LH-curve +HISTORY_MSG_526;LA - H-curve +HISTORY_MSG_527;LA - Inverteer kleur +HISTORY_MSG_528;LA - Belichting +HISTORY_MSG_529;LA - Belichtingscompensatie +HISTORY_MSG_530;LA - Bel. Hlcompr +HISTORY_MSG_531;LA - Bel. hlcomprthresh +HISTORY_MSG_532;LA - Bel. zwart +HISTORY_MSG_533;LA - Bel. Shcompr +HISTORY_MSG_534;LA - Warm Koel +HISTORY_MSG_535;LA - Bel. Bereik +HISTORY_MSG_536;LA - Bel. Contrastcurve +HISTORY_MSG_537;LA - Levendigheid +HISTORY_MSG_538;LA - Lev. Verzadigd +HISTORY_MSG_539;LA - Lev. Pastel +HISTORY_MSG_540;LA - Lev. Drempel +HISTORY_MSG_541;LA - Lev. Bescherm huidtonen +HISTORY_MSG_542;LA - Lev. Vermijd kleurverschuiving +HISTORY_MSG_543;LA - Lev. Koppel +HISTORY_MSG_544;LA - Lev. Bereik +HISTORY_MSG_545;LA - Lev. H-curve +HISTORY_MSG_546;LA - Vervaging en Ruisvermindering +HISTORY_MSG_547;LA - Straal +HISTORY_MSG_548;LA - Ruis +HISTORY_MSG_549;LA - Bereik ruisvermindering +HISTORY_MSG_550;LA - Methode ruisvermindering +HISTORY_MSG_551;LA - Ruisvermindering alleen Luminantie +HISTORY_MSG_552;LA - Toonmappen +HISTORY_MSG_553;LA - TM compressiesterkte +HISTORY_MSG_554;LA - TM gamma +HISTORY_MSG_555;LA - TM edge stopping +HISTORY_MSG_556;LA - TM Schaal +HISTORY_MSG_557;LA - TM Herwogen +HISTORY_MSG_558;LA - TM Bereik +HISTORY_MSG_559;LA - Retinex +HISTORY_MSG_560;LA - Retinex methode +HISTORY_MSG_561;LA - Retinex kracht +HISTORY_MSG_562;LA - Retinex chroma +HISTORY_MSG_563;LA - Retinex straal +HISTORY_MSG_564;LA - Retinex contrast +HISTORY_MSG_565;LA - Bereik +HISTORY_MSG_566;LA - Retinex versterkingscurve +HISTORY_MSG_567;LA - Retinex Omgekeerd +HISTORY_MSG_568;LA - Verscherping +HISTORY_MSG_569;LA - Sh Straal +HISTORY_MSG_570;LA - Sh Hoeveelheid +HISTORY_MSG_571;LA - Sh Demping +HISTORY_MSG_572;LA - Sh Herhalingen +HISTORY_MSG_573;LA - Sh Bereik +HISTORY_MSG_574;LA - Sh Omgekeerd +HISTORY_MSG_575;LA - CBDL +HISTORY_MSG_576;LA - cbdl mult +HISTORY_MSG_577;LA - cbdl chroma +HISTORY_MSG_578;LA - cbdl drempel +HISTORY_MSG_579;LA - cbdl bereik !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_591;Local - Avoid color shift -!HISTORY_MSG_592;Local - Sh Contrast -!HISTORY_MSG_593;Local - Local contrast -!HISTORY_MSG_594;Local - Local contrast radius -!HISTORY_MSG_595;Local - Local contrast amount -!HISTORY_MSG_596;Local - Local contrast darkness -!HISTORY_MSG_597;Local - Local contrast lightness -!HISTORY_MSG_598;Local - Local contrast scope -!HISTORY_MSG_599;Local - Retinex dehaze -!HISTORY_MSG_600;Local - Soft Light enable -!HISTORY_MSG_601;Local - Soft Light strength -!HISTORY_MSG_602;Local - Soft Light scope -!HISTORY_MSG_603;Local - Sh Blur radius -!HISTORY_MSG_605;Local - Mask preview choice -!HISTORY_MSG_606;Local Spot selected -!HISTORY_MSG_607;Local - Color Mask C -!HISTORY_MSG_608;Local - Color Mask L -!HISTORY_MSG_609;Local - Exp Mask C -!HISTORY_MSG_610;Local - Exp Mask L -!HISTORY_MSG_611;Local - Color Mask H -!HISTORY_MSG_612;Local - Color Structure -!HISTORY_MSG_613;Local - Exp Structure -!HISTORY_MSG_614;Local - Exp Mask H -!HISTORY_MSG_615;Local - Blend color -!HISTORY_MSG_616;Local - Blend Exp -!HISTORY_MSG_617;Local - Blur Exp -!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_623;Local - Exp Chroma compensation -!HISTORY_MSG_624;Local - Color correction grid -!HISTORY_MSG_625;Local - Color correction strength -!HISTORY_MSG_626;Local - Color correction Method -!HISTORY_MSG_627;Local - Shadow Highlight -!HISTORY_MSG_628;Local - SH Highlight -!HISTORY_MSG_629;Local - SH H tonalwidth -!HISTORY_MSG_630;Local - SH Shadows -!HISTORY_MSG_631;Local - SH S tonalwidth -!HISTORY_MSG_632;Local - SH radius -!HISTORY_MSG_633;Local - SH Scope -!HISTORY_MSG_634;Local - radius color -!HISTORY_MSG_635;Local - radius Exp -!HISTORY_MSG_636;Local - Tool added -!HISTORY_MSG_637;Local - SH Mask C -!HISTORY_MSG_638;Local - SH Mask L -!HISTORY_MSG_639;Local - SH Mask H -!HISTORY_MSG_640;Local - SH blend -!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_646;Local - Exp mask chroma -!HISTORY_MSG_647;Local - Exp mask gamma -!HISTORY_MSG_648;Local - Exp mask slope -!HISTORY_MSG_649;Local - Exp soft radius -!HISTORY_MSG_650;Local - Color mask chroma -!HISTORY_MSG_651;Local - Color mask gamma -!HISTORY_MSG_652;Local - Color mask slope -!HISTORY_MSG_653;Local - SH mask chroma -!HISTORY_MSG_654;Local - SH mask gamma -!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_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_581;LA - Ruisverm. lum f 1 +HISTORY_MSG_582;LA - Ruisverm. lum c +HISTORY_MSG_583;LA - Ruisverm. lum detail +HISTORY_MSG_584;LA - Ruisverm. equalizer Wit-Zwart +HISTORY_MSG_585;LA - Ruisverm. chro f +HISTORY_MSG_586;LA - Ruisverm. chro c +HISTORY_MSG_587;LA - Ruisverm. chro detail +HISTORY_MSG_588;LA - Ruisverm. equalizer Blauw-Rood +HISTORY_MSG_589;LA - Ruisverm. bilateraal +HISTORY_MSG_590;LA - Ruisverm. bereik +HISTORY_MSG_591;LA - Voorkom kleurverschuiving +HISTORY_MSG_592;LA - Sh Contrast +HISTORY_MSG_593;LA - LA contrast +HISTORY_MSG_594;LA - Lokaal contrast straal +HISTORY_MSG_595;LA - Lokaal contrast hoeveelheid +HISTORY_MSG_596;LA - Lokaal contrast donkerte +HISTORY_MSG_597;LA - Lokaal contrast lichtheid +HISTORY_MSG_598;LA - Lokaal contrast bereik +HISTORY_MSG_599;LA - Retinex ontnevel +HISTORY_MSG_600;LA - Zacht licht activeer +HISTORY_MSG_601;LA - Zacht licht kracht +HISTORY_MSG_602;LA - Zacht licht bereik +HISTORY_MSG_603;LA - Sh Vervagingsradius +HISTORY_MSG_605;LA - Keuze maskervoorbeeld +HISTORY_MSG_606;LA - Spot geslecteerd +HISTORY_MSG_607;LA - Kleurmasker C +HISTORY_MSG_608;LA - Kleurmasker L +HISTORY_MSG_609;LA - Bel.masker C +HISTORY_MSG_610;LA - Bel.masker L +HISTORY_MSG_611;LA - Kleurmasker H +HISTORY_MSG_612;LA - Kleur structuur +HISTORY_MSG_613;LA - Bel. structuur +HISTORY_MSG_614;LA - Bel.masker H +HISTORY_MSG_615;LA - Meng kleur +HISTORY_MSG_616;LA - Meng bel. +HISTORY_MSG_617;LA - Vervaag Bel. +HISTORY_MSG_618;LA - Gebruik kleurmasker +HISTORY_MSG_619;LA - Gebruik bel.masker +HISTORY_MSG_620;LA - Meng col +HISTORY_MSG_621;LA - Bel. omgekeerd +HISTORY_MSG_622;LA - Spot - Uitsluiting - Spotstructuur +HISTORY_MSG_623;LA - Bel. Chroma-compensatie +HISTORY_MSG_624;LA - Kleurcorrectieraster +HISTORY_MSG_625;LA - Kleurcorrectie kracht +HISTORY_MSG_626;LA - Kleurcorrectie methode +HISTORY_MSG_627;LA - Schaduw Hoge lichten +HISTORY_MSG_628;LA - SH Hoge lichten +HISTORY_MSG_629;LA - SH H tonaalomvang +HISTORY_MSG_630;LA - SH Schaduwen +HISTORY_MSG_631;LA - SH S tonaalomvang +HISTORY_MSG_632;LA - SH straal +HISTORY_MSG_633;LA - SH bereik +HISTORY_MSG_634;LA - straal kleur +HISTORY_MSG_635;LA - straal Bel. +HISTORY_MSG_636;LA - Gereedschap toegevoegd +HISTORY_MSG_637;LA - SH Masker C +HISTORY_MSG_638;LA - SH Masker L +HISTORY_MSG_639;LA - SH Masker H +HISTORY_MSG_640;LA - SH meng +HISTORY_MSG_641;LA - Gebruik SH-masker +HISTORY_MSG_642;LA - Straal SH +HISTORY_MSG_643;LA - Vervaag SH +HISTORY_MSG_644;LA - Keer SH om +HISTORY_MSG_645;LA - SD - ab-L-balans +HISTORY_MSG_646;LA - Bel.masker chroma +HISTORY_MSG_647;LA - Bel.masker gamma +HISTORY_MSG_648;LA - Bel.masker helling +HISTORY_MSG_649;LA - Bel. verzachting straal +HISTORY_MSG_650;LA - Kleurmasker chroma +HISTORY_MSG_651;LA - Kleurmasker gamma +HISTORY_MSG_652;LA - Kleurmasker helling +HISTORY_MSG_653;LA - SH-masker chroma +HISTORY_MSG_654;LA - SH-masker gamma +HISTORY_MSG_655;LA - SH-masker helling +HISTORY_MSG_656;LA - Kleur zachte radius +HISTORY_MSG_657;LA - Retinex verminder onregelmatigheden +HISTORY_MSG_658;LA - CBDL zachte radius +HISTORY_MSG_659;LA - TG - Transitieverval +HISTORY_MSG_660;LA - CBDL klaarheid +HISTORY_MSG_661;LA - CBDL residueel contrast +HISTORY_MSG_662;LA - Verminder ruis lum f 0 +HISTORY_MSG_663;LA - Verminder ruis lum f 2 !HISTORY_MSG_664;--unused-- -!HISTORY_MSG_665;Local - cbdl mask Blend -!HISTORY_MSG_666;Local - cbdl mask radius -!HISTORY_MSG_667;Local - cbdl mask chroma -!HISTORY_MSG_668;Local - cbdl mask gamma -!HISTORY_MSG_669;Local - cbdl mask slope -!HISTORY_MSG_670;Local - cbdl mask C -!HISTORY_MSG_671;Local - cbdl mask L -!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_677;Local - TM amount -!HISTORY_MSG_678;Local - TM saturation -!HISTORY_MSG_679;Local - Retinex mask C -!HISTORY_MSG_680;Local - Retinex mask L -!HISTORY_MSG_681;Local - Retinex mask CL -!HISTORY_MSG_682;Local - Retinex mask -!HISTORY_MSG_683;Local - Retinex mask Blend -!HISTORY_MSG_684;Local - Retinex mask radius -!HISTORY_MSG_685;Local - Retinex mask chroma -!HISTORY_MSG_686;Local - Retinex mask gamma -!HISTORY_MSG_687;Local - Retinex mask slope -!HISTORY_MSG_688;Local - Tool removed -!HISTORY_MSG_689;Local - Retinex mask transmission map -!HISTORY_MSG_690;Local - Retinex scale -!HISTORY_MSG_691;Local - Retinex darkness -!HISTORY_MSG_692;Local - Retinex lightness -!HISTORY_MSG_693;Local - Retinex threshold -!HISTORY_MSG_694;Local - Retinex Laplacian threshold -!HISTORY_MSG_695;Local - Soft method -!HISTORY_MSG_696;Local - Retinex Normalize -!HISTORY_MSG_697;Local - TM Normalize -!HISTORY_MSG_698;Local - Local contrast Fast Fourier -!HISTORY_MSG_699;Local - Retinex Fast Fourier -!HISTORY_MSG_701;Local - Exp Shadows -!HISTORY_MSG_702;Local - Exp Method -!HISTORY_MSG_703;Local - Exp Laplacian threshold -!HISTORY_MSG_704;Local - Exp PDE balance -!HISTORY_MSG_705;Local - Exp linearity -!HISTORY_MSG_706;Local - TM mask C -!HISTORY_MSG_707;Local - TM mask L -!HISTORY_MSG_708;Local - TM mask CL -!HISTORY_MSG_709;Local - use TM mask -!HISTORY_MSG_710;Local - TM mask Blend -!HISTORY_MSG_711;Local - TM mask radius -!HISTORY_MSG_712;Local - TM mask chroma -!HISTORY_MSG_713;Local - TM mask gamma -!HISTORY_MSG_714;Local - TM mask slope -!HISTORY_MSG_716;Local - Local method -!HISTORY_MSG_717;Local - Local contrast -!HISTORY_MSG_718;Local - Local contrast levels -!HISTORY_MSG_719;Local - Local contrast residual L -!HISTORY_MSG_720;Local - Blur mask C -!HISTORY_MSG_721;Local - Blur mask L -!HISTORY_MSG_722;Local - Blur mask CL -!HISTORY_MSG_723;Local - use Blur mask -!HISTORY_MSG_725;Local - Blur mask Blend -!HISTORY_MSG_726;Local - Blur mask radius -!HISTORY_MSG_727;Local - Blur mask chroma -!HISTORY_MSG_728;Local - Blur mask gamma -!HISTORY_MSG_729;Local - Blur mask slope -!HISTORY_MSG_730;Local - Blur method -!HISTORY_MSG_731;Local - median method -!HISTORY_MSG_732;Local - median iterations -!HISTORY_MSG_733;Local - soft radius -!HISTORY_MSG_734;Local - detail -!HISTORY_MSG_738;Local - Local contrast Merge L -!HISTORY_MSG_739;Local - Local contrast Soft radius -!HISTORY_MSG_740;Local - Local contrast Merge C -!HISTORY_MSG_741;Local - Local contrast Residual C -!HISTORY_MSG_742;Local - Exp Laplacian gamma -!HISTORY_MSG_743;Local - Exp Fattal Amount -!HISTORY_MSG_744;Local - Exp Fattal Detail -!HISTORY_MSG_745;Local - Exp Fattal Offset -!HISTORY_MSG_746;Local - Exp Fattal Sigma -!HISTORY_MSG_747;Local Spot created -!HISTORY_MSG_748;Local - Exp Denoise -!HISTORY_MSG_749;Local - Reti Depth -!HISTORY_MSG_750;Local - Reti Mode log - lin -!HISTORY_MSG_751;Local - Reti Dehaze saturation -!HISTORY_MSG_752;Local - Reti Offset -!HISTORY_MSG_753;Local - Reti Transmission map -!HISTORY_MSG_754;Local - Reti Clip -!HISTORY_MSG_755;Local - TM use tm mask -!HISTORY_MSG_756;Local - Exp use algo exposure mask -!HISTORY_MSG_757;Local - Exp Laplacian mask -!HISTORY_MSG_758;Local - Reti Laplacian mask -!HISTORY_MSG_759;Local - Exp Laplacian mask -!HISTORY_MSG_760;Local - Color Laplacian mask -!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_766;Local - Blur Fast Fourier -!HISTORY_MSG_767;Local - Grain Iso -!HISTORY_MSG_768;Local - Grain Strength -!HISTORY_MSG_769;Local - Grain Scale -!HISTORY_MSG_770;Local - Color Mask contrast curve -!HISTORY_MSG_771;Local - Exp Mask contrast curve -!HISTORY_MSG_772;Local - SH Mask contrast curve -!HISTORY_MSG_773;Local - TM Mask contrast curve -!HISTORY_MSG_774;Local - Reti Mask contrast curve -!HISTORY_MSG_775;Local - CBDL Mask contrast curve -!HISTORY_MSG_776;Local - Blur Denoise Mask contrast curve -!HISTORY_MSG_777;Local - Blur Mask local contrast curve -!HISTORY_MSG_778;Local - Mask highlights -!HISTORY_MSG_779;Local - Color Mask local contrast curve -!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_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_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_797;Local - Merge Original method -!HISTORY_MSG_798;Local - Opacity -!HISTORY_MSG_799;Local - Color RGB ToneCurve -!HISTORY_MSG_800;Local - Color ToneCurve Method -!HISTORY_MSG_801;Local - Color ToneCurve Special -!HISTORY_MSG_802;Local - Contrast threshold -!HISTORY_MSG_803;Local - Color Merge -!HISTORY_MSG_804;Local - Color mask Structure -!HISTORY_MSG_805;Local - Blur Noise mask Structure -!HISTORY_MSG_806;Local - Color mask Structure as tool -!HISTORY_MSG_807;Local - Blur Noise mask Structure as tool -!HISTORY_MSG_808;Local - Color mask curve H(H) -!HISTORY_MSG_809;Local - Vib mask curve C(C) -!HISTORY_MSG_810;Local - Vib mask curve L(L) -!HISTORY_MSG_811;Local - Vib mask curve LC(H) -!HISTORY_MSG_813;Local - Use Vib mask -!HISTORY_MSG_814;Local - Vib mask Blend -!HISTORY_MSG_815;Local - Vib mask radius -!HISTORY_MSG_816;Local - Vib mask chroma -!HISTORY_MSG_817;Local - Vib mask gamma -!HISTORY_MSG_818;Local - Vib mask slope -!HISTORY_MSG_819;Local - Vib mask laplacian -!HISTORY_MSG_820;Local - Vib mask contrast curve -!HISTORY_MSG_821;Local - color grid background -!HISTORY_MSG_822;Local - color background merge -!HISTORY_MSG_823;Local - color background luminance -!HISTORY_MSG_824;Local - Exp gradient mask strength -!HISTORY_MSG_825;Local - Exp gradient mask angle -!HISTORY_MSG_826;Local - Exp gradient strength -!HISTORY_MSG_827;Local - Exp gradient angle -!HISTORY_MSG_828;Local - SH gradient strength -!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_834;Local - Color gradient strength H -!HISTORY_MSG_835;Local - Vib gradient strength L -!HISTORY_MSG_836;Local - Vib gradient angle -!HISTORY_MSG_837;Local - Vib gradient strength C -!HISTORY_MSG_838;Local - Vib gradient strength H -!HISTORY_MSG_839;Local - Software complexity -!HISTORY_MSG_840;Local - CL Curve -!HISTORY_MSG_841;Local - LC curve -!HISTORY_MSG_842;Local - Blur mask Radius -!HISTORY_MSG_843;Local - Blur mask Contrast Threshold -!HISTORY_MSG_844;Local - Blur mask FFTW -!HISTORY_MSG_845;Local - Log encoding -!HISTORY_MSG_846;Local - Log encoding auto -!HISTORY_MSG_847;Local - Log encoding Source -!HISTORY_MSG_849;Local - Log encoding Source auto -!HISTORY_MSG_850;Local - Log encoding B_Ev -!HISTORY_MSG_851;Local - Log encoding W_Ev -!HISTORY_MSG_852;Local - Log encoding Target -!HISTORY_MSG_853;Local - Log encodind loc contrast -!HISTORY_MSG_854;Local - Log encodind Scope -!HISTORY_MSG_855;Local - Log encoding Whole image -!HISTORY_MSG_856;Local - Log encoding Shadows range -!HISTORY_MSG_857;Local - Wavelet blur residual -!HISTORY_MSG_858;Local - Wavelet blur luminance only -!HISTORY_MSG_859;Local - Wavelet max blur -!HISTORY_MSG_860;Local - Wavelet blur levels -!HISTORY_MSG_861;Local - Wavelet contrast levels -!HISTORY_MSG_862;Local - Wavelet contrast attenuation -!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_869;Local - Denoise by level -!HISTORY_MSG_870;Local - Wavelet mask curve H -!HISTORY_MSG_871;Local - Wavelet mask curve C -!HISTORY_MSG_872;Local - Wavelet mask curve L -!HISTORY_MSG_873;Local - Wavelet mask -!HISTORY_MSG_875;Local - Wavelet mask blend -!HISTORY_MSG_876;Local - Wavelet mask smooth -!HISTORY_MSG_877;Local - Wavelet mask chroma -!HISTORY_MSG_878;Local - Wavelet mask contrast curve -!HISTORY_MSG_879;Local - Wavelet contrast chroma -!HISTORY_MSG_880;Local - Wavelet blur chroma -!HISTORY_MSG_881;Local - Wavelet contrast offset -!HISTORY_MSG_882;Local - Wavelet blur -!HISTORY_MSG_883;Local - Wavelet contrast by level -!HISTORY_MSG_884;Local - Wavelet dir contrast -!HISTORY_MSG_885;Local - Wavelet tone mapping -!HISTORY_MSG_886;Local - Wavelet tone mapping compress -!HISTORY_MSG_887;Local - Wavelet tone mapping compress residual -!HISTORY_MSG_888;Local - Contrast Wavelet Balance Threshold -!HISTORY_MSG_889;Local - Contrast Wavelet Graduated Strength -!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_897;Local - Contrast Wavelet ES strength -!HISTORY_MSG_898;Local - Contrast Wavelet ES radius -!HISTORY_MSG_899;Local - Contrast Wavelet ES detail -!HISTORY_MSG_900;Local - Contrast Wavelet ES gradient -!HISTORY_MSG_901;Local - Contrast Wavelet ES threshold low -!HISTORY_MSG_902;Local - Contrast Wavelet ES threshold high -!HISTORY_MSG_903;Local - Contrast Wavelet ES local contrast -!HISTORY_MSG_904;Local - Contrast Wavelet ES first level -!HISTORY_MSG_905;Local - Contrast Wavelet Edge Sharpness -!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_911;Local - Blur Chroma Luma -!HISTORY_MSG_912;Local - Blur Guide filter strength -!HISTORY_MSG_913;Local - Contrast Wavelet Sigma DR -!HISTORY_MSG_914;Local - Blur Wavelet Sigma BL -!HISTORY_MSG_915;Local - Edge Wavelet Sigma ED -!HISTORY_MSG_916;Local - Residual wavelet shadows -!HISTORY_MSG_917;Local - Residual wavelet shadows threshold -!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_923;Local - Tool complexity mode -!HISTORY_MSG_924;--unused-- -!HISTORY_MSG_925;Local - Scope color tools -!HISTORY_MSG_926;Local - Show mask type -!HISTORY_MSG_927;Local - Shadow -!HISTORY_MSG_928;Local - Common color mask -!HISTORY_MSG_929;Local - Mask common scope -!HISTORY_MSG_930;Local - Mask Common blend luma -!HISTORY_MSG_931;Local - Mask Common enable -!HISTORY_MSG_932;Local - Mask Common radius soft -!HISTORY_MSG_933;Local - Mask Common laplacian -!HISTORY_MSG_934;Local - Mask Common chroma -!HISTORY_MSG_935;Local - Mask Common gamma -!HISTORY_MSG_936;Local - Mask Common slope -!HISTORY_MSG_937;Local - Mask Common curve C(C) -!HISTORY_MSG_938;Local - Mask Common curve L(L) -!HISTORY_MSG_939;Local - Mask Common curve LC(H) -!HISTORY_MSG_940;Local - Mask Common structure as tool -!HISTORY_MSG_941;Local - Mask Common structure strength -!HISTORY_MSG_942;Local - Mask Common H(H) curve -!HISTORY_MSG_943;Local - Mask Common FFT -!HISTORY_MSG_944;Local - Mask Common Blur radius -!HISTORY_MSG_945;Local - Mask Common contrast threshold -!HISTORY_MSG_946;Local - Mask Common shadows -!HISTORY_MSG_947;Local - Mask Common Contrast curve -!HISTORY_MSG_948;Local - Mask Common Wavelet curve -!HISTORY_MSG_949;Local - Mask Common Threshold levels -!HISTORY_MSG_950;Local - Mask Common GF strength -!HISTORY_MSG_951;Local - Mask Common GF angle -!HISTORY_MSG_952;Local - Mask Common soft radius -!HISTORY_MSG_953;Local - Mask Common blend chroma -!HISTORY_MSG_954;Local - Show-hide tools -!HISTORY_MSG_955;Local - Enable Spot -!HISTORY_MSG_956;Local - CH Curve -!HISTORY_MSG_957;Local - Denoise mode -!HISTORY_MSG_958;Local - Show/hide settings -!HISTORY_MSG_959;Local - Inverse blur -!HISTORY_MSG_960;Local - Log encoding - cat16 -!HISTORY_MSG_961;Local - Log encoding Ciecam -!HISTORY_MSG_962;Local - Log encoding Absolute luminance source -!HISTORY_MSG_963;Local - Log encoding Absolute luminance target -!HISTORY_MSG_964;Local - Log encoding Surround -!HISTORY_MSG_965;Local - Log encoding Saturation s -!HISTORY_MSG_966;Local - Log encoding Contrast J -!HISTORY_MSG_967;Local - Log encoding Mask curve C -!HISTORY_MSG_968;Local - Log encoding Mask curve L -!HISTORY_MSG_969;Local - Log encoding Mask curve H -!HISTORY_MSG_970;Local - Log encoding Mask enable -!HISTORY_MSG_971;Local - Log encoding Mask blend -!HISTORY_MSG_972;Local - Log encoding Mask radius -!HISTORY_MSG_973;Local - Log encoding Mask chroma -!HISTORY_MSG_974;Local - Log encoding Mask contrast -!HISTORY_MSG_975;Local - Log encoding Lightness J -!HISTORY_MSG_977;Local - Log encoding Contrast Q -!HISTORY_MSG_978;Local - Log encoding Sursource -!HISTORY_MSG_979;Local - Log encoding Brightness Q -!HISTORY_MSG_980;Local - Log encoding Colorfulness M -!HISTORY_MSG_981;Local - Log encoding Strength -!HISTORY_MSG_982;Local - Equalizer hue -!HISTORY_MSG_983;Local - denoise threshold mask high -!HISTORY_MSG_984;Local - denoise threshold mask low -!HISTORY_MSG_985;Local - denoise Laplacian -!HISTORY_MSG_986;Local - denoise reinforce -!HISTORY_MSG_987;Local - GF recovery threshold -!HISTORY_MSG_988;Local - GF threshold mask low -!HISTORY_MSG_989;Local - GF threshold mask high -!HISTORY_MSG_990;Local - Denoise recovery threshold -!HISTORY_MSG_991;Local - Denoise threshold mask low -!HISTORY_MSG_992;Local - Denoise threshold mask high -!HISTORY_MSG_993;Local - Denoise Inverse algo -!HISTORY_MSG_994;Local - GF Inverse algo -!HISTORY_MSG_995;Local - Denoise decay -!HISTORY_MSG_996;Local - Color recovery threshold -!HISTORY_MSG_997;Local - Color threshold mask low -!HISTORY_MSG_998;Local - Color threshold mask high -!HISTORY_MSG_999;Local - Color decay -!HISTORY_MSG_1000;Local - Denoise luminance gray -!HISTORY_MSG_1001;Local - Log recovery threshold -!HISTORY_MSG_1002;Local - Log threshold mask low -!HISTORY_MSG_1003;Local - Log threshold mask high -!HISTORY_MSG_1004;Local - Log decay -!HISTORY_MSG_1005;Local - Exp recovery threshold -!HISTORY_MSG_1006;Local - Exp threshold mask low -!HISTORY_MSG_1007;Local - Exp threshold mask high -!HISTORY_MSG_1008;Local - Exp decay -!HISTORY_MSG_1009;Local - SH recovery threshold -!HISTORY_MSG_1010;Local - SH threshold mask low -!HISTORY_MSG_1011;Local - SH threshold mask high -!HISTORY_MSG_1012;Local - SH decay -!HISTORY_MSG_1013;Local - vib recovery threshold -!HISTORY_MSG_1014;Local - vib threshold mask low -!HISTORY_MSG_1015;Local - vib threshold mask high -!HISTORY_MSG_1016;Local - vib decay -!HISTORY_MSG_1017;Local - lc recovery threshold -!HISTORY_MSG_1018;Local - lc threshold mask low -!HISTORY_MSG_1019;Local - lc threshold mask high -!HISTORY_MSG_1020;Local - lc decay -!HISTORY_MSG_1021;Local - Denoise chrominance gray -!HISTORY_MSG_1022;Local - TM recovery threshold -!HISTORY_MSG_1023;Local - TM threshold mask low -!HISTORY_MSG_1024;Local - TM threshold mask high -!HISTORY_MSG_1025;Local - TM decay -!HISTORY_MSG_1026;Local - cbdl recovery threshold -!HISTORY_MSG_1027;Local - cbdl threshold mask low -!HISTORY_MSG_1028;Local - cbdl threshold mask high -!HISTORY_MSG_1029;Local - cbdl decay -!HISTORY_MSG_1030;Local - reti recovery threshold -!HISTORY_MSG_1031;Local - reti threshold mask low -!HISTORY_MSG_1032;Local - reti threshold mask high -!HISTORY_MSG_1033;Local - reti decay -!HISTORY_MSG_1034;Local - Nlmeans - strength -!HISTORY_MSG_1035;Local - Nlmeans - detail -!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_1041;Local - Spot - Munsell -!HISTORY_MSG_1042;Local - Log encoding - threshold -!HISTORY_MSG_1043;Local - Exp - normalize -!HISTORY_MSG_1044;Local - Local contrast strength -!HISTORY_MSG_1045;Local - Color and Light strength -!HISTORY_MSG_1046;Local - Denoise strength -!HISTORY_MSG_1047;Local - SH and Tone Equalizer strength -!HISTORY_MSG_1048;Local - DR and Exposure strength -!HISTORY_MSG_1049;Local - TM strength -!HISTORY_MSG_1050;Local - Log encoding chroma -!HISTORY_MSG_1051;Local - Residual wavelet gamma -!HISTORY_MSG_1052;Local - Residual wavelet slope -!HISTORY_MSG_1053;Local - Denoise gamma -!HISTORY_MSG_1054;Local - Wavelet gamma -!HISTORY_MSG_1055;Local - Color and Light gamma -!HISTORY_MSG_1056;Local - DR and Exposure gamma -!HISTORY_MSG_1057;Local - CIECAM Enabled -!HISTORY_MSG_1058;Local - CIECAM Overall strength -!HISTORY_MSG_1059;Local - CIECAM Autogray -!HISTORY_MSG_1060;Local - CIECAM Mean luminance source -!HISTORY_MSG_1061;Local - CIECAM Source absolute -!HISTORY_MSG_1062;Local - CIECAM Surround Source -!HISTORY_MSG_1063;Local - CIECAM Saturation -!HISTORY_MSG_1064;Local - CIECAM Chroma -!HISTORY_MSG_1065;Local - CIECAM lightness J -!HISTORY_MSG_1066;Local - CIECAM brightness -!HISTORY_MSG_1067;Local - CIECAM Contrast J -!HISTORY_MSG_1068;Local - CIECAM threshold -!HISTORY_MSG_1069;Local - CIECAM contrast Q -!HISTORY_MSG_1070;Local - CIECAM colorfullness -!HISTORY_MSG_1071;Local - CIECAM Absolute luminance -!HISTORY_MSG_1072;Local - CIECAM Mean luminance -!HISTORY_MSG_1073;Local - CIECAM Cat16 -!HISTORY_MSG_1074;Local - CIECAM Local contrast -!HISTORY_MSG_1075;Local - CIECAM Surround viewing -!HISTORY_MSG_1076;Local - CIECAM Scope -!HISTORY_MSG_1077;Local - CIECAM Mode -!HISTORY_MSG_1078;Local - Red and skin protection -!HISTORY_MSG_1079;Local - CIECAM Sigmoid strength J -!HISTORY_MSG_1080;Local - CIECAM Sigmoid threshold -!HISTORY_MSG_1081;Local - CIECAM Sigmoid blend -!HISTORY_MSG_1082;Local - CIECAM Sigmoid Q BlackEv WhiteEv -!HISTORY_MSG_1083;Local - CIECAM Hue -!HISTORY_MSG_1084;Local - Uses Black Ev - White Ev -!HISTORY_MSG_1085;Local - Jz lightness -!HISTORY_MSG_1086;Local - Jz contrast -!HISTORY_MSG_1087;Local - Jz chroma -!HISTORY_MSG_1088;Local - Jz hue -!HISTORY_MSG_1089;Local - Jz Sigmoid strength -!HISTORY_MSG_1090;Local - Jz Sigmoid threshold -!HISTORY_MSG_1091;Local - Jz Sigmoid blend -!HISTORY_MSG_1092;Local - Jz adaptation -!HISTORY_MSG_1093;Local - CAM model -!HISTORY_MSG_1094;Local - Jz highligths -!HISTORY_MSG_1095;Local - Jz highligths thr -!HISTORY_MSG_1096;Local - Jz shadows -!HISTORY_MSG_1097;Local - Jz shadows thr -!HISTORY_MSG_1098;Local - Jz radius SH -!HISTORY_MSG_1099;Local - Cz(Hz) Curve -!HISTORY_MSG_1100;Local - Jz reference 100 -!HISTORY_MSG_1101;Local - Jz PQ remap -!HISTORY_MSG_1102;Local - Jz(Hz) Curve -!HISTORY_MSG_1103;Local - Vibrance gamma -!HISTORY_MSG_1104;Local - Sharp gamma -!HISTORY_MSG_1105;Local - CIECAM Tone method -!HISTORY_MSG_1106;Local - CIECAM Tone curve -!HISTORY_MSG_1107;Local - CIECAM Color method -!HISTORY_MSG_1108;Local - CIECAM Color curve -!HISTORY_MSG_1109;Local - Jz(Jz) curve -!HISTORY_MSG_1110;Local - Cz(Cz) curve -!HISTORY_MSG_1111;Local - Cz(Jz) curve -!HISTORY_MSG_1112;Local - forcejz -!HISTORY_MSG_1113;Local - HDR PQ -!HISTORY_MSG_1114;Local - Cie mask enable -!HISTORY_MSG_1115;Local - Cie mask curve C -!HISTORY_MSG_1116;Local - Cie mask curve L -!HISTORY_MSG_1117;Local - Cie mask curve H -!HISTORY_MSG_1118;Local - Cie mask blend -!HISTORY_MSG_1119;Local - Cie mask radius -!HISTORY_MSG_1120;Local - Cie mask chroma -!HISTORY_MSG_1121;Local - Cie mask contrast curve -!HISTORY_MSG_1122;Local - Cie mask recovery threshold -!HISTORY_MSG_1123;Local - Cie mask recovery dark -!HISTORY_MSG_1124;Local - Cie mask recovery light -!HISTORY_MSG_1125;Local - Cie mask recovery decay -!HISTORY_MSG_1126;Local - Cie mask laplacian -!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_1132;Local - Cie Wav sigma Jz -!HISTORY_MSG_1133;Local - Cie Wav level Jz -!HISTORY_MSG_1134;Local - Cie Wav local contrast Jz -!HISTORY_MSG_1135;Local - Cie Wav clarity Jz -!HISTORY_MSG_1136;Local - Cie Wav clarity Cz -!HISTORY_MSG_1137;Local - Cie Wav clarity Soft -!HISTORY_MSG_1138;Local - Local - Hz(Hz) Curve -!HISTORY_MSG_1139;Local - Jz soft Curves H -!HISTORY_MSG_1140;Local - Jz Threshold chroma -!HISTORY_MSG_1141;Local - chroma curve Jz(Hz) -!HISTORY_MSG_1142;Local - strength soft -!HISTORY_MSG_1143;Local - Jz blackev -!HISTORY_MSG_1144;Local - Jz whiteev -!HISTORY_MSG_1145;Local - Jz Log encoding -!HISTORY_MSG_1146;Local - Jz Log encoding target gray -!HISTORY_MSG_1147;Local - Jz BlackEv WhiteEv -!HISTORY_MSG_1148;Local - Jz Sigmoid -!HISTORY_MSG_1149;Local - Q Sigmoid -!HISTORY_MSG_1150;Local - Log encoding Q instead Sigmoid Q -!HISTORY_MSG_BLSHAPE;Blur by level -!HISTORY_MSG_BLURCWAV;Blur chroma -!HISTORY_MSG_BLURWAV;Blur luminance -!HISTORY_MSG_BLUWAV;Attenuation response -!HISTORY_MSG_CATCAT;CAL - Settings - Mode -!HISTORY_MSG_CATCOMPLEX;CAL - Settings - Complexity -!HISTORY_MSG_CATMODEL;CAL - Settings - CAM -!HISTORY_MSG_COMPLEX;Wavelet complexity -!HISTORY_MSG_COMPLEXRETI;Retinex complexity -!HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation -!HISTORY_MSG_EDGEFFECT;Edge Attenuation response -!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_HLBL;Color propagation - blur -!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_GREX;Primaries Green X -!HISTORY_MSG_ICM_GREY;Primaries Green Y -!HISTORY_MSG_ICM_PRESER;Preserve neutral -!HISTORY_MSG_ICM_REDX;Primaries Red X -!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_ILLUM;CAL - SC - Illuminant -!HISTORY_MSG_PERSP_CAM_ANGLE;Perspective - Camera -!HISTORY_MSG_PERSP_CAM_FL;Perspective - Camera -!HISTORY_MSG_PERSP_CAM_SHIFT;Perspective - Camera -!HISTORY_MSG_PERSP_CTRL_LINE;Perspective - Control lines -!HISTORY_MSG_PERSP_METHOD;Perspective - Method -!HISTORY_MSG_PERSP_PROJ_ANGLE;Perspective - Recovery -!HISTORY_MSG_PERSP_PROJ_ROTATE;Perspective - PCA rotation -!HISTORY_MSG_PERSP_PROJ_SHIFT;Perspective - PCA -!HISTORY_MSG_PIXELSHIFT_AVERAGE;PS - Average -!HISTORY_MSG_PREPROCWB_MODE;Preprocess WB Mode -!HISTORY_MSG_PROTAB;Protection -!HISTORY_MSG_RANGEAB;Range ab -!HISTORY_MSG_RESIZE_LONGEDGE;Resize - Long Edge -!HISTORY_MSG_RESIZE_SHORTEDGE;Resize - Short Edge -!HISTORY_MSG_SIGMACOL;Chroma Attenuation response -!HISTORY_MSG_SIGMADIR;Dir Attenuation response -!HISTORY_MSG_SIGMAFIN;Final contrast Attenuation response -!HISTORY_MSG_SIGMATON;Toning Attenuation response -!HISTORY_MSG_SPOT;Spot removal -!HISTORY_MSG_SPOT_ENTRY;Spot removal - Point modif. -!HISTORY_MSG_TEMPOUT;CAM02 automatic temperature -!HISTORY_MSG_THRESWAV;Balance threshold -!HISTORY_MSG_WAVBALCHROM;Equalizer chrominance -!HISTORY_MSG_WAVBALLUM;Equalizer luminance -!HISTORY_MSG_WAVBL;Blur levels -!HISTORY_MSG_WAVCHR;Blur levels - blur chroma -!HISTORY_MSG_WAVCHROMCO;Chroma coarse -!HISTORY_MSG_WAVCHROMFI;Chroma fine -!HISTORY_MSG_WAVCLARI;Clarity -!HISTORY_MSG_WAVDENLH;Level 5 -!HISTORY_MSG_WAVDENOISE;Local contrast -!HISTORY_MSG_WAVDENOISEH;High levels Local contrast -!HISTORY_MSG_WAVDETEND;Details soft -!HISTORY_MSG_WAVEDGS;Edge stopping -!HISTORY_MSG_WAVGUIDH;Local contrast-Hue equalizer -!HISTORY_MSG_WAVHUE;Equalizer hue -!HISTORY_MSG_WAVLABGRID_VALUE;Toning - exclude colors -!HISTORY_MSG_WAVLEVDEN;High level local contrast -!HISTORY_MSG_WAVLEVELSIGM;Denoise - radius -!HISTORY_MSG_WAVLEVSIGM;Radius -!HISTORY_MSG_WAVLIMDEN;Interaction 56 14 -!HISTORY_MSG_WAVLOWTHR;Threshold low contrast -!HISTORY_MSG_WAVMERGEC;Merge C -!HISTORY_MSG_WAVMERGEL;Merge L -!HISTORY_MSG_WAVMIXMET;Reference local contrast -!HISTORY_MSG_WAVOFFSET;Offset -!HISTORY_MSG_WAVOLDSH;Old algorithm -!HISTORY_MSG_WAVQUAMET;Denoise mode -!HISTORY_MSG_WAVRADIUS;Radius shadows-highlights -!HISTORY_MSG_WAVSCALE;Scale -!HISTORY_MSG_WAVSHOWMASK;Show wavelet mask -!HISTORY_MSG_WAVSIGM;Sigma -!HISTORY_MSG_WAVSIGMA;Attenuation response -!HISTORY_MSG_WAVSLIMET;Method -!HISTORY_MSG_WAVSOFTRAD;Soft radius clarity -!HISTORY_MSG_WAVSOFTRADEND;Soft radius final -!HISTORY_MSG_WAVSTREND;Strength soft -!HISTORY_MSG_WAVTHRDEN;Threshold local contrast -!HISTORY_MSG_WAVTHREND;Threshold local contrast -!HISTORY_MSG_WAVUSHAMET;Clarity method -!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_LOCALLAB;Local Adjustments -!PARTIALPASTE_LOCALLABGROUP;Local Adjustments Settings -!PARTIALPASTE_PREPROCWB;Preprocess White Balance -!PARTIALPASTE_SPOT;Spot removal -!PREFERENCES_CIE;Ciecam -!PREFERENCES_CIEARTIF;Avoid artifacts -!PREFERENCES_COMPLEXITYLOC;Default complexity for Local Adjustments -!PREFERENCES_COMPLEXITY_EXP;Advanced -!PREFERENCES_COMPLEXITY_NORM;Standard -!PREFERENCES_COMPLEXITY_SIMP;Basic -!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_INSPECTORWINDOW;Open inspector in own window or fullscreen -!PREFERENCES_SHOWTOOLTIP;Show Local Adjustments advice tooltips -!PREFERENCES_ZOOMONSCROLL;Zoom images by scrolling -!TC_PRIM_BLUX;Bx -!TC_PRIM_BLUY;By -!TC_PRIM_GREX;Gx -!TC_PRIM_GREY;Gy -!TC_PRIM_REDX;Rx -!TC_PRIM_REDY;Ry +HISTORY_MSG_665;LA - cbdl masker meng +HISTORY_MSG_666;LA - cbdl masker straal +HISTORY_MSG_667;LA - cbdl masker chroma +HISTORY_MSG_668;LA - cbdl masker gamma +HISTORY_MSG_669;LA - cbdl masker helling +HISTORY_MSG_670;LA - cbdl masker C +HISTORY_MSG_671;LA - cbdl masker L +HISTORY_MSG_672;LA - cbdl masker CL +HISTORY_MSG_673;LA - Gebruik cbdl masker +HISTORY_MSG_674;LA - Gereedschap verwijderd +HISTORY_MSG_675;LA - TM zacht straal +HISTORY_MSG_676;LA - TG - Transitiedifferentie +HISTORY_MSG_677;LA - TM hoeveelheid +HISTORY_MSG_678;LA - TM verzadiging +HISTORY_MSG_679;LA - Retinex masker C +HISTORY_MSG_680;LA - Retinex masker L +HISTORY_MSG_681;LA - Retinex masker CL +HISTORY_MSG_682;LA - Retinex masker +HISTORY_MSG_683;LA - Retinex masker meng +HISTORY_MSG_684;LA - Retinex masker straal +HISTORY_MSG_685;LA - Retinex masker chroma +HISTORY_MSG_686;LA - Retinex masker gamma +HISTORY_MSG_687;LA - Retinex masker helling +HISTORY_MSG_688;LA - Gereedschap verwijderd +HISTORY_MSG_689;LA - Retinex masker transmissiemap +HISTORY_MSG_690;LA - Retinex schaal +HISTORY_MSG_691;LA - Retinex donkerte +HISTORY_MSG_692;LA - Retinex lichtheid +HISTORY_MSG_693;LA - Retinex drempel +HISTORY_MSG_694;LA - Retinex Laplacian drempel +HISTORY_MSG_695;LA - Verzachting methode +HISTORY_MSG_696;LA - Retinex Normaliseer +HISTORY_MSG_697;LA - TM Normaliseer +HISTORY_MSG_698;LA - LA contrast Fast Fourier +HISTORY_MSG_699;LA - Retinex Fast Fourier +HISTORY_MSG_701;LA - Bel. Schaduwen +HISTORY_MSG_702;LA - Bel. Methode +HISTORY_MSG_703;LA - Bel. Laplacian drempel +HISTORY_MSG_704;LA - Bel. PDE-balans +HISTORY_MSG_705;LA - Bel. lineariteit +HISTORY_MSG_706;LA - TM masker C +HISTORY_MSG_707;LA - TM masker L +HISTORY_MSG_708;LA - TM masker CL +HISTORY_MSG_709;LA - gebruik TM-masker +HISTORY_MSG_710;LA - TM-masker meng +HISTORY_MSG_711;LA - TM-masker straal +HISTORY_MSG_712;LA - TM-masker chroma +HISTORY_MSG_713;LA - TM-masker gamma +HISTORY_MSG_714;LA - TM-masker helling +HISTORY_MSG_716;LA - LA methode +HISTORY_MSG_717;LA - LA contrast +HISTORY_MSG_718;LA - LA contrastniveaus +HISTORY_MSG_719;LA - LA contrast residueel L +HISTORY_MSG_720;LA - Vervagingsmasker C +HISTORY_MSG_721;LA - Vervagingsmasker L +HISTORY_MSG_722;LA - Vervagingsmasker CL +HISTORY_MSG_723;LA - Gebruik vervagingsmasker +HISTORY_MSG_725;LA - Vervagingsmasker meng +HISTORY_MSG_726;LA - Vervagingsmasker straal +HISTORY_MSG_727;LA - Vervagingsmasker chroma +HISTORY_MSG_728;LA - Vervagingsmasker gamma +HISTORY_MSG_729;LA - Vervagingsmasker helling +HISTORY_MSG_730;LA - Vervaging methode +HISTORY_MSG_731;LA - mediaanmethod +HISTORY_MSG_732;LA - mediaan herhalingen +HISTORY_MSG_733;LA - straal zacht +HISTORY_MSG_734;LA - detail +HISTORY_MSG_738;LA - Lokaal contrast meng L +HISTORY_MSG_739;LA - Lokaal contrast zacht straal +HISTORY_MSG_740;LA - Lokaal contrast Meng C +HISTORY_MSG_741;LA - Lokaal contrast Residueel C +HISTORY_MSG_742;LA - Exp Laplacian gamma +HISTORY_MSG_743;LA - Bel. Fattal Hoeveelheid +HISTORY_MSG_744;LA - Bel. Fattal Detail +HISTORY_MSG_745;LA - Bel. Fattal verschuiving +HISTORY_MSG_746;LA - Bel. Fattal Sigma +HISTORY_MSG_747;LA - Spot aangemaakt +HISTORY_MSG_748;LA - Bel. Ruisvermindering +HISTORY_MSG_749;LA - Reti Diepte +HISTORY_MSG_750;LA - Reti Modus log - lin +HISTORY_MSG_751;LA - Reti Ontnevel verzadiging +HISTORY_MSG_752;LA - Reti Verschuiving +HISTORY_MSG_753;LA - Reti Transmissiemap +HISTORY_MSG_754;LA - Reti Kap +HISTORY_MSG_755;LA - TM gebruik tm-masker +HISTORY_MSG_756;LA - Bel. gebruik algo belichtingsmasker +HISTORY_MSG_757;LA - Bel. Laplacian-masker +HISTORY_MSG_758;LA - Reti Laplacian-masker +HISTORY_MSG_759;LA - Bel. Laplacian-masker +HISTORY_MSG_760;LA - Kleur Laplacian masker +HISTORY_MSG_761;LA - SH Laplacian-masker +HISTORY_MSG_762;LA - cbdl Laplacian-masker +HISTORY_MSG_763;LA - Blur Laplacian-masker +HISTORY_MSG_764;LA - Solve PDE Laplacian-masker +HISTORY_MSG_765;LA - Ruisvermindering detaildrempel +HISTORY_MSG_766;LA - Vervaag Fast Fourier +HISTORY_MSG_767;LA - Korrel ISO +HISTORY_MSG_768;LA - Korrel Sterkte +HISTORY_MSG_769;LA - Korrel Schaal +HISTORY_MSG_770;LA - Kleurmasker contrastcurve +HISTORY_MSG_771;LA - Bel.masker contrastcurve +HISTORY_MSG_772;LA - SH-masker contrastcurve +HISTORY_MSG_773;LA - TM-Masker contrastcurve +HISTORY_MSG_774;LA - Reti masker contrastcurve +HISTORY_MSG_775;LA - CBDL masker contrastcurve +HISTORY_MSG_776;LA - Vervaag-Ruisverminderingmasker contrastcurve +HISTORY_MSG_777;LA - Vervaagmasker lokale contrastcurve +HISTORY_MSG_778;LA - Maskeer hoge lichten +HISTORY_MSG_779;LA - Kleurmasker lokale contrastcurve +HISTORY_MSG_780;LA - Kleurmasker schaduwen +HISTORY_MSG_781;LA - Contrastmasker Wavelet-niveau +HISTORY_MSG_782;LA - Vervaag-Ruisverminderingmasker Wavelet-niveaus +HISTORY_MSG_783;LA - Kleur Wavelet-niveaus +HISTORY_MSG_784;LA - masker - ΔE beeldmasker +HISTORY_MSG_785;LA - masker - bereik +HISTORY_MSG_786;LA - SH-methode +HISTORY_MSG_787;LA - Equalizer vermenigvuldiger +HISTORY_MSG_788;LA - Equalizer detail +HISTORY_MSG_789;LA - SH-masker hoeveelheid +HISTORY_MSG_790;LA - SH-masker anker +HISTORY_MSG_791;LA - masker Short L-curven +HISTORY_MSG_792;LA - masker - Achtergrond +HISTORY_MSG_793;LA - SH TRC gamma +HISTORY_MSG_794;LA - SH TRC helling +HISTORY_MSG_795;LA - masker bewaar herstel beeld +HISTORY_MSG_796;LA - SC - Recursieve referenties +HISTORY_MSG_797;LA - Meng Originele methode +HISTORY_MSG_798;LA - Opaciteit +HISTORY_MSG_799;LA - Kleur RGB Tooncurve +HISTORY_MSG_800;LA - Kleur Tooncurve Methode +HISTORY_MSG_801;LA - Kleur Tooncurve Speciaal +HISTORY_MSG_802;LA - Contrastdrempel +HISTORY_MSG_803;LA - Kleur Meng +HISTORY_MSG_804;LA - Kleur masker structuur +HISTORY_MSG_805;LA - Vervaging Ruisonderdrukking maskerstructuur +HISTORY_MSG_806;LA - Kleur masker structuur als gereedschap +HISTORY_MSG_807;LA - Vervaging Ruisonderdrukkingsmasker structuur als gereedschap +HISTORY_MSG_808;LA - Kleur masker curve H(H) +HISTORY_MSG_809;LA - Lev. maskercurve C(C) +HISTORY_MSG_810;LA - Lev. maskercurve L(L) +HISTORY_MSG_811;LA - Lev. maskercurve LC(H) +HISTORY_MSG_813;LA - Gebruik Levendigheid masker +HISTORY_MSG_814;LA - Lev. masker Meng +HISTORY_MSG_815;LA - Lev. masker straal +HISTORY_MSG_816;LA - Lev. masker chroma +HISTORY_MSG_817;LA - Lev. masker gamma +HISTORY_MSG_818;LA - Lev. masker helling +HISTORY_MSG_819;LA - Lev. masker laplacian +HISTORY_MSG_820;LA - Lev. masker contrastcurve +HISTORY_MSG_821;LA - kleurenraster achtergrond +HISTORY_MSG_822;LA - kleur achtergrond meng +HISTORY_MSG_823;LA - kleur achtergrond luminantie +HISTORY_MSG_824;LA - Bel. verloopmasker kracht +HISTORY_MSG_825;LA - Bel. verloopmasker hoek +HISTORY_MSG_826;LA - Bel. verloop kracht +HISTORY_MSG_827;LA - Bel. verloop hoek +HISTORY_MSG_828;LA - SH verloop kracht +HISTORY_MSG_829;LA - SH verloop hoek +HISTORY_MSG_830;LA - Keurverloop kracht L +HISTORY_MSG_831;LA - Keurverloop hoek +HISTORY_MSG_832;LA - Keurverloop kracht C +HISTORY_MSG_833;LA - TG - Veer verloop +HISTORY_MSG_834;LA - Keurverloop kracht H +HISTORY_MSG_835;LA - Lev. verloop kracht L +HISTORY_MSG_836;LA - Lev. verloop hoek +HISTORY_MSG_837;LA - Lev. verloop kracht C +HISTORY_MSG_838;LA - Lev. verloop kracht H +HISTORY_MSG_839;LA - Softwarecomplexiteit +HISTORY_MSG_840;LA - CL-curve +HISTORY_MSG_841;LA - LC-curve +HISTORY_MSG_842;LA - Vervagingsmasker Straal +HISTORY_MSG_843;LA - Vervagingsmasker Contrastdrempel +HISTORY_MSG_844;LA - Vervagingsmasker FFTW +HISTORY_MSG_845;LA - Log-codering +HISTORY_MSG_846;LA - Log-codering auto +HISTORY_MSG_847;LA - Log-codering Bron +HISTORY_MSG_849;LA - Log-codering Bron auto +HISTORY_MSG_850;LA - Log-codering B_Ev +HISTORY_MSG_851;LA - Log-codering W_Ev +HISTORY_MSG_852;LA - Log-codering Doel +HISTORY_MSG_853;LA - Log encodind lokaal contrast +HISTORY_MSG_854;LA - Log encodind bereik +HISTORY_MSG_855;LA - Log-codering gehele beeld +HISTORY_MSG_856;LA - Log-codering Schaduwen bereik +HISTORY_MSG_857;LA - Wavelet vervaging residueel +HISTORY_MSG_858;LA - Wavelet vervaging alleen luminantie +HISTORY_MSG_859;LA - Wavelet max. vervaging +HISTORY_MSG_860;LA - Wavelet vervaging niveaus +HISTORY_MSG_861;LA - Wavelet contrastniveaus +HISTORY_MSG_862;LA - Wavelet contrastversterking +HISTORY_MSG_863;LA - Wavelet meng met originele afbeelding +HISTORY_MSG_864;LA - Wavelet dir contrastversterking +HISTORY_MSG_865;LA - Wavelet dir contrast delta +HISTORY_MSG_866;LA - Wavelet dir compressie +HISTORY_MSG_868;LA - SD - C-H balans +HISTORY_MSG_869;LA - Ruisonderdrukking per niveau +HISTORY_MSG_870;LA - Wavelet masker curve H +HISTORY_MSG_871;LA - Wavelet masker curve C +HISTORY_MSG_872;LA - Wavelet masker curve L +HISTORY_MSG_873;LA - Wavelet masker +HISTORY_MSG_875;LA - Wavelet masker voeg samen +HISTORY_MSG_876;LA - Wavelet masker zacht +HISTORY_MSG_877;LA - Wavelet masker chroma +HISTORY_MSG_878;LA - Wavelet masker contrastcurve +HISTORY_MSG_879;LA - Wavelet contrast chroma +HISTORY_MSG_880;LA - Wavelet vervaging chroma +HISTORY_MSG_881;LA - Wavelet contrast verschuiving +HISTORY_MSG_882;LA - Wavelet vervaging +HISTORY_MSG_883;LA - Wavelet contrast per niveau +HISTORY_MSG_884;LA - Wavelet dir contrast +HISTORY_MSG_885;LA - Wavelet toonmapping +HISTORY_MSG_886;LA - Wavelet toonmapping comprimeer +HISTORY_MSG_887;LA - Wavelet toonmapping comprimeer residueel +HISTORY_MSG_888;LA - Contrast Wavelet Balans Drempel +HISTORY_MSG_889;LA - Contrast Wavelet Verloop Sterkte +HISTORY_MSG_890;LA - Contrast Wavelet Verloop hoek +HISTORY_MSG_891;LA - Contrast Wavelet Verloop +HISTORY_MSG_892;LA - Log Encoding Verloop kracht +HISTORY_MSG_893;LA - Log Encoding Verloop hoek +HISTORY_MSG_894;LA - SD - ΔE voorbeeld kleurintensiteit +HISTORY_MSG_897;LA - Contrast Wavelet ES kracht +HISTORY_MSG_898;LA - Contrast Wavelet ES straal +HISTORY_MSG_899;LA - Contrast Wavelet ES detail +HISTORY_MSG_900;LA - Contrast Wavelet ES verloop +HISTORY_MSG_901;LA - Contrast Wavelet ES drempel laag +HISTORY_MSG_902;LA - Contrast Wavelet ES drempel hoog +HISTORY_MSG_903;LA - Contrast Wavelet ES LA contrast +HISTORY_MSG_904;LA - Contrast Wavelet ES eerste niveau +HISTORY_MSG_905;LA - Contrast Wavelet Randscherpte +HISTORY_MSG_906;LA - Contrast Wavelet ES gevoeligheid +HISTORY_MSG_907;LA - Contrast Wavelet ES versterking +HISTORY_MSG_908;LA - Contrast Wavelet ES nabuur +HISTORY_MSG_909;LA - Contrast Wavelet ES toon +HISTORY_MSG_910;LA - SC - Wavelet Randprestaties +HISTORY_MSG_911;LA - Vervaging Chroma Luma +HISTORY_MSG_912;LA - Vervaging Gids filterkracht +HISTORY_MSG_913;LA - Contrast Wavelet Sigma DR +HISTORY_MSG_914;LA - Vervaging Wavelet Sigma BL +HISTORY_MSG_915;LA - Rand Wavelet Sigma ED +HISTORY_MSG_916;LA - Residueel wavelet schaduwen +HISTORY_MSG_917;LA - Residueel wavelet schaduwen drempel +HISTORY_MSG_918;LA - Residueel wavelet hoge lichten +HISTORY_MSG_919;LA - Residueel wavelet hoge lichten drempel +HISTORY_MSG_920;LA - Wavelet sigma LC +HISTORY_MSG_921;LA - Wavelet Gradueel sigma LC2 +HISTORY_MSG_922;LA - SC - Veranderingen in Z-W +HISTORY_MSG_923;LA - Gereedschapscomplexiteit modus +HISTORY_MSG_924;--unused-- +HISTORY_MSG_925;LA - bereik (kleurgereedschappen) +HISTORY_MSG_926;LA - Toon maskertype +HISTORY_MSG_927;LA - Schaduw +HISTORY_MSG_928;LA - Algemeen kleurenmasker +HISTORY_MSG_929;LA - Masker Algemeen Bereik +HISTORY_MSG_930;LA - Masker Algemeen Meng luma +HISTORY_MSG_931;LA - Masker Algemeen activeer +HISTORY_MSG_932;LA - Masker Algemeen straal zacht +HISTORY_MSG_933;LA - Masker Algemeen laplacian +HISTORY_MSG_934;LA - Masker Algemeen chroma +HISTORY_MSG_935;LA - Masker Algemeen gamma +HISTORY_MSG_936;LA - Masker Algemeen helling +HISTORY_MSG_937;LA - Masker Algemeen curve C(C) +HISTORY_MSG_938;LA - Masker Algemeen curve L(L) +HISTORY_MSG_939;LA - Masker Algemeen curve LC(H) +HISTORY_MSG_940;LA - Masker Algemeen structuur als gereedschap +HISTORY_MSG_941;LA - Masker Algemeen structuurkracht +HISTORY_MSG_942;LA - Masker Algemeen H(H) curve +HISTORY_MSG_943;LA - Masker Algemeen FFT +HISTORY_MSG_944;LA - Masker Algemeen Vervaging straal +HISTORY_MSG_945;LA - Masker Algemeen contrastdrempel +HISTORY_MSG_946;LA - Masker Algemeen schaduwen +HISTORY_MSG_947;LA - Masker Algemeen Contrastcurve +HISTORY_MSG_948;LA - Masker Algemeen Wavelet-curve +HISTORY_MSG_949;LA - Masker Algemeen Drempel niveaus +HISTORY_MSG_950;LA - Masker Algemeen GF kracht +HISTORY_MSG_951;LA - Masker Algemeen GF hoek +HISTORY_MSG_952;LA - Masker Algemeen zacht straal +HISTORY_MSG_953;LA - Masker Algemeen meng chroma +HISTORY_MSG_954;LA - Toon/verberg gereedschappen +HISTORY_MSG_955;LA - Activeer Spot +HISTORY_MSG_956;LA - CH-curve +HISTORY_MSG_957;LA - Ruisonderdrukking modus +HISTORY_MSG_958;LA - Toon/verberg instellingen +HISTORY_MSG_959;LA - Inverteer vervaging +HISTORY_MSG_960;LA - Log-codering - cat16 +HISTORY_MSG_961;LA - Log-codering Ciecam +HISTORY_MSG_962;LA - Log-codering Absolute luminantie bron +HISTORY_MSG_963;LA - Log-codering Absolute luminantie doel +HISTORY_MSG_964;LA - Log-codering Omgeving +HISTORY_MSG_965;LA - Log-codering Verzadiging s +HISTORY_MSG_966;LA - Log-codering Contrast J +HISTORY_MSG_967;LA - Log-codering masker curve C +HISTORY_MSG_968;LA - Log-codering masker curve L +HISTORY_MSG_969;LA - Log-codering masker curve H +HISTORY_MSG_970;LA - Log-codering masker geactiveerd +HISTORY_MSG_971;LA - Log-codering masker meng +HISTORY_MSG_972;LA - Log-codering masker straal +HISTORY_MSG_973;LA - Log-codering masker chroma +HISTORY_MSG_974;LA - Log-codering masker contrast +HISTORY_MSG_975;LA - Log-codering Lichtheid J +HISTORY_MSG_977;LA - Log-codering Contrast Q +HISTORY_MSG_978;LA - Log-codering Sursource +HISTORY_MSG_979;LA - Log-codering Helderheid Q +HISTORY_MSG_980;LA - Log-codering Kleurrijkheid M +HISTORY_MSG_981;LA - Log-codering Kracht +HISTORY_MSG_982;LA - Equalizer tint +HISTORY_MSG_983;LA - Ruisonderdrukking drempel masker hoog +HISTORY_MSG_984;LA - Ruisonderdrukking drempel masker laag +HISTORY_MSG_985;LA - Ruisonderdrukking Laplacian +HISTORY_MSG_986;LA - Ruisonderdrukking versterk +HISTORY_MSG_987;LA - GF herstel drempel +HISTORY_MSG_988;LA - GF drempel masker laag +HISTORY_MSG_989;LA - GF drempel masker hoog +HISTORY_MSG_990;LA - Ruisonderdrukking herstel drempel +HISTORY_MSG_991;LA - Ruisonderdrukking drempel masker laag +HISTORY_MSG_992;LA - Ruisonderdrukking drempel masker hoog +HISTORY_MSG_993;LA - Ruisonderdrukking Omgekeerd algo +HISTORY_MSG_994;LA - GF Omgekeerd algo +HISTORY_MSG_995;LA - Ruisonderdrukking verval +HISTORY_MSG_996;LA - Kleurherstel drempel +HISTORY_MSG_997;LA - Kleurherstel masker laag +HISTORY_MSG_998;LA - Kleur drempel masker hoog +HISTORY_MSG_999;LA - Kleur verval +HISTORY_MSG_1000;LA - Ruisonderdrukking luminantie grijs +HISTORY_MSG_1001;LA - Log herstel drempel +HISTORY_MSG_1002;LA - Log drempel masker laag +HISTORY_MSG_1003;LA - Log drempel masker hoog +HISTORY_MSG_1004;LA - Log verval +HISTORY_MSG_1005;LA - Bel. herstel drempel +HISTORY_MSG_1006;LA - Bel. drempel masker laag +HISTORY_MSG_1007;LA - Bel. drempel masker hoog +HISTORY_MSG_1008;LA - Bel. verval +HISTORY_MSG_1009;LA - SH herstel drempel +HISTORY_MSG_1010;LA - SH drempel masker laag +HISTORY_MSG_1011;LA - SH drempel masker hoog +HISTORY_MSG_1012;LA - SH verval +HISTORY_MSG_1013;LA - lev. herstel drempel +HISTORY_MSG_1014;LA - lev. drempel masker laag +HISTORY_MSG_1015;LA - lev. drempel masker hoog +HISTORY_MSG_1016;LA - lev. verval +HISTORY_MSG_1017;LA - lc herstel drempel +HISTORY_MSG_1018;LA - lc drempel masker laag +HISTORY_MSG_1019;LA - lc drempel masker hoog +HISTORY_MSG_1020;LA - lc verval +HISTORY_MSG_1021;LA - Ruisonderdrukking chrominantie grijs +HISTORY_MSG_1022;LA - TM herstel drempel +HISTORY_MSG_1023;LA - TM drempel masker laag +HISTORY_MSG_1024;LA - TM drempel masker hoog +HISTORY_MSG_1025;LA - TM verval +HISTORY_MSG_1026;LA - cbdl herstel drempel +HISTORY_MSG_1027;LA - cbdl drempel masker laag +HISTORY_MSG_1028;LA - cbdl drempel masker hoog +HISTORY_MSG_1029;LA - cbdl verval +HISTORY_MSG_1030;LA - reti herstel drempel +HISTORY_MSG_1031;LA - reti drempel masker laag +HISTORY_MSG_1032;LA - reti drempel masker hoog +HISTORY_MSG_1033;LA - reti verval +HISTORY_MSG_1034;LA - Nlmeans - kracht +HISTORY_MSG_1035;LA - Nlmeans - detail +HISTORY_MSG_1036;LA - Nlmeans - patch +HISTORY_MSG_1037;LA - Nlmeans - straal +HISTORY_MSG_1038;LA - Nlmeans - gamma +HISTORY_MSG_1039;LA - Korrel - gamma +HISTORY_MSG_1040;LA - SC - Verzachtingsstraal +HISTORY_MSG_1041;LA - Spot - Munsell +HISTORY_MSG_1042;LA - Log-codring - drempel +HISTORY_MSG_1043;LA - Bel. - normaliseer +HISTORY_MSG_1044;LA - LA contrast kracht +HISTORY_MSG_1045;LA - Kleur en Licht kracht +HISTORY_MSG_1046;LA - Ruisonderdrukking kracht +HISTORY_MSG_1047;LA - SH en Toonequalizer kracht +HISTORY_MSG_1048;LA - DR en Belichting kracht +HISTORY_MSG_1049;LA - TM kracht +HISTORY_MSG_1050;LA - Log-codering chroma +HISTORY_MSG_1051;LA - residueel wavelet gamma +HISTORY_MSG_1052;LA - residueel wavelet helling +HISTORY_MSG_1053;LA - ruisonderdrukking gamma +HISTORY_MSG_1054;LA - Wavelet gamma +HISTORY_MSG_1055;LA - Kleur en Licht gamma +HISTORY_MSG_1056;LA - DR en Belichting gamma +HISTORY_MSG_1057;LA - CIECAM Geactiveerd +HISTORY_MSG_1058;LA - CIECAM Overall kracht +HISTORY_MSG_1059;LA - CIECAM Autogrijs +HISTORY_MSG_1060;LA - CIECAM Gemiddelde luminantie bron +HISTORY_MSG_1061;LA - CIECAM bron absoluut +HISTORY_MSG_1062;LA - CIECAM omgeving bron +HISTORY_MSG_1063;LA - CIECAM verzadiging +HISTORY_MSG_1064;LA - CIECAM Chroma +HISTORY_MSG_1065;LA - CIECAM lichtheid J +HISTORY_MSG_1066;LA - CIECAM helderheid +HISTORY_MSG_1067;LA - CIECAM Contrast J +HISTORY_MSG_1068;LA - CIECAM drempel +HISTORY_MSG_1069;LA - CIECAM contrast Q +HISTORY_MSG_1070;LA - CIECAM kleurrijkheid +HISTORY_MSG_1071;LA - CIECAM Absolute luminantie +HISTORY_MSG_1072;LA - CIECAM Gemiddelde luminantie +HISTORY_MSG_1073;LA - CIECAM Cat16 +HISTORY_MSG_1074;LA - CIECAM LA contrast +HISTORY_MSG_1075;LA - CIECAM kijkomgeving +HISTORY_MSG_1076;LA - CIECAM bereik +HISTORY_MSG_1077;LA - CIECAM modus +HISTORY_MSG_1078;LA - Rood/huidbescherming +HISTORY_MSG_1079;LA - CIECAM Sigmoid kracht J +HISTORY_MSG_1080;LA - CIECAM Sigmoid drempel +HISTORY_MSG_1081;LA - CIECAM Sigmoid meng +HISTORY_MSG_1082;LA - CIECAM Sigmoid Q BlackEv WhiteEv +HISTORY_MSG_1083;LA - CIECAM tint +HISTORY_MSG_1084;LA - Gebruikt Black Ev - White Ev +HISTORY_MSG_1085;LA - Jz lichtheid +HISTORY_MSG_1086;LA - Jz contrast +HISTORY_MSG_1087;LA - Jz chroma +HISTORY_MSG_1088;LA - Jz tint +HISTORY_MSG_1089;LA - Jz Sigmoid kracht +HISTORY_MSG_1090;LA - Jz Sigmoid drempel +HISTORY_MSG_1091;LA - Jz Sigmoid meng +HISTORY_MSG_1092;LA - Jz aanpassing +HISTORY_MSG_1093;LA - CAM model +HISTORY_MSG_1094;LA - Jz hoge lichten +HISTORY_MSG_1095;LA - Jz hoge lichten thr +HISTORY_MSG_1096;LA - Jz schaduwen +HISTORY_MSG_1097;LA - Jz schaduwen thr +HISTORY_MSG_1098;LA - Jz straal SH +HISTORY_MSG_1099;LA - Cz(Hz) Curve +HISTORY_MSG_1100;LA - Jz referentie 100 +HISTORY_MSG_1101;LA - Jz PQ remap +HISTORY_MSG_1102;LA - Jz(Hz) Curve +HISTORY_MSG_1103;LA - Levendigheid gamma +HISTORY_MSG_1104;LA - Scherp gamma +HISTORY_MSG_1105;LA - CIECAM Toon methode +HISTORY_MSG_1106;LA - CIECAM Toon curve +HISTORY_MSG_1107;LA - CIECAM Kleur methode +HISTORY_MSG_1108;LA - CIECAM Kleur curve +HISTORY_MSG_1109;LA - Jz(Jz) curve +HISTORY_MSG_1110;LA - Cz(Cz) curve +HISTORY_MSG_1111;LA - Cz(Jz) curve +HISTORY_MSG_1112;LA - forcejz +HISTORY_MSG_1113;LA - HDR PQ +HISTORY_MSG_1114;LA - Cie masker activeer +HISTORY_MSG_1115;LA - Cie masker curve C +HISTORY_MSG_1116;LA - Cie masker curve L +HISTORY_MSG_1117;LA - Cie masker curve H +HISTORY_MSG_1118;LA - Cie masker meng +HISTORY_MSG_1119;LA - Cie masker straal +HISTORY_MSG_1120;LA - Cie masker chroma +HISTORY_MSG_1121;LA - Cie masker contrast curve +HISTORY_MSG_1122;LA - Cie masker herstel drempel +HISTORY_MSG_1123;LA - Cie masker herstel donker +HISTORY_MSG_1124;LA - Cie masker herstel licht +HISTORY_MSG_1125;LA - Cie masker herstel verval +HISTORY_MSG_1126;LA - Cie masker laplacian +HISTORY_MSG_1127;LA - Cie masker gamma +HISTORY_MSG_1128;LA - Cie masker helling +HISTORY_MSG_1129;LA - Cie Relatieve luminantie +HISTORY_MSG_1130;LA - Cie Verzadiging Jz +HISTORY_MSG_1131;LA - masker - Ruisvermindering +HISTORY_MSG_1132;LA - Cie Wav sigma Jz +HISTORY_MSG_1133;LA - Cie Wav level Jz +HISTORY_MSG_1134;LA - Cie Wav LA contrast Jz +HISTORY_MSG_1135;LA - Cie Wav klaarheid Jz +HISTORY_MSG_1136;LA - Cie Wav klaarheid Cz +HISTORY_MSG_1137;LA - Cie Wav klaarheid Zacht +HISTORY_MSG_1138;LA - LA - Hz(Hz) Curve +HISTORY_MSG_1139;LA - Jz zacht Curven H +HISTORY_MSG_1140;LA - Jz Drempel chroma +HISTORY_MSG_1141;LA - chroma curve Jz(Hz) +HISTORY_MSG_1142;LA - kracht zacht +HISTORY_MSG_1143;LA - Jz blackev +HISTORY_MSG_1144;LA - Jz whiteev +HISTORY_MSG_1145;LA - Jz Log-codering +HISTORY_MSG_1146;LA - Jz Log-codering doel grijs +HISTORY_MSG_1147;LA - Jz BlackEv WhiteEv +HISTORY_MSG_1148;LA - Jz Sigmoid +HISTORY_MSG_1149;LA - Q Sigmoid +HISTORY_MSG_1150;LA - Log-codering Q in plaats van Sigmoid Q +HISTORY_MSG_BLSHAPE;Vervaag per niveau +HISTORY_MSG_BLURCWAV;Vervaging chroma +HISTORY_MSG_BLURWAV;Vervaging luminantie +HISTORY_MSG_BLUWAV;Versterkinsrespons +HISTORY_MSG_CATCAT;CAL - Instellingen - Modus +HISTORY_MSG_CATCOMPLEX;CAL - Instellingen - Complexiteit +HISTORY_MSG_CATMODEL;CAL - Instellingen - CAM +HISTORY_MSG_COMPLEX;Wavelet complexiteit +HISTORY_MSG_COMPLEXRETI;Retinex complexiteit +HISTORY_MSG_DEHAZE_SATURATION;Ontnevel - Verzadiging +HISTORY_MSG_EDGEFFECT;Randversterking respons +HISTORY_MSG_FF_FROMMETADATA;Flat-Field - Uit metadata +HISTORY_MSG_FILMNEGATIVE_BALANCE;FN - Referentie-uitvoer +HISTORY_MSG_FILMNEGATIVE_COLORSPACE;Filmnegatief kleurruimte +HISTORY_MSG_FILMNEGATIVE_REF_SPOT;FN - Referentie-invoer +HISTORY_MSG_GAMUTMUNSEL;Gamut-Munsell +HISTORY_MSG_HLBL;Kleurpropagatie - vervaging +HISTORY_MSG_HLTH;Tegenovergestelde Inpainting - versterking drempel +HISTORY_MSG_ICL_LABGRIDCIEXY;Cie xy +HISTORY_MSG_ICM_AINTENT;Abstract profiel - weergave-intentie +HISTORY_MSG_ICM_BLUX;Primair blauw X +HISTORY_MSG_ICM_BLUY;Primair blauw Y +HISTORY_MSG_ICM_FBW;Zwart en wit +HISTORY_MSG_ICM_GAMUT;Beperk kleurbereik +HISTORY_MSG_ICM_GREX;Primair groen X +HISTORY_MSG_ICM_GREY;Primair groen Y +HISTORY_MSG_ICM_PRESER;Behoud neutraal +HISTORY_MSG_ICM_REDX;Primair rood X +HISTORY_MSG_ICM_REDY;Primair rood Y +HISTORY_MSG_ICM_WORKING_ILLUM_METHOD;Methode lichtsterkte +HISTORY_MSG_ICM_WORKING_PRIM_METHOD;Methode primaire kleuren +HISTORY_MSG_ILLUM;CAL - SC - Lichtsterkte +HISTORY_MSG_LOCALLAB_TE_PIVOT;Lokaal - draaipunt Equalizer +HISTORY_MSG_LOCAL_GAMUTMUNSEL;Lokaal - SC - Voorkom kleurverschuiving +HISTORY_MSG_PERSP_CAM_ANGLE;Perspectief - Camera +HISTORY_MSG_PERSP_CAM_FL;Perspectief - Camera +HISTORY_MSG_PERSP_CAM_SHIFT;Perspectief - Camera +HISTORY_MSG_PERSP_CTRL_LINE;Perspectief - Controlelijnen +HISTORY_MSG_PERSP_METHOD;Perspectief - Methode +HISTORY_MSG_PERSP_PROJ_ANGLE;Perspectief - Herstel +HISTORY_MSG_PERSP_PROJ_ROTATE;Perspectief - PCA-rotatie +HISTORY_MSG_PERSP_PROJ_SHIFT;Perspectief - PCA +HISTORY_MSG_PIXELSHIFT_AVERAGE;PS - Gemiddeld +HISTORY_MSG_PREPROCWB_MODE;Voorproces WB Modus +HISTORY_MSG_PROTAB;Protectie +HISTORY_MSG_RANGEAB;Reeks ab +HISTORY_MSG_RESIZE_LONGEDGE;Verander grootte - Lange zijde +HISTORY_MSG_RESIZE_SHORTEDGE;Verander grootte - Korte zijde +HISTORY_MSG_SIGMACOL;Chroma-versterking respons +HISTORY_MSG_SIGMADIR;Dir versterking respons +HISTORY_MSG_SIGMAFIN;Finale contrastversterking respons +HISTORY_MSG_SIGMATON;Toning versterking respons +HISTORY_MSG_SPOT;Verwijder vlekken +HISTORY_MSG_SPOT_ENTRY;Vlekverwijdering - punt gewijzigd +HISTORY_MSG_TEMPOUT;CAM02 automatische temperatuur +HISTORY_MSG_THRESWAV;Balance drempel +HISTORY_MSG_TONE_EQUALIZER_BANDS;Toonequalizer - Banden +HISTORY_MSG_TONE_EQUALIZER_ENABLED;Toonequalizer +HISTORY_MSG_TONE_EQUALIZER_PIVOT;Toonequalizer - Draaipunt +HISTORY_MSG_TONE_EQUALIZER_REGULARIZATION;Toonequalizer - Regularisatie +HISTORY_MSG_TONE_EQUALIZER_SHOW_COLOR_MAP;Toonequalizer - Tonale map +HISTORY_MSG_WAVBALCHROM;Equalizer chrominantie +HISTORY_MSG_WAVBALLUM;Equalizer luminantie +HISTORY_MSG_WAVBL;Vervagingsniveaus +HISTORY_MSG_WAVCHR;Vervagingsniveaus - vervaag chroma +HISTORY_MSG_WAVCHROMCO;Chroma ruw +HISTORY_MSG_WAVCHROMFI;Chroma fijn +HISTORY_MSG_WAVCLARI;Klaarheid +HISTORY_MSG_WAVDENLH;Nineau 5 +HISTORY_MSG_WAVDENOISE;Lokaal contrast +HISTORY_MSG_WAVDENOISEH;Hoge niveaus lokaal contrast +HISTORY_MSG_WAVDETEND;Details zacht +HISTORY_MSG_WAVEDGS;Rand stopping +HISTORY_MSG_WAVGUIDH;Lokaal contrast - Tintequalizer +HISTORY_MSG_WAVHUE;Equalizer tint +HISTORY_MSG_WAVLABGRID_VALUE;Toning - sluit kleuren uit +HISTORY_MSG_WAVLEVDEN;Hoog niveau lokaal contrast +HISTORY_MSG_WAVLEVELSIGM;Ruisvermindering - straal +HISTORY_MSG_WAVLEVSIGM;Straal +HISTORY_MSG_WAVLIMDEN;Interactie 56 14 +HISTORY_MSG_WAVLOWTHR;Drempel laag contrast +HISTORY_MSG_WAVMERGEC;Meng C +HISTORY_MSG_WAVMERGEL;Meng L +HISTORY_MSG_WAVMIXMET;Referentie lokaal contrast +HISTORY_MSG_WAVOFFSET;Verschuiving +HISTORY_MSG_WAVOLDSH;Oud algoritme +HISTORY_MSG_WAVQUAMET;Ruisvermindering modus +HISTORY_MSG_WAVRADIUS;Straal schaduwen-hoge lichten +HISTORY_MSG_WAVSCALE;Schaal +HISTORY_MSG_WAVSHOWMASK;Toon wavelet-masker +HISTORY_MSG_WAVSIGM;Sigma +HISTORY_MSG_WAVSIGMA;Versterkingsrespons +HISTORY_MSG_WAVSLIMET;Methode +HISTORY_MSG_WAVSOFTRAD;Zacht straal klaarheid +HISTORY_MSG_WAVSOFTRADEND;Zacht straal finaal +HISTORY_MSG_WAVSTREND;Kracht zacht +HISTORY_MSG_WAVTHRDEN;Drempel lokaal contrast +HISTORY_MSG_WAVTHREND;Drempel lokaal contrast +HISTORY_MSG_WAVUSHAMET;Klaarheid methode +HISTORY_MSG_WBALANCE_OBSERVER10;Observer 10° +HISTORY_MSG_WBITC_CUSTOM;Itcwb Aangepast +HISTORY_MSG_WBITC_DELTA;Itcwb Delta groen +HISTORY_MSG_WBITC_FGREEN;Itcwb Groen - student +HISTORY_MSG_WBITC_FORCE;Itcwb Kracht +HISTORY_MSG_WBITC_GREEN;Groenverfijning +HISTORY_MSG_WBITC_MINSIZE;Patch min grootte +HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +HISTORY_MSG_WBITC_OBS;Verwijder algo 2x +HISTORY_MSG_WBITC_PONDER;Itcwb gewogen +HISTORY_MSG_WBITC_PRECIS;Itcwb Precisie +HISTORY_MSG_WBITC_PRIM;Primaire kleuren +HISTORY_MSG_WBITC_RGREEN;Itcwb Groenreeks +HISTORY_MSG_WBITC_SAMPLING;Laag sampling +HISTORY_MSG_WBITC_SIZE;Itcwb Grootte +HISTORY_MSG_WBITC_SORTED;Itcwb gewogen +HISTORY_MSG_WBITC_THRES;Itcwb drempel +ICCPROFCREATOR_ILL_63;D63 : DCI-P3 Theater +ICCPROFCREATOR_PRIM_DCIP3;DCI-P3 +INSPECTOR_WINDOW_TITLE;Inspecteur +MAIN_TAB_LOCALLAB;Lokale aanpassingen +MAIN_TAB_LOCALLAB_TOOLTIP;Shortcut: Alt+O +PARTIALPASTE_FLATFIELDFROMMETADATA;Vlakveld uit metadata +PARTIALPASTE_LOCALLAB;Lokale aanpassingen +PARTIALPASTE_LOCALLABGROUP;Instellingen Lokale aanpassingen +PARTIALPASTE_PREPROCWB;Pre-proces witbalans +PARTIALPASTE_SPOT;Spot verwijder +PARTIALPASTE_TONE_EQUALIZER;Toonequalizer +PREFERENCES_CAMERAPROFILESDIR;Map met cameraprofielen +PREFERENCES_CIE;Ciecam +PREFERENCES_CIEARTIF;Vermijd onregelmatigheden +PREFERENCES_COMPLEXITYLOC;Standaard complexiteit voor Lokale Aanpassingen +PREFERENCES_COMPLEXITY_EXP;Geavanceerd +PREFERENCES_COMPLEXITY_NORM;Standaard +PREFERENCES_COMPLEXITY_SIMP;Basis +PREFERENCES_EXTEDITOR_BYPASS_OUTPUT_PROFILE;Passeer uitvoerprofiel +PREFERENCES_EXTEDITOR_DIR;Uitvoermap +PREFERENCES_EXTEDITOR_DIR_CURRENT;Zelfde als invoerbeeld +PREFERENCES_EXTEDITOR_DIR_CUSTOM;Aangepast +PREFERENCES_EXTEDITOR_DIR_TEMP;temp map dir besturingssysteem +PREFERENCES_EXTEDITOR_FLOAT32;32-bit decimale TIFF_uitvoer +PREFERENCES_EXTERNALEDITOR_CHANGE;Verander applicatie +PREFERENCES_EXTERNALEDITOR_CHANGE_FILE;Verander uitvoerbaar bestand +PREFERENCES_EXTERNALEDITOR_COLUMN_COMMAND;Opdracht +PREFERENCES_EXTERNALEDITOR_COLUMN_NAME;Naam +PREFERENCES_EXTERNALEDITOR_COLUMN_NATIVE_COMMAND;Standaard opdracht +PREFERENCES_INSPECTORWINDOW;Open de Inspecteur in eigen venster of volledig scherm +PREFERENCES_LENSFUNDBDIR;Map met Lensfun-database +PREFERENCES_LENSFUNDBDIR_TOOLTIP;Map met de Lensfun-database. Laat leeg om de standaardmappen te gebruiken. +PREFERENCES_LENSPROFILESDIR;Map met lensprofielen +PREFERENCES_LENSPROFILESDIR_TOOLTIP;Map met Adobe Lens Correction Profiles (LCP's) +PREFERENCES_METADATA;Metadata +PREFERENCES_METADATA_SYNC;Synchronisatie metadata met XMP-zijspanbestanden +PREFERENCES_METADATA_SYNC_NONE;Geen +PREFERENCES_METADATA_SYNC_READ;Alleen lezen +PREFERENCES_METADATA_SYNC_READWRITE;Bidirectioneel +PREFERENCES_SHOWTOOLTIP;Toon schermtips voor Lokale aanpassingen +PREFERENCES_TAB_FAVORITES;Favorieten +PREFERENCES_TOOLPANEL_AVAILABLETOOLS;Beschikbare gereedschappen +PREFERENCES_TOOLPANEL_CLONE_FAVORITES;Toon favoriete gereedschappen ook op hun oorspronkelijke locatie +PREFERENCES_TOOLPANEL_CLONE_FAVORITES_TOOLTIP;Indien aangevinkt zullen de favoriete gereedschappen zowel in de Favorieten-tab als op hun oorspronkelijke locatie te vinden zijn.\n\nOpmerking: als deze optie is aangevinkt kunt u een lichte vertraging verwachten tijdens het wisselen van tabs. +PREFERENCES_TOOLPANEL_FAVORITE;Favoriet +PREFERENCES_TOOLPANEL_FAVORITESPANEL;Favorietenpaneel +PREFERENCES_TOOLPANEL_TOOL;Gereedschap +PREFERENCES_WBA;Witbalans +PREFERENCES_WBACORR;Witbalans - Automatische temperatuurcorrelatie +!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;Witbalans - Toon instellingen automatische temperatuurcorrelatie +PREFERENCES_WBAENACUSTOM;Gebruik aangepaste temperatuur & tint +PREFERENCES_WBAFORC;Forceer extra algoritme +PREFERENCES_WBAGREENDELTA;Delta temperatuur in groene herhalingslus (indien Forceer extra geactiveerd) +PREFERENCES_WBANOPURP;Geen paarse kleur gebruikt +PREFERENCES_WBAPATCH;Maximaal aantal kleuren gebruikt in afbeelding +PREFERENCES_WBAPRECIS;Precisie-algoritme - schaal toegepast +PREFERENCES_WBASIZEREF;Grootte referentiekleur vergelijken met grootte histogramkleur +PREFERENCES_WBASORT;Sorteer in chroma-volgorde in plaats van histogram +PREFERENCES_XMP_SIDECAR_MODE;XMP zijspanbestand stijl +PREFERENCES_XMP_SIDECAR_MODE_EXT;Zoals darktable (FILENAME.ext.xmp voor FILENAME.ext) +PREFERENCES_XMP_SIDECAR_MODE_STD;Standaard (FILENAME.xmp voor FILENAME.ext) +PREFERENCES_ZOOMONSCROLL;Zoom afbeeldingen door te scrollen +SAVEDLG_BIGTIFF;BigTIFF (geen metadata-ondersteuning) +SORT_ASCENDING;Oplopend +SORT_BY_DATE;Op datum +SORT_BY_EXIF;Op EXIF +SORT_BY_LABEL;Op kleurlabel +SORT_BY_NAME;Op naam +SORT_BY_RANK;Volgens sterwaardering +SORT_DESCENDING;Aflopend +TC_PRIM_BLUX;Bx +TC_PRIM_BLUY;By +TC_PRIM_GREX;Gx +TC_PRIM_GREY;Gy +TC_PRIM_REDX;Rx +TC_PRIM_REDY;Ry !TOOLBAR_TOOLTIP_PERSPECTIVE;Perspective Correction\n\nEdit control lines to correct perspective distortion. Click this button again to apply correction. !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_CATCLASSIC;Classic +TP_COLORAPP_CATCLASSIC;Klassiek !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_CATMOD;Modus +TP_COLORAPP_CATSYMGEN;Auto-symmetrisch +TP_COLORAPP_CATSYMSPE;Gemengd +TP_COLORAPP_CIECAT_DEGREEOUT;Chromatische aanpassing weergave !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 +TP_COLORAPP_GEN;Instellingen !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_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_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;Vrij +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_MOD02;CAM02 -!TP_COLORAPP_MOD16;CAM16 -!TP_COLORAPP_MODELCAT;CAM +TP_COLORAPP_MOD02;CAM02 +TP_COLORAPP_MOD16;CAM16 +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_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_SURROUNDSRC;Omgevingsverlichting !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. -!TP_CROP_GTCENTEREDSQUARE;Centered square -!TP_DEHAZE_SATURATION;Saturation -!TP_FILMNEGATIVE_BLUEBALANCE;Cool/Warm -!TP_FILMNEGATIVE_COLORSPACE;Inversion color space: -!TP_FILMNEGATIVE_COLORSPACE_INPUT;Input color space -!TP_FILMNEGATIVE_COLORSPACE_TOOLTIP;Select the color space used to perform the negative inversion:\nInput color space : perform inversion before the input profile is applied, as in the previous versions of RT.\nWorking color space : perform inversion after input profile, using the currently selected working profile. -!TP_FILMNEGATIVE_COLORSPACE_WORKING;Working color space -!TP_FILMNEGATIVE_GREENBALANCE;Magenta/Green -!TP_FILMNEGATIVE_OUT_LEVEL;Output level -!TP_FILMNEGATIVE_REF_LABEL;Input RGB: %1 -!TP_FILMNEGATIVE_REF_PICK;Pick white balance spot -!TP_FILMNEGATIVE_REF_TOOLTIP;Pick a gray patch for white-balancing the output, positive image. -!TP_HLREC_HLBLUR;Blur -!TP_ICM_FBW;Black-and-White +TP_CROP_GTCENTEREDSQUARE;Vierkant gecentreerd +TP_DEHAZE_SATURATION;Verzadiging +TP_FILMNEGATIVE_BLUEBALANCE;Koel/Warm +TP_FILMNEGATIVE_COLORSPACE;Omkeerkleurruimte: +TP_FILMNEGATIVE_COLORSPACE_INPUT;Invoerkleurruimte +TP_FILMNEGATIVE_COLORSPACE_TOOLTIP;Kies de kleurruimte voor de negatieve omkering:\nInvoerkleurruimte: voer de omkering uit voordat het invoerprofiel wordt toegepast, zoals in eerdere versies van RT.\nWerkkleurruimte: voer de omkering uit na het invoerprofiel en gebruik het momenteel geselecteerde werkprofiel. +TP_FILMNEGATIVE_COLORSPACE_WORKING;Werkkleurruimte +TP_FILMNEGATIVE_GREENBALANCE;Magenta/Groen +TP_FILMNEGATIVE_OUT_LEVEL;Uitvoerniveau +TP_FILMNEGATIVE_PICK_SIZE;Grootte: +TP_FILMNEGATIVE_REF_LABEL;Invoer RGB: %1 +TP_FILMNEGATIVE_REF_PICK;Kies witbalans +TP_FILMNEGATIVE_REF_SIZE;Grootte: +TP_FILMNEGATIVE_REF_TOOLTIP;Kies een grijspunt om de witbalans van het positieve beeld te bepalen. +TP_FLATFIELD_FROMMETADATA;Uit metadata +TP_HLREC_COLOROPP;Tegenovergestelde Inpainting +TP_HLREC_HLBLUR;Vervaging +TP_HLREC_HLTH;Versterking drempel +TP_ICM_FBW;Zwart-wit +TP_ICM_GAMUT;Begrens kleurruimte !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 -!TP_ICM_OUTPUTPROFILE_TOOLTIP;By default all RTv4 or RTv2 profiles are with TRC - sRGB: g=2.4 s=12.92\n\nWith 'ICC Profile Creator' you can generate v4 or v2 profiles with the following choices;\n-Primaries: Aces AP0, Aces AP1, AdobeRGB, Prophoto, Rec2020, sRGB, Widegamut, BestRGB, BetaRGB, BruceRGB, Custom\n-TRC: BT709, sRGB, linear, standard g=2.2, standard g=1.8, Custom\n-Illuminant: D41, D50, D55, D60, D65, D80, stdA 2856K +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;Zet terug +TP_ICM_OUTPUTPROFILE_TOOLTIP;Alle RTv4- of RTv2-profielen zijn met TRC - sRGB: g=2,4 s=12,92\n\nMet de ICC-profielmaker kunt u v4- of v2-profielen creëren met de volgende keuzen:\n-Primaire kleuren: Aces AP0, Aces AP1, AdobeRGB, Prophoto, Rec2020, sRGB, Widegamut, BestRGB, BetaRGB, BruceRGB en Aangepast\n-TRC: BT709, sRGB, lineair, standaard g=2,2, standaard g=1,8, Aangepast\n-Illuminant: D41, D50, D55, D60, D65, D80, stdA 2856K !TP_ICM_PRIMBLU_TOOLTIP;Primaries Blue:\nsRGB x=0.15 y=0.06\nAdobe x=0.15 y=0.06\nWidegamut x=0.157 y=0.018\nRec2020 x=0.131 y=0.046\nACES P1 x=0.128 y= 0.044\nACES P0 x=0.0001 y=-0.077\nProphoto x=0.0366 y=0.0001\nBruceRGB x=0.15 y=0.06\nBeta RGB x=0.1265 y=0.0352\nBestRGB x=0.131 y=0.046 !TP_ICM_PRIMGRE_TOOLTIP;Primaries Green:\nsRGB x=0.3 y=0.6\nAdobe x=0.21 y=0.71\nWidegamut x=0.115 y=0.826\nRec2020 x=0.17 y=0.797\nACES P1 x=0.165 y= 0.83\nACES P0 x=0.0 y=1.0\nProphoto x=0.1596 y=0.8404\nBruceRGB x=0.28 y=0.65\nBeta RGB x=0.1986 y=0.7551\nBest RGB x=0.2150 0.7750 !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 color mode for an image, you permanently change the color 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 color adjustments as Channel Mixer primaries.\n Allows you to modify the camera calibration with Custom (sliders). !TP_ICM_PRIMRED_TOOLTIP;Primaries Red:\nsRGB x=0.64 y=0.33\nAdobe x=0.64 y=0.33\nWidegamut x=0.735 y=0.265\nRec2020 x=0.708 y=0.292\nACES P1 x=0.713 y= 0.293\nACES P0 x=0.7347 y=0.2653\nProphoto x=0.7347 y=0.2653\nBruceRGB x=0.64 y=0.33\nBeta RGB x=0.688 y=0.3112\nBestRGB x=0.7347 y=0.2653 -!TP_ICM_REDFRAME;Custom Primaries -!TP_ICM_TRCFRAME;Abstract Profile +TP_ICM_REDFRAME;Aangepaste primaire kleuren +TP_ICM_TRCFRAME;Abstract Profiel !TP_ICM_TRCFRAME_TOOLTIP;Also known as 'synthetic' or 'virtual' profiles, which are applied at the end of the processing pipeline (prior to ciecam) allowing you to create custom image effects.\nYou can make changes to the:\n 'Tone response curve', which modifies the tones of the image.\n 'Illuminant' : which allows you to change the profile primaries to adapt them to the shooting conditions.\n 'Destination primaries': which allows you to change the destination primaries with two main uses - channel mixer and calibration.\nNote: Abstract profiles take into account the built-in Working profiles without modifying them. They do not work with custom Working profiles. !TP_ICM_TRC_TOOLTIP;Allows you to change the default sRGB 'Tone response curve' in RT (g=2.4 s=12.92).\nThis TRC modifies the tones of the image. The RGB and Lab values, histogram and output (screen, TIF, JPG) are changed:\n-Gamma acts mainly on light tones -Slope acts mainly on dark tones.\nYou can choose any pair of 'gamma and slope' (values >1) and the algorithm will ensure that there is continuity between the linear and parabolic parts of the curve.\nA selection other than 'none' activates the 'Illuminant' and 'Destination primaries' menus. -!TP_ICM_WORKING_CIEDIAG;CIE xy diagram -!TP_ICM_WORKING_ILLU;Illuminant -!TP_ICM_WORKING_ILLU_1500;Tungsten 1500K -!TP_ICM_WORKING_ILLU_2000;Tungsten 2000K -!TP_ICM_WORKING_ILLU_D41;D41 -!TP_ICM_WORKING_ILLU_D50;D50 -!TP_ICM_WORKING_ILLU_D55;D55 -!TP_ICM_WORKING_ILLU_D60;D60 -!TP_ICM_WORKING_ILLU_D65;D65 -!TP_ICM_WORKING_ILLU_D80;D80 -!TP_ICM_WORKING_ILLU_D120;D120 -!TP_ICM_WORKING_ILLU_NONE;Default -!TP_ICM_WORKING_ILLU_STDA;stdA 2875K -!TP_ICM_WORKING_PRESER;Preserves Pastel tones -!TP_ICM_WORKING_PRIM;Destination primaries +TP_ICM_WORKING_CIEDIAG;CIE xy diagram +TP_ICM_WORKING_ILLU;Illuminant +TP_ICM_WORKING_ILLU_1500;Tungsten 1500K +TP_ICM_WORKING_ILLU_2000;Tungsten 2000K +TP_ICM_WORKING_ILLU_D41;D41 +TP_ICM_WORKING_ILLU_D50;D50 +TP_ICM_WORKING_ILLU_D55;D55 +TP_ICM_WORKING_ILLU_D60;D60 +TP_ICM_WORKING_ILLU_D65;D65 +TP_ICM_WORKING_ILLU_D80;D80 +TP_ICM_WORKING_ILLU_D120;D120 +TP_ICM_WORKING_ILLU_NONE;Standaard +TP_ICM_WORKING_ILLU_STDA;stdA 2875K +TP_ICM_WORKING_PRESER;Beschermt pasteltinten +TP_ICM_WORKING_PRIM;Bestemming primaire kleuren !TP_ICM_WORKING_PRIMFRAME_TOOLTIP;When 'Custom CIE xy diagram' is selected in 'Destination- primaries'' combobox, you can modify the values of the 3 primaries directly on the graph.\nNote that in this case, the white point position on the graph will not be updated. -!TP_ICM_WORKING_PRIM_AC0;ACESp0 -!TP_ICM_WORKING_PRIM_ACE;ACESp1 -!TP_ICM_WORKING_PRIM_ADOB;Adobe RGB -!TP_ICM_WORKING_PRIM_BET;Beta RGB -!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_NONE;Default -!TP_ICM_WORKING_PRIM_PROP;ProPhoto -!TP_ICM_WORKING_PRIM_REC;Rec2020 -!TP_ICM_WORKING_PRIM_SRGB;sRGB -!TP_ICM_WORKING_PRIM_WID;WideGamut -!TP_ICM_WORKING_TRC_18;Prophoto g=1.8 -!TP_ICM_WORKING_TRC_22;Adobe g=2.2 -!TP_ICM_WORKING_TRC_BT709;BT709 g=2.22 s=4.5 -!TP_ICM_WORKING_TRC_LIN;Linear g=1 -!TP_ICM_WORKING_TRC_SRGB;sRGB g=2.4 s=12.92 -!TP_LOCALLAB_ACTIV;Luminance only -!TP_LOCALLAB_ACTIVSPOT;Enable Spot -!TP_LOCALLAB_ADJ;Equalizer Color -!TP_LOCALLAB_AMOUNT;Amount -!TP_LOCALLAB_ARTIF;Shape detection -!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_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_AVOIDMUN;Munsell correction only +TP_ICM_WORKING_PRIM_AC0;ACESp0 +TP_ICM_WORKING_PRIM_ACE;ACESp1 +TP_ICM_WORKING_PRIM_ADOB;Adobe RGB +TP_ICM_WORKING_PRIM_BET;Beta RGB +TP_ICM_WORKING_PRIM_BRU;BruceRGB +TP_ICM_WORKING_PRIM_BST;BestRGB +TP_ICM_WORKING_PRIM_CUS;Aangepast (schuiven) +TP_ICM_WORKING_PRIM_CUSGR;Custom (CIE xy diagram) +TP_ICM_WORKING_PRIM_JDCMAX;JDC Max +TP_ICM_WORKING_PRIM_NONE;Standaard +TP_ICM_WORKING_PRIM_PROP;ProPhoto +TP_ICM_WORKING_PRIM_REC;Rec2020 +TP_ICM_WORKING_PRIM_SRGB;sRGB +TP_ICM_WORKING_PRIM_WID;WideGamut +TP_ICM_WORKING_TRC_18;Prophoto g=1,8 +TP_ICM_WORKING_TRC_22;Adobe g=2,2 +TP_ICM_WORKING_TRC_BT709;BT709 g=2,22 s=4,5 +TP_ICM_WORKING_TRC_LIN;Linear g=1 +TP_ICM_WORKING_TRC_SRGB;sRGB g=2,4 s=12,92 +TP_LOCALLAB_ACTIV;Alleen luminantie +TP_LOCALLAB_ACTIVSPOT;Activeer spot +TP_LOCALLAB_ADJ;Kleurequalizer +TP_LOCALLAB_AMOUNT;Hoeveelheid +TP_LOCALLAB_ARTIF;Vormdetectie +!TP_LOCALLAB_ARTIF_TOOLTIP;ΔE bereik threshold increases the range of ΔE bereik. High values are for very wide gamut images.\nIncreasing ΔE decay can improve shape detection, but can also reduce the bereik. +TP_LOCALLAB_AUTOGRAY;Autom. gemiddelde luminantie (Yb%) +TP_LOCALLAB_AUTOGRAYCIE;Auto +TP_LOCALLAB_AVOID;Voorkom kleurverschuiving +!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;Alleen Munsell-correctie !TP_LOCALLAB_AVOIDMUN_TOOLTIP;Munsell correction always disabled when Jz or CAM16 is used. -!TP_LOCALLAB_AVOIDRAD;Soft radius -!TP_LOCALLAB_BALAN;ab-L balance (ΔE) -!TP_LOCALLAB_BALANEXP;Laplacian balance -!TP_LOCALLAB_BALANH;C-H balance (ΔE) +TP_LOCALLAB_AVOIDRAD;Verzachtingsstraal +TP_LOCALLAB_BALAN;ab-L-balans (ΔE) +TP_LOCALLAB_BALANEXP;Laplacian-balans +TP_LOCALLAB_BALANH;C-H-balans (ΔE) !TP_LOCALLAB_BALAN_TOOLTIP;Changes the ΔE algorithm parameters.\nTakes into account more or less a*b* or L*, or more or less C or H.\nNot for Denoise. -!TP_LOCALLAB_BASELOG;Shadows range (logarithm base) -!TP_LOCALLAB_BILATERAL;Bilateral filter -!TP_LOCALLAB_BLACK_EV;Black Ev -!TP_LOCALLAB_BLCO;Chrominance only -!TP_LOCALLAB_BLENDMASKCOL;Blend -!TP_LOCALLAB_BLENDMASKMASK;Add/subtract luma mask -!TP_LOCALLAB_BLENDMASKMASKAB;Add/subtract chroma mask +TP_LOCALLAB_BASELOG;Bereik schaduwen (logaritmische basis) +TP_LOCALLAB_BILATERAL;Bilateraal filter +TP_LOCALLAB_BLACK_EV;Zwart LW +TP_LOCALLAB_BLCO;Alleen chrominantie +TP_LOCALLAB_BLENDMASKCOL;Meng +TP_LOCALLAB_BLENDMASKMASK;Voeg toe/trek af luma-masker +TP_LOCALLAB_BLENDMASKMASKAB;Voeg toe/trek af chroma-masker !TP_LOCALLAB_BLENDMASKMASK_TOOLTIP;If this slider = 0 no action.\nAdd or subtract the mask from the original image. !TP_LOCALLAB_BLENDMASK_TOOLTIP;If blend = 0 only shape detection is improved.\nIf blend > 0 the mask is added to the image. If blend < 0 the mask is subtracted from the image. -!TP_LOCALLAB_BLGUID;Guided Filter -!TP_LOCALLAB_BLINV;Inverse -!TP_LOCALLAB_BLLC;Luminance & Chrominance -!TP_LOCALLAB_BLLO;Luminance only -!TP_LOCALLAB_BLMED;Median +TP_LOCALLAB_BLGUID;Begeleid filter +TP_LOCALLAB_BLINV;Inverteer +TP_LOCALLAB_BLLC;Luminantie & Chrominantie +TP_LOCALLAB_BLLO;Alleen luminantie +TP_LOCALLAB_BLMED;Mediaan !TP_LOCALLAB_BLMETHOD_TOOLTIP;Normal: direct blur and noise with all settings.\nInverse: blur and noise with all settings. Warning, some settings may give curious results. -!TP_LOCALLAB_BLNOI_EXP;Blur & Noise -!TP_LOCALLAB_BLNORM;Normal -!TP_LOCALLAB_BLUFR;Blur/Grain & Denoise -!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with an an RT-spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' RT-spot(s) and increase the scope.\n\nThis module (including the 'median' and 'Guided filter') can be used in addition to the main-menu noise reduction. -!TP_LOCALLAB_BLUR;Gaussian Blur - Noise - Grain -!TP_LOCALLAB_BLURCOL;Radius +TP_LOCALLAB_BLNOI_EXP;Vervaging & Ruis +TP_LOCALLAB_BLNORM;Normaal +TP_LOCALLAB_BLUFR;Vervaging/Korrel & Ruisvermindering +!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 bereik and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' spots and increase the bereik.\n\nThis module (including the 'median' and 'Guided filter') can be used in addition to the main-menu noise reduction. +TP_LOCALLAB_BLUR;Gaussiaanse vervaging - Ruis - Korrel +TP_LOCALLAB_BLURCOL;Straal !TP_LOCALLAB_BLURCOLDE_TOOLTIP;The image used to calculate dE is blurred slightly to avoid taking isolated pixels into account. -!TP_LOCALLAB_BLURDE;Blur shape detection -!TP_LOCALLAB_BLURLC;Luminance only -!TP_LOCALLAB_BLURLEVELFRA;Blur levels +TP_LOCALLAB_BLURDE;Vormdetectie vervaging +TP_LOCALLAB_BLURLC;Alleen luminantie +TP_LOCALLAB_BLURLEVELFRA;Vervagingsniveaus !TP_LOCALLAB_BLURMASK_TOOLTIP;Uses a large-radius blur to create a mask that allows you to vary the contrast of the image and/or darken/lighten parts of it. !TP_LOCALLAB_BLURRMASK_TOOLTIP;Allows you to vary the 'radius' of the Gaussian blur (0 to 1000). -!TP_LOCALLAB_BLUR_TOOLNAME;Blur/Grain & Denoise -!TP_LOCALLAB_BLWH;All changes forced in Black-and-White +TP_LOCALLAB_BLUR_TOOLNAME;Vervaging/Korrel & Ruisvermindering +TP_LOCALLAB_BLWH;Alle veranderingen forceren in Zwart-wit !TP_LOCALLAB_BLWH_TOOLTIP;Force color components 'a' and 'b' to zero.\nUseful for black and white processing, or film simulation. -!TP_LOCALLAB_BUTTON_ADD;Add -!TP_LOCALLAB_BUTTON_DEL;Delete -!TP_LOCALLAB_BUTTON_DUPL;Duplicate -!TP_LOCALLAB_BUTTON_REN;Rename -!TP_LOCALLAB_BUTTON_VIS;Show/Hide -!TP_LOCALLAB_BWFORCE;Uses Black Ev & White Ev -!TP_LOCALLAB_CAM16PQREMAP;HDR PQ (Peak Luminance) +TP_LOCALLAB_BUTTON_ADD;Voeg toe +TP_LOCALLAB_BUTTON_DEL;Wis +TP_LOCALLAB_BUTTON_DUPL;Dupliceer +TP_LOCALLAB_BUTTON_REN;Hernoem +TP_LOCALLAB_BUTTON_VIS;Toon/verberg +TP_LOCALLAB_BWFORCE;Gebruik Zwart LW & Wit LW +TP_LOCALLAB_CAM16PQREMAP;HDR PQ (Piekluminantie) !TP_LOCALLAB_CAM16PQREMAP_TOOLTIP;PQ (Perceptual Quantizer) adapted to CAM16. Allows you to change the internal PQ function (usually 10000 cd/m2 - default 100 cd/m2 - disabled for 100 cd/m2).\nCan be used to adapt to different devices and images. -!TP_LOCALLAB_CAM16_FRA;Cam16 Image Adjustments -!TP_LOCALLAB_CAMMODE;CAM model -!TP_LOCALLAB_CAMMODE_CAM16;CAM 16 -!TP_LOCALLAB_CAMMODE_JZ;Jz Cz Hz -!TP_LOCALLAB_CATAD;Chromatic adaptation/Cat16 -!TP_LOCALLAB_CBDL;Contrast by Detail Levels +TP_LOCALLAB_CAM16_FRA;Cam16 Beeldaanpassingen +TP_LOCALLAB_CAMMODE;CAM-model +TP_LOCALLAB_CAMMODE_CAM16;CAM 16 +TP_LOCALLAB_CAMMODE_JZ;Jz Cz Hz +TP_LOCALLAB_CATAD;Chromatische aanpassing/Cat16 +TP_LOCALLAB_CBDL;Contrast per Detailniveaus !TP_LOCALLAB_CBDLCLARI_TOOLTIP;Enhances local contrast of the midtones. !TP_LOCALLAB_CBDL_ADJ_TOOLTIP;Same as wavelets.\nThe first level (0) acts on 2x2 pixel details.\nThe last level (5) acts on 64x64 pixel details. !TP_LOCALLAB_CBDL_THRES_TOOLTIP;Prevents the sharpening of noise. -!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_CHROMA;Chrominance -!TP_LOCALLAB_CHROMABLU;Chroma levels +TP_LOCALLAB_CBDL_TOOLNAME;Contrast per Detailniveaus +TP_LOCALLAB_CENTER_X;Centrum X +TP_LOCALLAB_CENTER_Y;Centrum Y +TP_LOCALLAB_CH;CL - LC +TP_LOCALLAB_CHRO46LABEL;Chroma-niveaus 456: Gemiddeld=%1 Hoog=%2 +TP_LOCALLAB_CHROLABEL;Chroma-niveaus 0123: Gemiddeld=%1 Hoog=%2 +TP_LOCALLAB_CHROMA;Chrominantie +TP_LOCALLAB_CHROMABLU;Chroma-niveaus !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_CHROMACBDL;Chroma +TP_LOCALLAB_CHROMACBDL;Chroma !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. -!TP_LOCALLAB_CHROMALEV;Chroma levels -!TP_LOCALLAB_CHROMASKCOL;Chroma +TP_LOCALLAB_CHROMALEV;Chroma-niveaus +TP_LOCALLAB_CHROMASKCOL;Chroma !TP_LOCALLAB_CHROMASK_TOOLTIP;Changes the chroma of the mask if one exists (i.e. C(C) or LC(H) is activated). -!TP_LOCALLAB_CHROML;Chroma (C) -!TP_LOCALLAB_CHRRT;Chroma -!TP_LOCALLAB_CIE;Color appearance (Cam16 & JzCzHz) -!TP_LOCALLAB_CIEC;Use Ciecam environment parameters +TP_LOCALLAB_CHROML;Chroma (C) +TP_LOCALLAB_CHRRT;Chroma +TP_LOCALLAB_CIE;Kleurweergave (Cam16 & JzCzHz) +TP_LOCALLAB_CIEC;Gebruik Ciecam omgevingsparameters !TP_LOCALLAB_CIECAMLOG_TOOLTIP;This module is based on the CIECAM color appearance model which was designed to better simulate how human vision perceives colors under different lighting conditions.\nThe first Ciecam process 'Scene conditions' is carried out by Log encoding, it also uses 'Absolute luminance' at the time of shooting.\nThe second Ciecam process 'Image adjustments' is simplified and uses only 3 variables (local contrast, contrast J, saturation s).\nThe third Ciecam process 'Viewing conditions' adapts the output to the intended viewing conditions (monitor, TV, projector, printer, etc.) so that the chromatic and contrast appearance is preserved across the display environment. -!TP_LOCALLAB_CIECOLORFRA;Color -!TP_LOCALLAB_CIECONTFRA;Contrast -!TP_LOCALLAB_CIELIGHTCONTFRA;Lighting & Contrast -!TP_LOCALLAB_CIELIGHTFRA;Lighting -!TP_LOCALLAB_CIEMODE;Change tool position -!TP_LOCALLAB_CIEMODE_COM;Default -!TP_LOCALLAB_CIEMODE_DR;Dynamic Range -!TP_LOCALLAB_CIEMODE_TM;Tone-Mapping +TP_LOCALLAB_CIECOLORFRA;Kleur +TP_LOCALLAB_CIECONTFRA;Contrast +TP_LOCALLAB_CIELIGHTCONTFRA;Verlichting & Contrast +TP_LOCALLAB_CIELIGHTFRA;Verlichting +TP_LOCALLAB_CIEMODE;Verander gereedschapspositie +TP_LOCALLAB_CIEMODE_COM;Standaard +TP_LOCALLAB_CIEMODE_DR;Dynamisch bereik +TP_LOCALLAB_CIEMODE_TM;Toonmappen !TP_LOCALLAB_CIEMODE_TOOLTIP;In Default mode, Ciecam is added at the end of the process. 'Mask and modifications' and 'Recovery based on luminance mask' are available for'Cam16 and JzCzHz' at your disposal .\nYou can also integrate Ciecam into other tools if you wish (TM, Wavelet, Dynamic Range, Log Encoding). The results for these tools will be different to those without Ciecam. In this mode, you can also use 'Mask and modifications' and 'Recovery based on luminance mask'. -!TP_LOCALLAB_CIEMODE_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_CLARICRES;Merge chroma -!TP_LOCALLAB_CLARIFRA;Clarity & Sharp mask/Blend & Soften Images +TP_LOCALLAB_CIEMODE_WAV;Wavelet +TP_LOCALLAB_CIETOOLEXP;Curven +TP_LOCALLAB_CIE_TOOLNAME;Kleurweergave (Cam16 & JzCzHz) +TP_LOCALLAB_CIRCRADIUS;Spotgrootte +!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;Meng chroma +TP_LOCALLAB_CLARIFRA;Klaarheid (Clarity) & Scherptemasker/Meng & Verzacht beelden !TP_LOCALLAB_CLARIJZ_TOOLTIP;Levels 0 to 4 (included): 'Sharp mask' is enabled\nLevels 5 and above: 'Clarity' is enabled. -!TP_LOCALLAB_CLARILRES;Merge luma -!TP_LOCALLAB_CLARISOFT;Soft radius +TP_LOCALLAB_CLARILRES;Meng luma +TP_LOCALLAB_CLARISOFT;Verzacht straal !TP_LOCALLAB_CLARISOFTJZ_TOOLTIP;The 'Soft radius' slider (guided filter algorithm) reduces halos and irregularities for Clarity, Sharp Mask and Local contrast wavelets Jz. !TP_LOCALLAB_CLARISOFT_TOOLTIP;The 'Soft radius' slider (guided filter algorithm) reduces halos and irregularities for Clarity, Sharp Mask and all wavelet pyramid processes. To deactivate, set slider to zero. -!TP_LOCALLAB_CLARITYML;Clarity +TP_LOCALLAB_CLARITYML;Klaarheid (Clarity) !TP_LOCALLAB_CLARI_TOOLTIP;Levels 0 to 4 (included): 'Sharp mask' is enabled\nLevels 5 and above: 'Clarity' is enabled.\nUseful if you use 'Wavelet level tone mapping'. -!TP_LOCALLAB_CLIPTM;Clip restored data (gain) -!TP_LOCALLAB_COFR;Color & Light -!TP_LOCALLAB_COLORDE;ΔE preview color - intensity +TP_LOCALLAB_CLIPTM;Kap herstelde data af (versterking) +TP_LOCALLAB_COFR;Kleur & Licht +TP_LOCALLAB_COLORDE;ΔE Voorbeeldkleur - intensiteit !TP_LOCALLAB_COLORDEPREV_TOOLTIP;Preview ΔE button will only work if you have activated one (and only one) of the tools in 'Add tool to current spot' menu.\nTo be able to preview ΔE with several tools enabled, use Mask and modifications - Preview ΔE. !TP_LOCALLAB_COLORDE_TOOLTIP;Show a blue color preview for ΔE selection if negative and green if positive.\n\nMask and modifications (show modified areas without mask): show actual modifications if positive, show enhanced modifications (luminance only) with blue and yellow if negative. -!TP_LOCALLAB_COLORSCOPE;Scope (color tools) -!TP_LOCALLAB_COLORSCOPE_TOOLTIP;Common Scope slider for Color and Light, Shadows/Highlights, Vibrance.\nOther tools have their own scope controls. -!TP_LOCALLAB_COLOR_CIE;Color curve -!TP_LOCALLAB_COLOR_TOOLNAME;Color & Light -!TP_LOCALLAB_COL_NAME;Name -!TP_LOCALLAB_COL_VIS;Status -!TP_LOCALLAB_COMPFRA;Directional contrast -!TP_LOCALLAB_COMPREFRA;Wavelet level tone mapping -!TP_LOCALLAB_CONTCOL;Contrast threshold -!TP_LOCALLAB_CONTFRA;Contrast by level -!TP_LOCALLAB_CONTRAST;Contrast +TP_LOCALLAB_COLOR;Bereik (kleurgereedschappen) +!TP_LOCALLAB_COLOR_TOOLTIP;Common bereik slider for Color and Light, Shadows/Highlights, Vibrance.\nOther tools have their own bereik controls. +TP_LOCALLAB_COLOR_CIE;Kleurcurve +TP_LOCALLAB_COLOR_TOOLNAME;Kleur & Licht +TP_LOCALLAB_COL_NAME;Naam +TP_LOCALLAB_COL_VIS;Status +TP_LOCALLAB_COMPFRA;Directioneel contrast +TP_LOCALLAB_COMPREFRA;Wavelet-niveau toonmappen +TP_LOCALLAB_CONTCOL;Contrastdrempel +TP_LOCALLAB_CONTFRA;Contrast per niveau +TP_LOCALLAB_CONTRAST;Contrast !TP_LOCALLAB_CONTRASTCURVMASK_TOOLTIP;Allows you to freely change the contrast of the mask.\n Has a similar function to the Gamma and Slope sliders.\n It allows you to target certain parts of the image (usually the lightest parts of the mask by using the curve to exclude the darker parts).May create artifacts. -!TP_LOCALLAB_CONTRESID;Contrast +TP_LOCALLAB_CONTRESID;Contrast !TP_LOCALLAB_CONTTHMASK_TOOLTIP;Allows you to determine which parts of the image will be impacted based on the texture. -!TP_LOCALLAB_CONTTHR;Contrast Threshold -!TP_LOCALLAB_CONTWFRA;Local contrast -!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_CONTTHR;Contrastdrempel +TP_LOCALLAB_CONTWFRA;Lokaal contrast +TP_LOCALLAB_CSTHRESHOLD;Wavelet-niveaus +TP_LOCALLAB_CSTHRESHOLDBLUR;Selecteer Wavelet-niveau +TP_LOCALLAB_CURV;Lichtheid - Contrast - Chrominantie 'Super' +TP_LOCALLAB_CURVCURR;Normaal +!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_LABEL;Tooncurve !TP_LOCALLAB_CURVEEDITOR_TONES_TOOLTIP;L=f(L), can be used with L(H) in Color and Light. !TP_LOCALLAB_CURVEMETHOD_TOOLTIP;'Normal', the curve L=f(L) uses the same algorithm as the lightness slider. -!TP_LOCALLAB_CURVES_CIE;Tone curve -!TP_LOCALLAB_CURVNONE;Disable curves -!TP_LOCALLAB_DARKRETI;Darkness -!TP_LOCALLAB_DEHAFRA;Dehaze -!TP_LOCALLAB_DEHAZ;Strength +TP_LOCALLAB_CURVES_CIE;Tooncurven +TP_LOCALLAB_CURVNONE;De-activeer curven +TP_LOCALLAB_DARKRETI;Donker +TP_LOCALLAB_DEHAFRA;Ontnevelen +TP_LOCALLAB_DEHAZ;Kracht !TP_LOCALLAB_DEHAZFRAME_TOOLTIP;Removes atmospheric haze. Increases overall saturation and detail.\nCan remove color casts, but may also introduce a blue cast which can be corrected with other tools. !TP_LOCALLAB_DEHAZ_TOOLTIP;Negative values add haze. -!TP_LOCALLAB_DELTAD;Delta balance -!TP_LOCALLAB_DELTAEC;ΔE Image mask -!TP_LOCALLAB_DENOI1_EXP;Denoise based on luminance mask -!TP_LOCALLAB_DENOI2_EXP;Recovery based on luminance mask +TP_LOCALLAB_DELTAD;Delta-balans +TP_LOCALLAB_DELTAEC;ΔE Beeldmasker +TP_LOCALLAB_DENOI1_EXP;Ruisvermindering volgens luminantiemasker +TP_LOCALLAB_DENOI2_EXP;Herstel volgens luminantiemasker !TP_LOCALLAB_DENOIBILAT_TOOLTIP;Allows you to reduce impulse or 'salt & pepper' noise. !TP_LOCALLAB_DENOICHROC_TOOLTIP;Allows you to deal with blotches and packets of noise. !TP_LOCALLAB_DENOICHRODET_TOOLTIP;Allows you to recover chrominance detail by progressively applying a Fourier transform (DCT). @@ -3330,259 +3428,270 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_LOCALLAB_DENOIEQUALCHRO_TOOLTIP;Allows you to direct the chroma noise reduction towards either the blue-yellow or red-green colors. !TP_LOCALLAB_DENOIEQUAL_TOOLTIP;Allows you to carry out more or less noise reduction in either the shadows or the highlights. !TP_LOCALLAB_DENOILUMDETAIL_TOOLTIP;Allows you to recover luminance detail by progressively applying a Fourier transform (DCT). -!TP_LOCALLAB_DENOIMASK;Denoise chroma mask +TP_LOCALLAB_DENOIMASK;Chroma-masker ruisvermindering !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_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_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_DIVGR;Gamma -!TP_LOCALLAB_DUPLSPOTNAME;Copy -!TP_LOCALLAB_EDGFRA;Edge sharpness -!TP_LOCALLAB_EDGSHOW;Show all tools -!TP_LOCALLAB_ELI;Ellipse -!TP_LOCALLAB_ENABLE_AFTER_MASK;Use Tone Mapping -!TP_LOCALLAB_ENABLE_MASK;Enable mask -!TP_LOCALLAB_ENABLE_MASKAFT;Use all algorithms Exposure +TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominantie +TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminantie +TP_LOCALLAB_DENOI_EXP;Ruisvermindering +!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 bereik allows you to differentiate the action based on color (ΔE).\nMinimum spot size: 128x128. +TP_LOCALLAB_DEPTH;Diepte +TP_LOCALLAB_DETAIL;Lokaal contrast +TP_LOCALLAB_DETAILFRA;Randdetectie - DCT +TP_LOCALLAB_DETAILSH;Details +TP_LOCALLAB_DETAILTHR;Detaildrempel Lum/chrom +TP_LOCALLAB_DIVGR;Gamma +TP_LOCALLAB_DUPLSPOTNAME;Kopieer +TP_LOCALLAB_EDGFRA;Randscherpte +TP_LOCALLAB_EDGSHOW;Toon alle gereedschappen +TP_LOCALLAB_ELI;Ellips +TP_LOCALLAB_ENABLE_AFTER_MASK;Gebruik toonmappen +TP_LOCALLAB_ENABLE_MASK;Activeer masker +TP_LOCALLAB_ENABLE_MASKAFT;Gebruik alle algoritmen Belichting !TP_LOCALLAB_ENARETIMASKTMAP_TOOLTIP;If enabled the Mask uses Restored Data after Transmission Map instead of Original data. -!TP_LOCALLAB_ENH;Enhanced -!TP_LOCALLAB_ENHDEN;Enhanced + chroma denoise -!TP_LOCALLAB_EPSBL;Detail -!TP_LOCALLAB_EQUIL;Normalize luminance +TP_LOCALLAB_ENH;Verbeterd +TP_LOCALLAB_ENHDEN;Verbeterd + chroma-ruisonderdrukking +TP_LOCALLAB_EPSBL;Detail +TP_LOCALLAB_EQUIL;Normaliseer luminantie !TP_LOCALLAB_EQUILTM_TOOLTIP;Reconstruct luminance so that the mean and variance of the output image are identical to those of the original. -!TP_LOCALLAB_ESTOP;Edge stopping -!TP_LOCALLAB_EV_DUPL;Copy of -!TP_LOCALLAB_EV_NVIS;Hide -!TP_LOCALLAB_EV_NVIS_ALL;Hide all -!TP_LOCALLAB_EV_VIS;Show -!TP_LOCALLAB_EV_VIS_ALL;Show all -!TP_LOCALLAB_EXCLUF;Excluding -!TP_LOCALLAB_EXCLUF_TOOLTIP;'Excluding' mode prevents adjacent spots from influencing certain parts of the image. Adjusting 'Scope' will extend the range of colors.\n You can also add tools to an Excluding spot and use them in the same way as for a normal spot. -!TP_LOCALLAB_EXCLUTYPE;Spot method +TP_LOCALLAB_ESTOP;Edge stopping +TP_LOCALLAB_EV_DUPL;Kopie van +TP_LOCALLAB_EV_NVIS;Verberg +TP_LOCALLAB_EV_NVIS_ALL;Verberg allemaal +TP_LOCALLAB_EV_VIS;Toon +TP_LOCALLAB_EV_VIS_ALL;Toon alles +TP_LOCALLAB_EXCLUF;Uitsluiting +!TP_LOCALLAB_EXCLUF_TOOLTIP;'Excluding' mode prevents adjacent spots from influencing certain parts of the image. Adjusting 'bereik' will extend the range of colors.\n You can also add tools to an Excluding spot and use them in the same way as for a normal spot. +TP_LOCALLAB_EXCLUTYPE;Spotmethode !TP_LOCALLAB_EXCLUTYPE_TOOLTIP;Normal spot uses recursive data.\n\nExcluding spot reinitializes all local adjustment data.\nCan be used to totally or partially cancel a previous action or to carry out operations in Inverse mode.\n\n'Full image' allows you to use the local adjustment tools on the whole image.\n The RT Spot delimiters are set beyond the image preview boundaries.\n The transition is set to 100.\nNote, you may have to reposition the RT Spot slightly and adjust the Spot size to get the desired effect.\nPlease note: using Denoise or Wavelet or FFTW in full-image mode uses large amounts of memory and may cause the application to crash on lower capacity systems. -!TP_LOCALLAB_EXECLU;Excluding spot -!TP_LOCALLAB_EXFULL;Full image -!TP_LOCALLAB_EXNORM;Normal spot +TP_LOCALLAB_EXECLU;Sluit spot uit +TP_LOCALLAB_EXFULL;Volledige afbeelding +TP_LOCALLAB_EXNORM;Normale spot !TP_LOCALLAB_EXPCBDL_TOOLTIP;Can be used to remove marks on the sensor or lens by reducing the contrast on the appropriate detail level(s). -!TP_LOCALLAB_EXPCHROMA;Chroma compensation +TP_LOCALLAB_EXPCHROMA;Chroma-compensatie !TP_LOCALLAB_EXPCHROMA_TOOLTIP;Use in association with 'Exposure compensation f' and 'Contrast Attenuator f' to avoid desaturating colors. !TP_LOCALLAB_EXPCOLOR_TOOLTIP;Adjust color, lightness, contrast and correct small defects such as red-eye, sensor dust etc. -!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_EXPCOMP;Belichtingscompensatie ƒ +TP_LOCALLAB_EXPCOMPINV;Belichtingscompensatie +!TP_LOCALLAB_EXPCOMP_TOOLTIP;For portraits or images with a low color gradient. You can change 'Shape detection' in 'Settings':\n\nIncrease 'ΔE bereik 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_EXPCURV;Curves -!TP_LOCALLAB_EXPGRAD;Graduated Filter +!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'bereik' 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;Curven +TP_LOCALLAB_EXPGRAD;Verloopfilter !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_EXPOSE;Dynamic Range & Exposure +TP_LOCALLAB_EXPOSE;Dynamisch bereik & Belichting !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_EXPTOOL;Exposure Tools -!TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure -!TP_LOCALLAB_FATAMOUNT;Amount -!TP_LOCALLAB_FATANCHOR;Anchor -!TP_LOCALLAB_FATDETAIL;Detail -!TP_LOCALLAB_FATFRA;Dynamic Range Compression ƒ +TP_LOCALLAB_EXPRETITOOLS;Geavanceerde Retinex-gereedschappen +!TP_LOCALLAB_EXPSHARP_TOOLTIP;Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'bereik' values to simulate smaller spots. +TP_LOCALLAB_EXPTOOL;Belichtingsgereedschappen +TP_LOCALLAB_EXP_TOOLNAME;Dynamisch bereik & Belichting +TP_LOCALLAB_FATAMOUNT;Hoeveelheid +TP_LOCALLAB_FATANCHOR;Anker +TP_LOCALLAB_FATDETAIL;Detail +TP_LOCALLAB_FATFRA;Compressie dynamisch bereik ƒ !TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal – uses the Fattal Tone-mapping algorithm. -!TP_LOCALLAB_FATLEVEL;Sigma -!TP_LOCALLAB_FATSHFRA;Dynamic Range Compression Mask ƒ +TP_LOCALLAB_FATLEVEL;Sigma +TP_LOCALLAB_FATSHFRA;Masker compressie dynamisch bereik ƒ !TP_LOCALLAB_FEATH_TOOLTIP;Gradient width as a percentage of the Spot diagonal\nUsed by all graduated filters in all tools.\nNo action if a graduated filter hasn't been activated. -!TP_LOCALLAB_FEATVALUE;Feather gradient (Grad. Filters) -!TP_LOCALLAB_FFTCOL_MASK;FFTW ƒ +TP_LOCALLAB_FEATVALUE;'Veer'verloop (Verloopfilters) +TP_LOCALLAB_FFTCOL_MASK;FFTW ƒ !TP_LOCALLAB_FFTMASK_TOOLTIP;Use a Fourier transform for better quality (increased processing time and memory requirements). -!TP_LOCALLAB_FFTW;ƒ - Use Fast Fourier Transform -!TP_LOCALLAB_FFTWBLUR;ƒ - Always Use Fast Fourier Transform +TP_LOCALLAB_FFTW;ƒ - Gebruik Fast Fourier-transformatie +TP_LOCALLAB_FFTWBLUR;ƒ - Gebruik altijd Fast Fourier-transformatie !TP_LOCALLAB_FULLIMAGE;Black-Ev and White-Ev for whole image !TP_LOCALLAB_FULLIMAGELOG_TOOLTIP;Calculates the Ev levels for the whole image. -!TP_LOCALLAB_GAM;Gamma -!TP_LOCALLAB_GAMC;Gamma +TP_LOCALLAB_GAM;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_GAMFRA;Tone response curve (TRC) -!TP_LOCALLAB_GAMM;Gamma -!TP_LOCALLAB_GAMMASKCOL;Gamma +TP_LOCALLAB_GAMFRA;Toonresponscurve (TRC) +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_GAMW;Gamma (wavelet pyramids) -!TP_LOCALLAB_GRADANG;Gradient angle +TP_LOCALLAB_GAMSH;Gamma +TP_LOCALLAB_GAMUTLABRELA;Lab +TP_LOCALLAB_GAMUTMUNSELL;Alleen Munsell +TP_LOCALLAB_GAMUTNON;Geen +TP_LOCALLAB_GAMUTXYZABSO;XYZ absoluut +TP_LOCALLAB_GAMUTXYZRELA;XYZ relatief +TP_LOCALLAB_GAMW;Gamma (wavelet-pyramiden) +TP_LOCALLAB_GRADANG;Hoek verloop !TP_LOCALLAB_GRADANG_TOOLTIP;Rotation angle in degrees: -180 0 +180. -!TP_LOCALLAB_GRADFRA;Graduated Filter Mask +TP_LOCALLAB_GRADFRA;Masker Verloopfilter !TP_LOCALLAB_GRADGEN_TOOLTIP;Adjusts luminance gradient strength. -!TP_LOCALLAB_GRADLOGFRA;Graduated Filter Luminance -!TP_LOCALLAB_GRADSTR;Gradient strength +TP_LOCALLAB_GRADLOGFRA;Verloopfilter - Luminantie +TP_LOCALLAB_GRADSTR;Verloopsterkte !TP_LOCALLAB_GRADSTRAB_TOOLTIP;Adjusts chroma gradient strength. -!TP_LOCALLAB_GRADSTRCHRO;Chroma gradient strength -!TP_LOCALLAB_GRADSTRHUE;Hue gradient strength -!TP_LOCALLAB_GRADSTRHUE2;Hue gradient strength +TP_LOCALLAB_GRADSTRCHRO;Chroma verloopsterkte +TP_LOCALLAB_GRADSTRHUE;Tint verloopsterkte +TP_LOCALLAB_GRADSTRHUE2;Tint verloopsterkte !TP_LOCALLAB_GRADSTRHUE_TOOLTIP;Adjusts hue gradient strength. -!TP_LOCALLAB_GRADSTRLUM;Luma gradient strength -!TP_LOCALLAB_GRAINFRA;Film Grain 1:1 -!TP_LOCALLAB_GRAINFRA2;Coarseness +TP_LOCALLAB_GRADSTRLUM;Luma verloopsterkte +TP_LOCALLAB_GRAINFRA;Filmkorrel 1:1 +TP_LOCALLAB_GRAINFRA2;Grofheid !TP_LOCALLAB_GRAIN_TOOLTIP;Adds film-like grain to the image. -!TP_LOCALLAB_GRALWFRA;Graduated filter (local contrast) +TP_LOCALLAB_GRALWFRA;Verloopfilter (lokaal contrast) !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, Color, Luminosity are concerned by Merge background (ΔE). !TP_LOCALLAB_GRIDMETH_TOOLTIP;Color 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 'Color toning' if you vary the 2 dots.\n\nDirect: acts directly on the chroma. -!TP_LOCALLAB_GRIDONE;Color Toning -!TP_LOCALLAB_GRIDTWO;Direct -!TP_LOCALLAB_GUIDBL;Soft radius +TP_LOCALLAB_GRIDONE;Kleurtoning +TP_LOCALLAB_GRIDTWO;Direct +TP_LOCALLAB_GUIDBL;Verzachtingsstraal !TP_LOCALLAB_GUIDBL_TOOLTIP;Applies a guided filter with adjustable radius. Allows you to reduce artifacts or blur the image. !TP_LOCALLAB_GUIDEPSBL_TOOLTIP;Changes the distribution function of the guided filter. Negative values simulate a Gaussian blur. -!TP_LOCALLAB_GUIDFILTER;Guided filter radius +TP_LOCALLAB_GUIDFILTER;Straal Begeleid filter !TP_LOCALLAB_GUIDFILTER_TOOLTIP;Can reduce or increase artifacts. !TP_LOCALLAB_GUIDSTRBL_TOOLTIP;Intensity of the guided filter. !TP_LOCALLAB_HHMASK_TOOLTIP;Fine hue adjustments for example for the skin. -!TP_LOCALLAB_HIGHMASKCOL;Highlights -!TP_LOCALLAB_HLH;H -!TP_LOCALLAB_HUECIE;Hue -!TP_LOCALLAB_IND;Independent (mouse) -!TP_LOCALLAB_INDSL;Independent (mouse + sliders) -!TP_LOCALLAB_INVBL;Inverse +TP_LOCALLAB_HIGHMASKCOL;Hoge lichten +TP_LOCALLAB_HLH;H +TP_LOCALLAB_HUECIE;Tint +TP_LOCALLAB_IND;Onafhankelijk (muis) +TP_LOCALLAB_INDSL;Onafhankelijk (muis + schuiven) +TP_LOCALLAB_INVBL;Inverteer !TP_LOCALLAB_INVBL_TOOLTIP;Alternative to 'Inverse' mode: use two spots\nFirst Spot:\n Full Image\n\nSecond spot: Excluding spot. -!TP_LOCALLAB_INVERS;Inverse +TP_LOCALLAB_INVERS;Inverteer !TP_LOCALLAB_INVERS_TOOLTIP;Fewer possibilities if selected (Inverse).\n\nAlternative: use two spots\nFirst Spot:\n Full Image\n \nSecond spot: Excluding spot\n\n Inverse will enable this tool for the area outside the spot, while the area within the spot will remain unaffected by the tool. -!TP_LOCALLAB_INVMASK;Inverse algorithm -!TP_LOCALLAB_ISOGR;Distribution (ISO) -!TP_LOCALLAB_JAB;Uses Black Ev & White Ev +TP_LOCALLAB_INVMASK;Keer algoritme om +TP_LOCALLAB_ISOGR;Distributie (ISO) +TP_LOCALLAB_JAB;Gebruikt Zwart Ev & Wit Ev !TP_LOCALLAB_JABADAP_TOOLTIP;Perceptual Uniform adaptation.\nAutomatically adjusts the relationship between Jz and saturation taking into account 'Absolute luminance'. -!TP_LOCALLAB_JZ100;Jz reference 100cd/m2 +TP_LOCALLAB_JZ100;Jz-referentie 100cd/m2 !TP_LOCALLAB_JZ100_TOOLTIP;Automatically adjusts the reference Jz 100 cd/m2 level (image signal).\nChanges the saturation level and action of 'PU adaptation' (Perceptual Uniform adaptation). -!TP_LOCALLAB_JZADAP;PU adaptation -!TP_LOCALLAB_JZCH;Chroma -!TP_LOCALLAB_JZCHROM;Chroma -!TP_LOCALLAB_JZCLARICRES;Merge chroma Cz -!TP_LOCALLAB_JZCLARILRES;Merge Jz -!TP_LOCALLAB_JZCONT;Contrast -!TP_LOCALLAB_JZFORCE;Force max Jz to 1 +TP_LOCALLAB_JZADAP;PU-adaptatie +TP_LOCALLAB_JZCH;Chroma +TP_LOCALLAB_JZCHROM;Chroma +TP_LOCALLAB_JZCLARICRES;Voeg samen met chroma Cz +TP_LOCALLAB_JZCLARILRES;Voeg samen Jz +TP_LOCALLAB_JZCONT;Contrast +TP_LOCALLAB_JZFORCE;Forceer max Jz tot 1 !TP_LOCALLAB_JZFORCE_TOOLTIP;Allows you to force the maximum Jz value to 1 for better slider and curve response. -!TP_LOCALLAB_JZFRA;Jz Cz Hz Image Adjustments -!TP_LOCALLAB_JZHFRA;Curves Hz -!TP_LOCALLAB_JZHJZFRA;Curve Jz(Hz) -!TP_LOCALLAB_JZHUECIE;Hue Rotation -!TP_LOCALLAB_JZLIGHT;Brightness -!TP_LOCALLAB_JZLOG;Log encoding Jz +TP_LOCALLAB_JZFRA;Jz Cz Hz Beeldaanpassingen +TP_LOCALLAB_JZHFRA;Curven Hz +TP_LOCALLAB_JZHJZFRA;Curve Jz(Hz) +TP_LOCALLAB_JZHUECIE;Tintrotatie +TP_LOCALLAB_JZLIGHT;Helderheid +TP_LOCALLAB_JZLOG;Log-codering Jz !TP_LOCALLAB_JZLOGWBS_TOOLTIP;Black Ev and White Ev adjustments can be different depending on whether Log encoding or Sigmoid is used.\nFor Sigmoid, a change (increase in most cases) of White Ev may be necessary to obtain a better rendering of highlights, contrast and saturation. !TP_LOCALLAB_JZLOGWB_TOOLTIP;If Auto is enabled, it will calculate and adjust the Ev levels and the 'Mean luminance Yb%' for the spot area. The resulting values will be used by all Jz operations including 'Log Encoding Jz'.\nAlso calculates the absolute luminance at the time of shooting. !TP_LOCALLAB_JZLOGYBOUT_TOOLTIP;Yb is the relative luminance of the background, expressed as a percentage of gray. 18% gray corresponds to a background luminance of 50% when expressed in CIE L.\nThe data is based on the mean luminance of the image.\nWhen used with Log Encoding, the mean luminance is used to determine the amount of gain that needs to be applied to the signal prior to the log encoding. Lower values of mean luminance will result in increased gain. !TP_LOCALLAB_JZMODECAM_TOOLTIP;Jz (only in 'Advanced' mode). Only operational if the output device (monitor) is HDR (peak luminance higher than 100 cd/m2 - ideally between 4000 and 10000 cd/m2. Black point luminance inferior to 0.005 cd/m2). This supposes a) the ICC-PCS for the screen uses Jzazbz (or XYZ), b) works in real precision, c) that the monitor is calibrated (if possible with a DCI-P3 or Rec-2020 gamut), d) that the usual gamma (sRGB or BT709) is replaced by a Perceptual Quantiser (PQ) function. -!TP_LOCALLAB_JZPQFRA;Jz remapping +TP_LOCALLAB_JZPQFRA;Jz herindeling !TP_LOCALLAB_JZPQFRA_TOOLTIP;Allows you to adapt the Jz algorithm to an SDR environment or to the characteristics (performance) of an HDR environment as follows:\n a) for luminance values between 0 and 100 cd/m2, the system behaves as if it were in an SDR environment.\n b) for luminance values between 100 and 10000 cd/m2, you can adapt the algorithm to the HDR characteristics of the image and the monitor.\n\nIf 'PQ - Peak luminance' is set to 10000, 'Jz remappping' behaves in the same way as the original Jzazbz algorithm. -!TP_LOCALLAB_JZPQREMAP;PQ - Peak luminance +TP_LOCALLAB_JZPQREMAP;PQ - Piekluminantie !TP_LOCALLAB_JZPQREMAP_TOOLTIP;PQ (Perceptual Quantizer) - allows you to change the internal PQ function (usually 10000 cd/m2 - default 120 cd/m2).\nCan be used to adapt to different images, processes and devices. -!TP_LOCALLAB_JZQTOJ;Relative luminance +TP_LOCALLAB_JZQTOJ;Relatieve luminantie !TP_LOCALLAB_JZQTOJ_TOOLTIP;Allows you to use 'Relative luminance' instead of 'Absolute luminance' - Brightness becomes Lightness.\nThe changes affect: the Brightness slider, the Contrast slider and the Jz(Jz) curve. -!TP_LOCALLAB_JZSAT;Saturation -!TP_LOCALLAB_JZSHFRA;Shadows/Highlights Jz -!TP_LOCALLAB_JZSOFTCIE;Soft radius (GuidedFilter) -!TP_LOCALLAB_JZSTRSOFTCIE;Strength GuidedFilter -!TP_LOCALLAB_JZTARGET_EV;Viewing Mean luminance (Yb%) -!TP_LOCALLAB_JZTHRHCIE;Threshold Chroma for Jz(Hz) -!TP_LOCALLAB_JZWAVEXP;Wavelet Jz -!TP_LOCALLAB_LABBLURM;Blur Mask -!TP_LOCALLAB_LABEL;Local Adjustments -!TP_LOCALLAB_LABGRID;Color correction grid -!TP_LOCALLAB_LABGRIDMERG;Background -!TP_LOCALLAB_LABGRID_VALUES;High(a)=%1 High(b)=%2\nLow(a)=%3 Low(b)=%4 -!TP_LOCALLAB_LABSTRUM;Structure Mask +TP_LOCALLAB_JZSAT;Verzadiging +TP_LOCALLAB_JZSHFRA;Schaduwen/Hoge lichten Jz +TP_LOCALLAB_JZSOFTCIE;Verzachtingsstraal (Begeleid filter) +TP_LOCALLAB_JZSTRSOFTCIE;Kracht Begeleid filter +TP_LOCALLAB_JZTARGET_EV;Bezie gemiddelde luminantie (Yb%) +TP_LOCALLAB_JZTHRHCIE;Chroma-drempel voor Jz(Hz) +TP_LOCALLAB_JZWAVEXP;Wavelet Jz +TP_LOCALLAB_LABBLURM;Vervagingsmasker +TP_LOCALLAB_LABEL;Lokale aanpassingen +TP_LOCALLAB_LABGRID;Kleurcorrectierooster +TP_LOCALLAB_LABGRIDMERG;Achtergrond +TP_LOCALLAB_LABGRID_VALUES;Hoog(a)=%1 Hoog(b)=%2\nLaag(a)=%3 Laag(b)=%4 +TP_LOCALLAB_LABSTRUM;Structuurmasker !TP_LOCALLAB_LAPLACC;ΔØ Mask Laplacian solve PDE -!TP_LOCALLAB_LAPLACE;Laplacian threshold ΔE -!TP_LOCALLAB_LAPLACEXP;Laplacian threshold -!TP_LOCALLAB_LAPMASKCOL;Laplacian threshold +TP_LOCALLAB_LAPLACE;Laplacian-drempel ΔE +TP_LOCALLAB_LAPLACEXP;Laplacian-drempel +TP_LOCALLAB_LAPMASKCOL;Laplacian-drempel !TP_LOCALLAB_LAPRAD1_TOOLTIP;Increases the contrast of the mask by increasing the luminance values of the lighter areas. Can be used in conjunction with the L(L) and LC(H) curves. !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;Residuele ruisniveaus +!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 -!TP_LOCALLAB_LEVELWAV;Wavelet levels +TP_LOCALLAB_LC_TOOLNAME;Lokaal Contrast & Wavelets +TP_LOCALLAB_LEVELBLUR;Maximum vervagingsniveaus +TP_LOCALLAB_LEVELWAV;Wavelet-niveaus !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. -!TP_LOCALLAB_LEVFRA;Levels -!TP_LOCALLAB_LIGHTNESS;Lightness +TP_LOCALLAB_LEVFRA;Niveaus +TP_LOCALLAB_LIGHTNESS;Lichtheid !TP_LOCALLAB_LIGHTN_TOOLTIP;In inverse mode: selection = -100 forces luminance to zero. -!TP_LOCALLAB_LIGHTRETI;Lightness -!TP_LOCALLAB_LINEAR;Linearity -!TP_LOCALLAB_LIST_NAME;Add tool to current spot... +TP_LOCALLAB_LIGHTRETI;Lichtheid +TP_LOCALLAB_LINEAR;Lineariteit +TP_LOCALLAB_LIST_NAME;Voeg gereedschap toe aan huidige spot... !TP_LOCALLAB_LIST_TOOLTIP;You can select 3 levels of complexity for each tool: Basic, Standard and Advanced.\nThe default setting for all tools is Basic but this can be changed in the Preferences window.\nYou can also change the level of complexity on a per-tool basis while you are editing. !TP_LOCALLAB_LMASK_LEVEL_TOOLTIP;Allows you to decrease or increase the effect on particular levels of detail in the mask by targeting certain luminance zones (in general the lightest). !TP_LOCALLAB_LMASK_LL_TOOLTIP;Allows you to freely change the contrast of the mask.\n Has a similar function to the Gamma and Slope sliders.\n It allows you to target certain parts of the image (usually the lightest parts of the mask by using the curve to exclude the darker parts). May create artifacts. -!TP_LOCALLAB_LOCCONT;Unsharp Mask -!TP_LOCALLAB_LOC_CONTRAST;Local Contrast & Wavelets -!TP_LOCALLAB_LOC_CONTRASTPYR;Pyramid 1: -!TP_LOCALLAB_LOC_CONTRASTPYR2;Pyramid 2: -!TP_LOCALLAB_LOC_CONTRASTPYR2LAB; Contrast by level/TM/Directional contrast -!TP_LOCALLAB_LOC_CONTRASTPYRLAB; Graduated Filter/Edge Sharpness/Blur -!TP_LOCALLAB_LOC_RESIDPYR;Residual image (Main) -!TP_LOCALLAB_LOG;Log Encoding -!TP_LOCALLAB_LOG1FRA;CAM16 Image Adjustments -!TP_LOCALLAB_LOG2FRA;Viewing Conditions -!TP_LOCALLAB_LOGAUTO;Automatic +TP_LOCALLAB_LOCCONT;Onscherptemasker +TP_LOCALLAB_LOC_CONTRAST;Lokaal Contrast & Wavelets +TP_LOCALLAB_LOC_CONTRASTPYR;Pyramide 1: +TP_LOCALLAB_LOC_CONTRASTPYR2;Pyramide 2: +TP_LOCALLAB_LOC_CONTRASTPYR2LAB;Contrast per niveau/TM/Directioneel contrast +TP_LOCALLAB_LOC_CONTRASTPYRLAB;Verloopfilter/Randscherpte/Vervaging +TP_LOCALLAB_LOC_RESIDPYR;Residueel beeld (Main) +TP_LOCALLAB_LOG;Log-codering +TP_LOCALLAB_LOG1FRA;CAM16 Beeldaanpassingen +TP_LOCALLAB_LOG2FRA;Kijkomstandigheden +TP_LOCALLAB_LOGAUTO;Automatisch !TP_LOCALLAB_LOGAUTOGRAYJZ_TOOLTIP;Automatically calculates the 'Mean luminance' for the scene conditions. !TP_LOCALLAB_LOGAUTOGRAY_TOOLTIP;Automatically calculates the 'Mean luminance' for the scene conditions when the 'Automatic' button in Relative Exposure Levels is pressed. !TP_LOCALLAB_LOGAUTO_TOOLTIP;Pressing this button will calculate the dynamic range and 'Mean luminance' for the scene conditions if the 'Auto mean luminance (Yb%)' is checked).\nAlso calculates the absolute luminance at the time of shooting.\nPress the button again to adjust the automatically calculated values. !TP_LOCALLAB_LOGBASE_TOOLTIP;Default = 2.\nValues less than 2 reduce the action of the algorithm making the shadows darker and the highlights brighter.\nWith values greater than 2, the shadows are grayer and the highlights become more washed out. !TP_LOCALLAB_LOGCATAD_TOOLTIP;Chromatic adaptation allows us to interpret a color according to its spatio-temporal environment.\nUseful when the white balance deviates significantly from the D50 reference.\nAdapts colors to the illuminant of the output device. -!TP_LOCALLAB_LOGCIE;Log encoding instead of Sigmoid +TP_LOCALLAB_LOGCIE;Log-codering ipv. Sigmoid !TP_LOCALLAB_LOGCIE_TOOLTIP;Allows you tu use Black Ev, White Ev, Scene Mean luminance(Yb%) and Viewing Mean luminance(Yb%) for tone-mapping using Log encoding Q. -!TP_LOCALLAB_LOGCOLORFL;Colorfulness (M) +TP_LOCALLAB_LOGCOLORFL;Kleurrijkheid (M) !TP_LOCALLAB_LOGCOLORF_TOOLTIP;Perceived amount of hue in relation to gray.\nIndicator that a stimulus appears more or less colored. -!TP_LOCALLAB_LOGCONQL;Contrast (Q) -!TP_LOCALLAB_LOGCONTHRES;Contrast threshold (J & Q) -!TP_LOCALLAB_LOGCONTL;Contrast (J) +TP_LOCALLAB_LOGCONQL;Contrast (Q) +TP_LOCALLAB_LOGCONTHRES;Contrastdrempel (J & Q) +TP_LOCALLAB_LOGCONTL;Contrast (J) !TP_LOCALLAB_LOGCONTL_TOOLTIP;Contrast (J) in CIECAM16 takes into account the increase in perceived coloration with luminance. !TP_LOCALLAB_LOGCONTQ_TOOLTIP;Contrast (Q) in CIECAM16 takes into account the increase in perceived coloration with brightness. !TP_LOCALLAB_LOGCONTTHRES_TOOLTIP;Adjusts the mid-tone contrast range (J & Q).\nPositive values progressively reduce the effect of the Contrast sliders (J & Q). Negative values progressively increase the effect of the Contrast sliders. !TP_LOCALLAB_LOGDETAIL_TOOLTIP;Acts mainly on high frequencies. !TP_LOCALLAB_LOGENCOD_TOOLTIP;Tone Mapping with Logarithmic encoding (ACES).\nUseful for underexposed images or images with high dynamic range.\n\nTwo-step process: 1) Dynamic Range calculation 2) Manual adjustment. -!TP_LOCALLAB_LOGEXP;All tools -!TP_LOCALLAB_LOGFRA;Scene Conditions +TP_LOCALLAB_LOGEXP;Alle gereedschappen +TP_LOCALLAB_LOGFRA;Scène-omstandigheden !TP_LOCALLAB_LOGFRAME_TOOLTIP;Allows you to calculate and adjust the Ev levels and the 'Mean luminance Yb%' (source gray point) for the spot area. The resulting values will be used by all Lab operations and most RGB operations in the pipeline.\nAlso calculates the absolute luminance at the time of shooting. !TP_LOCALLAB_LOGIMAGE_TOOLTIP;Takes into account corresponding Ciecam variables: i.e. Contrast (J) and Saturation (s), as well as Contrast (Q), Brightness (Q), Lightness (J) and Colorfulness (M) (in Advanced mode). -!TP_LOCALLAB_LOGLIGHTL;Lightness (J) +TP_LOCALLAB_LOGLIGHTL;Lichtheid (J) !TP_LOCALLAB_LOGLIGHTL_TOOLTIP;Close to lightness (L*a*b*). Takes into account the increase in perceived coloration. -!TP_LOCALLAB_LOGLIGHTQ;Brightness (Q) +TP_LOCALLAB_LOGLIGHTQ;Helderheid (Q) !TP_LOCALLAB_LOGLIGHTQ_TOOLTIP;Perceived amount of light emanating from a stimulus.\nIndicator that a stimulus appears to be more or less bright, clear. -!TP_LOCALLAB_LOGLIN;Logarithm mode -!TP_LOCALLAB_LOGPFRA;Relative Exposure Levels -!TP_LOCALLAB_LOGREPART;Overall strength +TP_LOCALLAB_LOGLIN;Logaritmische modus +TP_LOCALLAB_LOGPFRA;Relatieve Belichtingsniveaus +TP_LOCALLAB_LOGREPART;Overall kracht !TP_LOCALLAB_LOGREPART_TOOLTIP;Allows you to adjust the relative strength of the log-encoded image with respect to the original image.\nDoes not affect the Ciecam component. !TP_LOCALLAB_LOGSATURL_TOOLTIP;Saturation (s) in CIECAM16 corresponds to the color of a stimulus in relation to its own brightness.\nActs mainly on medium tones and on the highlights. !TP_LOCALLAB_LOGSCENE_TOOLTIP;Corresponds to the shooting conditions. !TP_LOCALLAB_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_LOG_TOOLNAME;Log Encoding -!TP_LOCALLAB_LUM;LL - CC -!TP_LOCALLAB_LUMADARKEST;Darkest -!TP_LOCALLAB_LUMASK;Background color/luma mask +TP_LOCALLAB_LOG_TOOLNAME;Log-codering +TP_LOCALLAB_LUM;LL - CC +TP_LOCALLAB_LUM46LABEL;Luma-niveaus 456: Gemiddeld=%1 Hoog=%2 +TP_LOCALLAB_LUMADARKEST;Donkerst +TP_LOCALLAB_LUMASK;Achtergrondkleur/luma-masker !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_MASFRAME;Mask and Merge +TP_LOCALLAB_LUMAWHITESEST;Lichtst +TP_LOCALLAB_LUMFRA;L*a*b* standaard +TP_LOCALLAB_LUMLABEL;Luma-niveaus 0123: Gemiddeld=%1 Hoog=%2 +TP_LOCALLAB_MASFRAME;Masker en Combineer !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 -!TP_LOCALLAB_MASK2;Contrast curve -!TP_LOCALLAB_MASKCOM;Common Color Mask -!TP_LOCALLAB_MASKCOM_TOOLNAME;Common Color Mask -!TP_LOCALLAB_MASKCOM_TOOLTIP;A tool in its own right.\nCan be used to adjust the image appearance (chrominance, luminance, contrast) and texture as a function of Scope. +TP_LOCALLAB_MASK;Curven +TP_LOCALLAB_MASK2;Contrastcurve +TP_LOCALLAB_MASKCOM;Gemeenschappelijk Kleurmasker +!TP_LOCALLAB_MASKCOM_TOOLNAME;Gemeenschappelijk Kleurmasker +!TP_LOCALLAB_MASKCOM_TOOLTIP;A tool in its own right.\nCan be used to adjust the image appearance (chrominance, luminance, contrast) and texture as a function of bereik. !TP_LOCALLAB_MASKCURVE_TOOLTIP;The 3 curves are set to 1 (maximum) by default:\nC=f(C) the chroma varies according to the chrominance. You can decrease the chroma to improve the selection. By setting this curve close to zero (with a low value of C to activate the curve) you can desaturate the background in Inverse mode.\nL=f(L) the luminance varies according to the luminance, so you can decrease the brightness to improve the selection.\nL and C = f(H) luminance and chroma vary with hue, so you can decrease luminance and chroma to improve selection. -!TP_LOCALLAB_MASKDDECAY;Decay strength +TP_LOCALLAB_MASKDDECAY;Vervalsterkte !TP_LOCALLAB_MASKDECAY_TOOLTIP;Manages the rate of decay for the gray levels in the mask.\n Decay = 1 linear, Decay > 1 sharper parabolic transitions, Decay < 1 more gradual transitions. !TP_LOCALLAB_MASKDEINV_TOOLTIP;Reverses the way the algorithm interprets the mask.\nIf checked black and very light areas will be decreased. !TP_LOCALLAB_MASKDE_TOOLTIP;Used to target the denoise as a function of 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 If the mask is below the 'dark' threshold, then the Denoise will be applied progressively.\n iIf the mask is above the 'light' threshold, then the Denoise will be applied progressively.\n Between the two, the image settings without the Denoise will be maintained, unless you adjust the sliders 'Gray area luminance denoise' or 'Gray area chrominance denoise'. !TP_LOCALLAB_MASKGF_TOOLTIP;Used to target the Guided Filter as a function of 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 If the mask is below the 'dark' threshold, then the GF will be applied progressively.\n If the mask is above the 'light' threshold, then the GF will be applied progressively.\n Between the two, the image settings without the GF will be maintained. -!TP_LOCALLAB_MASKH;Hue curve +TP_LOCALLAB_MASKH;Tintcurve !TP_LOCALLAB_MASKHIGTHRESCB_TOOLTIP;Lighter-tone limit above which CBDL (Luminance only) parameters 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'.\nUse 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_MASKHIGTHRESC_TOOLTIP;Lighter-tone limit above 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. !TP_LOCALLAB_MASKHIGTHRESD_TOOLTIP; The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (as determined by the mask).\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure 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. @@ -3594,14 +3703,14 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_LOCALLAB_MASKHIGTHRESVIB_TOOLTIP;Lighter-tone limit above which the parameters will be restored progressively to their original values prior to being modified by the Vibrance and Warm Cool 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_MASKHIGTHRESWAV_TOOLTIP;Lighter-tone limit above which the parameters will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet 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_MASKHIGTHRES_TOOLTIP; The Guided Filter is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (as determined by the mask).\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'structure mask', 'Smooth radius', 'Gamma and slope', 'Contrast curve', 'Local contrast wavelet'.\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_MASKLCTHR;Light area luminance threshold -!TP_LOCALLAB_MASKLCTHR2;Light area luma threshold -!TP_LOCALLAB_MASKLCTHRLOW;Dark area luminance threshold -!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_MASKLNOISELOW;Reinforce dark/light areas +TP_LOCALLAB_MASKLCTHR;Lichte gebieden luminantiedrempel +TP_LOCALLAB_MASKLCTHR2;Lichte gebieden luma-drempel +TP_LOCALLAB_MASKLCTHRLOW;Donkere gebieden luminantiedrempel +TP_LOCALLAB_MASKLCTHRLOW2;Donkere gebieden luma-drempel +TP_LOCALLAB_MASKLCTHRMID;Grijze gebieden luma-ruisvermindering +!TP_LOCALLAB_MASKLCTHRMIDCH;Grijze gebieden chroma-ruisvermindering +!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;Versterk donkere/lichte gebieden !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. !TP_LOCALLAB_MASKLOWTHRESD_TOOLTIP;The denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (as determined by the mask).\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure 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. @@ -3614,7 +3723,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_LOCALLAB_MASKLOWTHRESWAV_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet 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_MASKLOWTHRES_TOOLTIP;The Guided Filter is progressively increased from 0% at the threshold setting to 100% at the maximum black value (as determined by the mask).\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure 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. !TP_LOCALLAB_MASKRECOL_TOOLTIP;Used to modulate the effect of the Color and Light 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 Color and Light settings \n In between these two areas, the full value of the Color and Light settings will be applied. -!TP_LOCALLAB_MASKRECOTHRES;Recovery threshold +TP_LOCALLAB_MASKRECOTHRES;Hersteldrempel !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. !TP_LOCALLAB_MASKRELOG_TOOLTIP;Used to modulate the effect of the Log encoding 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 Log encoding settings - can be used to restore highlights reconstructed by Color propagation \n In between these two areas, the full value of the Log encoding settings will be applied. !TP_LOCALLAB_MASKRESCB_TOOLTIP;Used to modulate the effect of the CBDL (Luminance only) 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 CBDL settings \n In between these two areas, the full value of the CBDL settings will be applied. @@ -3623,288 +3732,289 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_LOCALLAB_MASKRESTM_TOOLTIP;Used to modulate the effect of the Tone Mapping 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 Tone Mapping settings \n In between these two areas, the full value of the Tone Mapping settings will be applied. !TP_LOCALLAB_MASKRESVIB_TOOLTIP;Used to modulate the effect of the Vibrance and Warm Cool 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 Vibrance and Warm Cool settings \n In between these two areas, the full value of the Vibrance and Warm Cool settings will be applied. !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_MEDIAN;Median Low +TP_LOCALLAB_MASKUNUSABLE;Masker uitgeschakeld (Masker & modificaties) +TP_LOCALLAB_MASKUSABLE;Masker ingeschakeld (Masker & modificaties) +!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;Mediaan Laag !TP_LOCALLAB_MEDIANITER_TOOLTIP;The number of successive iterations carried out by the median filter. !TP_LOCALLAB_MEDIAN_TOOLTIP;You can choose a median value in the range 3x3 to 9x9 pixels. Higher values increase noise reduction and blur. -!TP_LOCALLAB_MEDNONE;None -!TP_LOCALLAB_MERCOL;Color -!TP_LOCALLAB_MERDCOL;Merge background (ΔE) -!TP_LOCALLAB_MERELE;Lighten only -!TP_LOCALLAB_MERFIV;Addition -!TP_LOCALLAB_MERFOR;Color Dodge -!TP_LOCALLAB_MERFOU;Multiply -!TP_LOCALLAB_MERGE1COLFRA;Merge with Original/Previous/Background -!TP_LOCALLAB_MERGECOLFRA;Mask: LCh & Structure +TP_LOCALLAB_MEDNONE;Geen +TP_LOCALLAB_MERCOL;Kleur +TP_LOCALLAB_MERDCOL;Voeg samen met achtergrond (ΔE) +TP_LOCALLAB_MERELE;Alleen ophelderen +TP_LOCALLAB_MERFIV;Optellinh +TP_LOCALLAB_MERFOR;Kleur tegenhouden +TP_LOCALLAB_MERFOU;Vermenigvuldig +TP_LOCALLAB_MERGE1COLFRA;Voeg samen met Origineel/Vorige/Achtergrond +TP_LOCALLAB_MERGECOLFRA;Masker: LCh & Structuur !TP_LOCALLAB_MERGECOLFRMASK_TOOLTIP;Allows you to create masks based on the 3 LCh curves and/or a structure-detection algorithm. -!TP_LOCALLAB_MERGEMER_TOOLTIP;Takes ΔE into account when merging files (equivalent of scope in this case). +!TP_LOCALLAB_MERGEMER_TOOLTIP;Takes ΔE into account when merging files (equivalent of bereik in this case). !TP_LOCALLAB_MERGEOPA_TOOLTIP;Opacity = % of current spot to be merged with original or previous Spot.\nContrast threshold : adjusts result as a function of contrast in original image. -!TP_LOCALLAB_MERHEI;Overlay -!TP_LOCALLAB_MERHUE;Hue -!TP_LOCALLAB_MERLUCOL;Luminance -!TP_LOCALLAB_MERLUM;Luminosity -!TP_LOCALLAB_MERNIN;Screen -!TP_LOCALLAB_MERONE;Normal -!TP_LOCALLAB_MERSAT;Saturation -!TP_LOCALLAB_MERSEV;Soft Light (legacy) -!TP_LOCALLAB_MERSEV0;Soft Light Illusion -!TP_LOCALLAB_MERSEV1;Soft Light W3C -!TP_LOCALLAB_MERSEV2;Hard Light -!TP_LOCALLAB_MERSIX;Divide -!TP_LOCALLAB_MERTEN;Darken only -!TP_LOCALLAB_MERTHI;Color Burn -!TP_LOCALLAB_MERTHR;Difference -!TP_LOCALLAB_MERTWE;Exclusion -!TP_LOCALLAB_MERTWO;Subtract +TP_LOCALLAB_MERHEI;Overlap +TP_LOCALLAB_MERHUE;Tint +TP_LOCALLAB_MERLUCOL;Luminantie +TP_LOCALLAB_MERLUM;Luminositeit +TP_LOCALLAB_MERNIN;Scherm +TP_LOCALLAB_MERONE;Normaal +TP_LOCALLAB_MERSAT;Verzadiging +TP_LOCALLAB_MERSEV;Zacht licht (legacy) +TP_LOCALLAB_MERSEV0;Zacht licht Illusie +TP_LOCALLAB_MERSEV1;Zacht licht W3C +TP_LOCALLAB_MERSEV2;Hard Licht +TP_LOCALLAB_MERSIX;Deel +TP_LOCALLAB_MERTEN;Alleen donker maken +TP_LOCALLAB_MERTHI;Brand kleur +TP_LOCALLAB_MERTHR;Verschil +TP_LOCALLAB_MERTWE;Uitsluiting +TP_LOCALLAB_MERTWO;Aftrekken !TP_LOCALLAB_METHOD_TOOLTIP;'Enhanced + chroma denoise' significantly increases processing times.\nBut reduce artifacts. -!TP_LOCALLAB_MLABEL;Restored data Min=%1 Max=%2 +TP_LOCALLAB_MLABEL;Herstelde 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 -!TP_LOCALLAB_MODE_NORMAL;Standard -!TP_LOCALLAB_MODE_SIMPLE;Basic -!TP_LOCALLAB_MRFIV;Background -!TP_LOCALLAB_MRFOU;Previous Spot -!TP_LOCALLAB_MRONE;None -!TP_LOCALLAB_MRTHR;Original Image +TP_LOCALLAB_MODE_EXPERT;Geavanceerd +TP_LOCALLAB_MODE_NORMAL;Standaard +TP_LOCALLAB_MODE_SIMPLE;Basis +TP_LOCALLAB_MRFIV;Achtergrond +TP_LOCALLAB_MRFOU;Voorgaande spot +TP_LOCALLAB_MRONE;Geen +TP_LOCALLAB_MRTHR;Originele afbeelding !TP_LOCALLAB_MULTIPL_TOOLTIP;Wide-range tone adjustment: -18EV to +4EV. The first slider acts on very dark tones between -18EV and -6EV. The last slider acts on light tones up to 4EV. -!TP_LOCALLAB_NEIGH;Radius +TP_LOCALLAB_NEIGH;Radius !TP_LOCALLAB_NLDENOISENLGAM_TOOLTIP;Lower values preserve details and texture, higher values increase denoise.\nIf gamma = 3.0 Luminance 'linear' is used. !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_NLDET;Detail recovery -!TP_LOCALLAB_NLFRA;Non-local Means - Luminance +TP_LOCALLAB_NLDET;Detailherstel +TP_LOCALLAB_NLFRA;Non-local Means: Luminantie !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 -!TP_LOCALLAB_NLPAT;Maximum patch size -!TP_LOCALLAB_NLRAD;Maximum radius size -!TP_LOCALLAB_NOISECHROCOARSE;Coarse chroma (Wav) +TP_LOCALLAB_NLGAM;Gamma +TP_LOCALLAB_NLLUM;Kracht +TP_LOCALLAB_NLPAT;Maximale patch-grootte +TP_LOCALLAB_NLRAD;Maximale straalgrootte +TP_LOCALLAB_NOISECHROCOARSE;Ruw chroma (Wav) !TP_LOCALLAB_NOISECHROC_TOOLTIP;If superior to zero, high quality algorithm is enabled.\nCoarse is for slider >=0.02. -!TP_LOCALLAB_NOISECHRODETAIL;Chroma detail recovery -!TP_LOCALLAB_NOISECHROFINE;Fine chroma (Wav) -!TP_LOCALLAB_NOISEGAM;Gamma +TP_LOCALLAB_NOISECHRODETAIL;Chroma detailherstel +TP_LOCALLAB_NOISECHROFINE;Fijn chroma (Wav) +TP_LOCALLAB_NOISEGAM;Gamma !TP_LOCALLAB_NOISEGAM_TOOLTIP;If gamma = 1 Luminance 'Lab' is used. If gamma = 3.0 Luminance 'linear' is used.\nLower values preserve details and texture, higher values increase denoise. -!TP_LOCALLAB_NOISELEQUAL;Equalizer white-black -!TP_LOCALLAB_NOISELUMCOARSE;Luminance coarse (Wav) -!TP_LOCALLAB_NOISELUMDETAIL;Luma detail recovery -!TP_LOCALLAB_NOISELUMFINE;Luminance fine 1 (Wav) -!TP_LOCALLAB_NOISELUMFINETWO;Luminance fine 2 (Wav) -!TP_LOCALLAB_NOISELUMFINEZERO;Luminance fine 0 (Wav) -!TP_LOCALLAB_NOISEMETH;Denoise -!TP_LOCALLAB_NOISE_TOOLTIP;Adds luminance noise. -!TP_LOCALLAB_NONENOISE;None -!TP_LOCALLAB_NUL_TOOLTIP;. -!TP_LOCALLAB_OFFS;Offset -!TP_LOCALLAB_OFFSETWAV;Offset -!TP_LOCALLAB_OPACOL;Opacity -!TP_LOCALLAB_ORIGLC;Merge only with original image -!TP_LOCALLAB_ORRETILAP_TOOLTIP;Modifies ΔE prior to any changes made by 'Scope'. This allows you to differentiate the action for different parts of the image (with respect to the background for example). +TP_LOCALLAB_NOISELEQUAL;Equalizer wit-zwart +TP_LOCALLAB_NOISELUMCOARSE;Luminantie grof coarse (Wav) +TP_LOCALLAB_NOISELUMDETAIL;Luma detailherstel +TP_LOCALLAB_NOISELUMFINE;Luminantie fijn 1 (Wav) +TP_LOCALLAB_NOISELUMFINETWO;Luminantie fijn 2 (Wav) +TP_LOCALLAB_NOISELUMFINEZERO;Luminantie fijn 0 (Wav) +TP_LOCALLAB_NOISEMETH;Onderdruk ruis +TP_LOCALLAB_NOISE_TOOLTIP;Voegt luminantieruis toe. +TP_LOCALLAB_NONENOISE;Geen +TP_LOCALLAB_NUL_TOOLTIP;. +TP_LOCALLAB_OFFS;Verschuiving +TP_LOCALLAB_OFFSETWAV;Verschuiving +TP_LOCALLAB_OPACOL;Opaciteit +TP_LOCALLAB_ORIGLC;Voeg alleen samen met originele afbeelding +!TP_LOCALLAB_ORRETILAP_TOOLTIP;Modifies ΔE prior to any changes made by 'bereik'. This allows you to differentiate the action for different parts of the image (with respect to the background for example). !TP_LOCALLAB_ORRETISTREN_TOOLTIP;Acts on the Laplacian threshold, the greater the action, the more the differences in contrast will be reduced. -!TP_LOCALLAB_PASTELS2;Vibrance -!TP_LOCALLAB_PDE;Contrast Attenuator - Dynamic Range compression -!TP_LOCALLAB_PDEFRA;Contrast Attenuator ƒ +TP_LOCALLAB_PASTELS2;Levendigheid +TP_LOCALLAB_PDE;Contrastversterker - Compressie Dynamisch bereik +TP_LOCALLAB_PDEFRA;Contrastversterker ƒ !TP_LOCALLAB_PDEFRAME_TOOLTIP;PDE IPOL algorithm adapted for Rawtherapee : gives different results and requires different settings compared to main-menu 'Exposure'.\nMay be useful for under-exposed or high dynamic range images. -!TP_LOCALLAB_PREVHIDE;Hide additional settings -!TP_LOCALLAB_PREVIEW;Preview ΔE -!TP_LOCALLAB_PREVSHOW;Show additional settings -!TP_LOCALLAB_PROXI;ΔE decay -!TP_LOCALLAB_QUAAGRES;Aggressive -!TP_LOCALLAB_QUACONSER;Conservative -!TP_LOCALLAB_QUALCURV_METHOD;Curve type -!TP_LOCALLAB_QUAL_METHOD;Global quality -!TP_LOCALLAB_QUANONEALL;Off -!TP_LOCALLAB_QUANONEWAV;Non-local means only -!TP_LOCALLAB_RADIUS;Radius +TP_LOCALLAB_PREVHIDE;Verberg extra instellingen +TP_LOCALLAB_PREVIEW;Voorbeeld ΔE +TP_LOCALLAB_PREVSHOW;Toon extra instellingen +TP_LOCALLAB_PROXI;ΔE-verval +TP_LOCALLAB_QUAAGRES;Aggressief +TP_LOCALLAB_QUACONSER;Conservatief +TP_LOCALLAB_QUALCURV_METHOD;Soort curve +TP_LOCALLAB_QUAL_METHOD;Globale kwaliteit +TP_LOCALLAB_QUANONEALL;Uit +TP_LOCALLAB_QUANONEWAV;Alleen Non-local means +TP_LOCALLAB_RADIUS;Radius !TP_LOCALLAB_RADIUS_TOOLTIP;Uses a Fast Fourier Transform for radius > 30. -!TP_LOCALLAB_RADMASKCOL;Smooth radius +TP_LOCALLAB_RADMASKCOL;Verzachtingsstraal !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_RECT;Rectangle -!TP_LOCALLAB_RECURS;Recursive references +TP_LOCALLAB_RECT;Rechthoek +TP_LOCALLAB_RECURS;Recursieve referenties !TP_LOCALLAB_RECURS_TOOLTIP;Forces the algorithm to recalculate the references after each tool is applied.\nAlso useful for working with masks. -!TP_LOCALLAB_REN_DIALOG_LAB;Enter the new Control Spot name -!TP_LOCALLAB_REN_DIALOG_NAME;Renaming Control Spot +TP_LOCALLAB_REN_DIALOG_LAB;Geef de nieuwe Control Spot-naam +TP_LOCALLAB_REN_DIALOG_NAME;Hernoem Control Spot !TP_LOCALLAB_REPARCOL_TOOLTIP;Allows you to adjust the relative strength of the Color and Light image with respect to the original image. !TP_LOCALLAB_REPARDEN_TOOLTIP;Allows you to adjust the relative strength of the Denoise image with respect to the original image. !TP_LOCALLAB_REPAREXP_TOOLTIP;Allows you to adjust the relative strength of the Dynamic Range and Exposure image with respect to the original image. !TP_LOCALLAB_REPARSH_TOOLTIP;Allows you to adjust the relative strength of the Shadows/Highlights and Tone Equalizer image with respect to the original image. !TP_LOCALLAB_REPARTM_TOOLTIP;Allows you to adjust the relative strength of the Tone mapping image with respect to the original image. !TP_LOCALLAB_REPARW_TOOLTIP;Allows you to adjust the relative strength of the local contrast and wavelet image with respect to the original image. -!TP_LOCALLAB_RESID;Residual Image -!TP_LOCALLAB_RESIDBLUR;Blur residual image -!TP_LOCALLAB_RESIDCHRO;Residual image Chroma -!TP_LOCALLAB_RESIDCOMP;Compress residual image -!TP_LOCALLAB_RESIDCONT;Residual image Contrast -!TP_LOCALLAB_RESIDHI;Highlights -!TP_LOCALLAB_RESIDHITHR;Highlights threshold -!TP_LOCALLAB_RESIDSHA;Shadows -!TP_LOCALLAB_RESIDSHATHR;Shadows threshold -!TP_LOCALLAB_RETI;Dehaze & Retinex -!TP_LOCALLAB_RETIFRA;Retinex +TP_LOCALLAB_RESID;Residuele afbeelding +TP_LOCALLAB_RESIDBLUR;Vervaag residuele afbeelding +TP_LOCALLAB_RESIDCHRO;Residuele afbeelding Chroma +TP_LOCALLAB_RESIDCOMP;Comprimmeer Residuele afbeelding +TP_LOCALLAB_RESIDCONT;Residuele afbeelding Contrast +TP_LOCALLAB_RESIDHI;Hoge lichten +TP_LOCALLAB_RESIDHITHR;Drempel hoge lichten +TP_LOCALLAB_RESIDSHA;Schaduwen +TP_LOCALLAB_RESIDSHATHR;Drempel schaduwen +TP_LOCALLAB_RETI;Ontnevel & Retinex +TP_LOCALLAB_RETIFRA;Retinex !TP_LOCALLAB_RETIFRAME_TOOLTIP;Retinex can be useful for processing images: \nthat are blurred, foggy or hazy (in addition to Dehaze).\nthat contain large differences in luminance.\nIt can also be used for special effects (tone mapping). -!TP_LOCALLAB_RETIM;Original Retinex -!TP_LOCALLAB_RETITOOLFRA;Retinex Tools +TP_LOCALLAB_RETIM;Originele Retinex +TP_LOCALLAB_RETITOOLFRA;Retinex-gereedschappen !TP_LOCALLAB_RETI_LIGHTDARK_TOOLTIP;Has no effect when the value of 'Lightness = 1' or 'Darkness =2'.\nFor other values, the last step of a 'Multiple scale Retinex' algorithm (similar to 'local contrast') is applied. These 2 cursors, associated with 'Strength' allow you to make adjustments upstream of local contrast. !TP_LOCALLAB_RETI_LIMDOFFS_TOOLTIP;Adjusts the internal parameters to optimize the response.\nPreferable to keep the 'Restored data' values close to Min=0 and Max=32768 (log mode), but other values are possible. !TP_LOCALLAB_RETI_LOGLIN_TOOLTIP;Logarithm mode introduces more contrast but will also generate more halos. !TP_LOCALLAB_RETI_NEIGH_VART_TOOLTIP;The radius and variance sliders allow you adjust haze and target either the foreground or the background. !TP_LOCALLAB_RETI_SCALE_TOOLTIP;If Scale=1, Retinex behaves like local contrast with additional possibilities.\nIncreasing the value of Scale increases the intensity of the recursive action at the expense of processing time. -!TP_LOCALLAB_RET_TOOLNAME;Dehaze & Retinex -!TP_LOCALLAB_REWEI;Reweighting iterates -!TP_LOCALLAB_RGB;RGB Tone Curve +TP_LOCALLAB_RET_TOOLNAME;Ontnevel & Retinex +TP_LOCALLAB_REWEI;Herhaling herweging +TP_LOCALLAB_RGB;RGB-tooncurve !TP_LOCALLAB_RGBCURVE_TOOLTIP;In RGB mode you have 4 choices : Standard, Weighted standard, Luminance & Film-like. -!TP_LOCALLAB_ROW_NVIS;Not visible -!TP_LOCALLAB_ROW_VIS;Visible +TP_LOCALLAB_ROW_NVIS;Niet zichtbaar +TP_LOCALLAB_ROW_VIS;Zichtbaar !TP_LOCALLAB_RSTPROTECT_TOOLTIP;Red and skin-tone protection affects the Saturation, Chroma and Colorfulness sliders. -!TP_LOCALLAB_SATUR;Saturation -!TP_LOCALLAB_SATURV;Saturation (s) -!TP_LOCALLAB_SCALEGR;Scale -!TP_LOCALLAB_SCALERETI;Scale -!TP_LOCALLAB_SCALTM;Scale -!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_SENSI;Scope -!TP_LOCALLAB_SENSIEXCLU;Scope +TP_LOCALLAB_SATUR;Verzadiging +TP_LOCALLAB_SATURV;Verzadiging (s) +TP_LOCALLAB_SCALEGR;Schaal +TP_LOCALLAB_SCALERETI;Schaal +TP_LOCALLAB_SCALTM;Schaal +TP_LOCALLAB_bereikMASK;Bereik (ΔE beeldmasker) +!TP_LOCALLAB_bereikMASK_TOOLTIP;Enabled if ΔE Image Mask is enabled.\nLow values avoid retouching selected area. +TP_LOCALLAB_SENSI;Bereik +TP_LOCALLAB_SENSIEXCLU;Bereik !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_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 -!TP_LOCALLAB_SH2;Equalizer -!TP_LOCALLAB_SHADEX;Shadows -!TP_LOCALLAB_SHADEXCOMP;Shadow compression -!TP_LOCALLAB_SHADHIGH;Shadows/Highlights & Tone Equalizer +!TP_LOCALLAB_SENSIMASK_TOOLTIP;bereik 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 'bereik (ΔE image mask)' in 'Settings' > 'Mask and Merge'. +!TP_LOCALLAB_SENSI_TOOLTIP;Adjusts the bereik 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;Instellingen +TP_LOCALLAB_SH1;Schaduwen Hoge lichten +TP_LOCALLAB_SH2;Equalizer +TP_LOCALLAB_SHADEX;Schaduwen +TP_LOCALLAB_SHADEXCOMP;Schaduwcompressie +TP_LOCALLAB_SHADHIGH;Schaduwen/hoge lichten & Toonequalizer !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. !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_SHAMASKCOL;Schaduwen +TP_LOCALLAB_SHAPETYPE;Spot-vorm !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 -!TP_LOCALLAB_SHARDAMPING;Damping -!TP_LOCALLAB_SHARFRAME;Modifications -!TP_LOCALLAB_SHARITER;Iterations -!TP_LOCALLAB_SHARP;Sharpening -!TP_LOCALLAB_SHARP_TOOLNAME;Sharpening -!TP_LOCALLAB_SHARRADIUS;Radius -!TP_LOCALLAB_SHORTC;Short Curves 'L' Mask +TP_LOCALLAB_SHARAMOUNT;Hoeveelheid +TP_LOCALLAB_SHARBLUR;Vervagingsradius +TP_LOCALLAB_SHARDAMPING;Demping +TP_LOCALLAB_SHARFRAME;Modificaties +TP_LOCALLAB_SHARITER;Herhalingen +TP_LOCALLAB_SHARP;Schaduwen +TP_LOCALLAB_SHARP_TOOLNAME;Schaduwen +TP_LOCALLAB_SHARRADIUS;Straal +TP_LOCALLAB_SHORTC;Korte curves L-masker !TP_LOCALLAB_SHORTCMASK_TOOLTIP;Short circuit the 2 curves L(L) and L(H).\nAllows you to mix the current image with the original image modified by the mask job.\nUsable with masks 2, 3, 4, 6, 7. -!TP_LOCALLAB_SHOWC;Mask and modifications -!TP_LOCALLAB_SHOWC1;Merge file -!TP_LOCALLAB_SHOWCB;Mask and modifications -!TP_LOCALLAB_SHOWDCT;Show Fourier (ƒ) process -!TP_LOCALLAB_SHOWE;Mask and modifications -!TP_LOCALLAB_SHOWFOURIER;Fourier ƒ(dct) -!TP_LOCALLAB_SHOWLAPLACE;∆ Laplacian (first) -!TP_LOCALLAB_SHOWLC;Mask and modifications -!TP_LOCALLAB_SHOWMASK;Show mask +TP_LOCALLAB_SHOWC;Masker en modificaties +TP_LOCALLAB_SHOWC1;Voeg bestand samen +TP_LOCALLAB_SHOWCB;Masker en modificaties +TP_LOCALLAB_SHOWDCT;Toon Fourier (ƒ) proces +TP_LOCALLAB_SHOWE;Masker en modificaties +TP_LOCALLAB_SHOWFOURIER;Fourier ƒ(dct) +TP_LOCALLAB_SHOWLAPLACE;∆ Laplacian (eerste) +TP_LOCALLAB_SHOWLC;Masker en modificaties +TP_LOCALLAB_SHOWMASK;Toon masker !TP_LOCALLAB_SHOWMASKCOL_TOOLTIP;Displays masks and modifications.\nBeware, you can only view one tool mask at a time.\nShow modified image: shows the modified image including the effect of any adjustments and masks.\nShow modified areas without mask: shows the modifications before any masks are applied.\nShow modified areas with mask: shows the modifications after a mask has been applied.\nShow mask: shows the aspect of the mask including the effect of any curves and filters.\nShow spot structure: allows you to see the structure-detection mask when the 'Spot structure' cursor is activated (when available).\nNote: The mask is applied before the shape detection algorithm. !TP_LOCALLAB_SHOWMASKSOFT_TOOLTIP;Allows you to visualize the different stages of the Fourier process.\n Laplace - calculates the second derivative of the Laplace transform as a function of the threshold.\nFourier - shows the Laplacian transform with DCT.\nPoisson - shows the solution of the Poisson DCE.\nNo luminance normalization - shows result without any luminance normalization. -!TP_LOCALLAB_SHOWMASKTYP1;Blur & Noise -!TP_LOCALLAB_SHOWMASKTYP2;Denoise -!TP_LOCALLAB_SHOWMASKTYP3;Blur & Noise + Denoise -!TP_LOCALLAB_SHOWMASKTYP_TOOLTIP;Can be used with 'Mask and modifications'.\nIf 'Blur and noise' is selected, the mask cannot be used for Denoise.\nIf Denoise is selected, the mask cannot be used for 'Blur and noise'.\nIf 'Blur and noise + Denoise' is selected, the mask is shared. Note that in this case, the Scope sliders for both 'Blur and noise' and Denoise will be active so it is advisable to use the option 'Show modifications with mask' when making any adjustments. -!TP_LOCALLAB_SHOWMNONE;Show modified image -!TP_LOCALLAB_SHOWMODIF;Show modified areas without mask -!TP_LOCALLAB_SHOWMODIF2;Show modified areas -!TP_LOCALLAB_SHOWMODIFMASK;Show modified areas with mask -!TP_LOCALLAB_SHOWNORMAL;No luminance normalization -!TP_LOCALLAB_SHOWPLUS;Mask and modifications (Blur & Denoise) -!TP_LOCALLAB_SHOWPOISSON;Poisson (pde ƒ) -!TP_LOCALLAB_SHOWR;Mask and modifications -!TP_LOCALLAB_SHOWREF;Preview ΔE -!TP_LOCALLAB_SHOWS;Mask and modifications -!TP_LOCALLAB_SHOWSTRUC;Show spot structure(Advanced) -!TP_LOCALLAB_SHOWSTRUCEX;Show spot structure(Advanced) -!TP_LOCALLAB_SHOWT;Mask and modifications -!TP_LOCALLAB_SHOWVI;Mask and modifications -!TP_LOCALLAB_SHRESFRA;Shadows/Highlights & TRC +TP_LOCALLAB_SHOWMASKTYP1;Vervaging & Ruis +TP_LOCALLAB_SHOWMASKTYP2;Ruisvermindering +TP_LOCALLAB_SHOWMASKTYP3;Vervaging & Ruis + Ruisvermindering +!TP_LOCALLAB_SHOWMASKTYP_TOOLTIP;Can be used with 'Mask and modifications'.\nIf 'Blur and noise' is selected, the mask cannot be used for Denoise.\nIf Denoise is selected, the mask cannot be used for 'Blur and noise'.\nIf 'Blur and noise + Denoise' is selected, the mask is shared. Note that in this case, the bereik sliders for both 'Blur and noise' and Denoise will be active so it is advisable to use the option 'Show modifications with mask' when making any adjustments. +TP_LOCALLAB_SHOWMNONE;Toon gemodificeerde afbeelding +TP_LOCALLAB_SHOWMODIF;Toon gemodificeerde gebieden zonder masker +TP_LOCALLAB_SHOWMODIF2;Toon gemodificeerde gebieden +TP_LOCALLAB_SHOWMODIFMASK;Toon gemodificeerde gebieden met masker +TP_LOCALLAB_SHOWNORMAL;Geen luminantie-normalisatie +TP_LOCALLAB_SHOWPLUS;Masker en modificaties (Vervaging & Ruisvermindering) +TP_LOCALLAB_SHOWPOISSON;Poisson (pde ƒ) +TP_LOCALLAB_SHOWR;Masker en modificaties +TP_LOCALLAB_SHOWREF;Voorbeeld ΔE +TP_LOCALLAB_SHOWS;Masker en modificaties +TP_LOCALLAB_SHOWSTRUC;Toon spotstructuur (Geavanceerd) +TP_LOCALLAB_SHOWSTRUCEX;Toon spotstructuur (Geavanceerd) +TP_LOCALLAB_SHOWT;Masker en modificaties +TP_LOCALLAB_SHOWVI;Masker en modificaties +TP_LOCALLAB_SHRESFRA;Schaduwen/Hoge lichten & TRC !TP_LOCALLAB_SHTRC_TOOLTIP;Based on 'working profile' (only those provided), modifies the tones of the image by acting on a TRC (Tone Response Curve).\nGamma acts mainly on light tones.\nSlope acts mainly on dark tones.\nIt is recommended that the TRC of both devices (monitor and output profile) be sRGB (default). -!TP_LOCALLAB_SH_TOOLNAME;Shadows/Highlights & Tone Equalizer -!TP_LOCALLAB_SIGFRA;Sigmoid Q & Log encoding Q -!TP_LOCALLAB_SIGJZFRA;Sigmoid Jz -!TP_LOCALLAB_SIGMAWAV;Attenuation response -!TP_LOCALLAB_SIGMOIDBL;Blend -!TP_LOCALLAB_SIGMOIDLAMBDA;Contrast -!TP_LOCALLAB_SIGMOIDQJ;Uses Black Ev & White Ev -!TP_LOCALLAB_SIGMOIDTH;Threshold (Gray point) +TP_LOCALLAB_SH_TOOLNAME;Schaduwen/Hoge lichten & Toonequalizer +TP_LOCALLAB_SIGFRA;Sigmoid Q & Log-codering Q +TP_LOCALLAB_SIGJZFRA;Sigmoid Jz +TP_LOCALLAB_SIGMAWAV;Versterkingsrespons +TP_LOCALLAB_SIGMOIDBL;Samenvoegen +TP_LOCALLAB_SIGMOIDLAMBDA;Contrast +TP_LOCALLAB_SIGMOIDQJ;Gebruikt Zwart Ev & Wit Ev +TP_LOCALLAB_SIGMOIDTH;Drempel (Grijspunt) !TP_LOCALLAB_SIGMOID_TOOLTIP;Allows you to simulate a Tone-mapping appearance using both the'Ciecam' (or 'Jz') and 'Sigmoid' function.\nThree sliders: a) Contrast acts on the shape of the sigmoid curve and consequently on the strength; b) Threshold (Gray point) distributes the action according to the luminance; c)Blend acts on the final aspect of the image, contrast and luminance. -!TP_LOCALLAB_SLOMASKCOL;Slope +TP_LOCALLAB_SLOMASKCOL;Helling !TP_LOCALLAB_SLOMASK_TOOLTIP;Adjusting Gamma and Slope can provide a soft and artifact-free transformation of the mask by progressively modifying 'L' to avoid any discontinuities. -!TP_LOCALLAB_SLOSH;Slope -!TP_LOCALLAB_SOFT;Soft Light & Original Retinex -!TP_LOCALLAB_SOFTM;Soft Light +TP_LOCALLAB_SLOSH;Helling +TP_LOCALLAB_SOFT;Zacht licht & Originele Retinex +TP_LOCALLAB_SOFTM;Zacht licht !TP_LOCALLAB_SOFTMETHOD_TOOLTIP;Apply a Soft-light blend (identical to the global adjustment). Carry out dodge and burn using the original Retinex algorithm. -!TP_LOCALLAB_SOFTRADIUSCOL;Soft radius +TP_LOCALLAB_SOFTRADIUSCOL;Radius verzachting !TP_LOCALLAB_SOFTRADIUSCOL_TOOLTIP;Applies a guided filter to the output image to reduce possible artifacts. -!TP_LOCALLAB_SOFTRETI;Reduce ΔE artifacts -!TP_LOCALLAB_SOFT_TOOLNAME;Soft Light & Original Retinex -!TP_LOCALLAB_SOURCE_ABS;Absolute luminance -!TP_LOCALLAB_SOURCE_GRAY;Mean luminance (Yb%) -!TP_LOCALLAB_SPECCASE;Specific cases -!TP_LOCALLAB_SPECIAL;Special use of RGB curves -!TP_LOCALLAB_SPECIAL_TOOLTIP;The checkbox allows you to remove all other actions i.e. 'Scope', masks, sliders etc., (except for transitions) and use just the effect of the RGB tone-curve. -!TP_LOCALLAB_SPOTNAME;New Spot -!TP_LOCALLAB_STD;Standard -!TP_LOCALLAB_STR;Strength -!TP_LOCALLAB_STRBL;Strength -!TP_LOCALLAB_STREN;Compression strength -!TP_LOCALLAB_STRENG;Strength -!TP_LOCALLAB_STRENGR;Strength -!TP_LOCALLAB_STRENGRID_TOOLTIP;You can adjust the desired effect with 'strength', but you can also use the 'scope' function which allows you to delimit the action (e.g. to isolate a particular color). -!TP_LOCALLAB_STRENGTH;Noise -!TP_LOCALLAB_STRGRID;Strength -!TP_LOCALLAB_STRUC;Structure -!TP_LOCALLAB_STRUCCOL;Spot structure -!TP_LOCALLAB_STRUCCOL1;Spot structure +TP_LOCALLAB_SOFTRETI;Verminder ΔE-onregelmatgheden +TP_LOCALLAB_SOFT_TOOLNAME;Zacht licht & Originele Retinex +TP_LOCALLAB_SOURCE_ABS;Absolute luminantie +TP_LOCALLAB_SOURCE_GRAY;Gemiddelde luminantie (Yb%) +TP_LOCALLAB_SPECCASE;Specifieke gevallen +TP_LOCALLAB_SPECIAL;Speciaal gebruik van RGB-curven +!TP_LOCALLAB_SPECIAL_TOOLTIP;The checkbox allows you to remove all other actions i.e. 'bereik', masks, sliders etc., (except for transitions) and use just the effect of the RGB tone-curve. +TP_LOCALLAB_SPOTNAME;Nieuwe spot +TP_LOCALLAB_STD;Standaard +TP_LOCALLAB_STR;Kracht +TP_LOCALLAB_STRBL;Kracht +TP_LOCALLAB_STREN;Compressiesterkte +TP_LOCALLAB_STRENG;Kracht +TP_LOCALLAB_STRENGR;Kracht +!TP_LOCALLAB_STRENGRID_TOOLTIP;You can adjust the desired effect with 'strength', but you can also use the 'bereik' function which allows you to delimit the action (e.g. to isolate a particular color). +TP_LOCALLAB_STRENGTH;Ruis +TP_LOCALLAB_STRGRID;Kracht +TP_LOCALLAB_STRUC;Structuur +TP_LOCALLAB_STRUCCOL;Spotstructuur +TP_LOCALLAB_STRUCCOL1;Spotstructuur !TP_LOCALLAB_STRUCT_TOOLTIP;Uses the Sobel algorithm to take into account structure for shape detection.\nActivate 'Mask and modifications' > 'Show spot structure' (Advanced mode) to see a preview of the mask (without modifications).\n\nCan be used in conjunction with the Structure Mask, Blur Mask and 'Local contrast' (by wavelet level) to improve edge detection.\n\nEffects of adjustments using Lightness, Contrast, Chrominance, Exposure or other non-mask-related tools visible using either 'Show modified image' or 'Show modified areas with mask'. -!TP_LOCALLAB_STRUMASKCOL;Structure mask strength +TP_LOCALLAB_STRUMASKCOL;Kracht qstructuurmasker !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(Color & Light). !TP_LOCALLAB_STRUSTRMASK_TOOLTIP;Moderate use of this slider is recommended! -!TP_LOCALLAB_STYPE;Shape method +TP_LOCALLAB_STYPE;Vorm Shape methode !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_TARGET_GRAY;Mean luminance (Yb%) -!TP_LOCALLAB_THRES;Threshold structure -!TP_LOCALLAB_THRESDELTAE;ΔE scope threshold -!TP_LOCALLAB_THRESRETI;Threshold -!TP_LOCALLAB_THRESWAV;Balance threshold -!TP_LOCALLAB_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sig=%4 +TP_LOCALLAB_SYM;Symmetrisch (muis) +TP_LOCALLAB_SYMSL;Symmetrisch (muis + schuiven) +TP_LOCALLAB_TARGET_GRAY;Gemiddelde luminantie (Yb%) +TP_LOCALLAB_TE_PIVOT;Draaipunt (LW) +TP_LOCALLAB_THRES;Drempel structuur +TP_LOCALLAB_THRESDELTAE;Drempel ΔE-bereik +TP_LOCALLAB_THRESRETI;Drempel +TP_LOCALLAB_THRESWAV;Balansdrempel +TP_LOCALLAB_TLABEL;TM Min=%1 Max=%2 Gemiddeld=%3 Sig=%4 !TP_LOCALLAB_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nTm=Min TM=Max of Transmission Map.\nYou can normalize the results with the threshold slider. -!TP_LOCALLAB_TM;Tone Mapping -!TP_LOCALLAB_TM_MASK;Use transmission map +TP_LOCALLAB_TM;Toonmappen +TP_LOCALLAB_TM_MASK;Gebruik transmissiemap !TP_LOCALLAB_TONEMAPESTOP_TOOLTIP;This slider affects edge sensitivity.\n The greater the value, the more likely a change in contrast will be interpreted as an 'edge'.\n If set to zero the tone mapping will have an effect similar to unsharp masking. !TP_LOCALLAB_TONEMAPGAM_TOOLTIP;The Gamma slider shifts the tone-mapping effect towards either the shadows or the highlights. !TP_LOCALLAB_TONEMAPREWEI_TOOLTIP;In some cases tone mapping may result in a cartoonish appearance, and in some rare cases soft but wide halos may appear.\n Increasing the number of reweighting iterates will help fight some of these problems. !TP_LOCALLAB_TONEMAP_TOOLTIP;Same as the tone mapping tool in the main menu.\nThe main-menu tool must be deactivated if this tool is used. !TP_LOCALLAB_TONEMASCALE_TOOLTIP;This slider allows you to adjust the transition between 'local' and 'global' contrast.\nThe greater the value, the larger a detail needs to be for it to be boosted. -!TP_LOCALLAB_TONE_TOOLNAME;Tone Mapping -!TP_LOCALLAB_TOOLCOL;Structure mask as tool +TP_LOCALLAB_TONE_TOOLNAME;Toonmappen +TP_LOCALLAB_TOOLCOL;Structuurmasker als gereedschap !TP_LOCALLAB_TOOLCOLFRMASK_TOOLTIP;Allows you to modify the mask, if one exists. -!TP_LOCALLAB_TOOLMASK;Mask Tools -!TP_LOCALLAB_TOOLMASK_2;Wavelets +TP_LOCALLAB_TOOLMASK;Maskergereedschappen +TP_LOCALLAB_TOOLMASK_2;Wavelets !TP_LOCALLAB_TOOLMASK_TOOLTIP;Structure mask (slider) with the checkbox 'Structure mask as tool' checked: in this case a mask showing the structure will be generated after one or more of the 2 curves L(L) or LC(H) has been modified.\n Here, the 'Structure mask' behaves like the other Mask tools : Gamma, Slope, etc.\n It allows you to vary the action on the mask according to the structure of the image. -!TP_LOCALLAB_TRANSIT;Transition Gradient -!TP_LOCALLAB_TRANSITGRAD;Transition differentiation XY +TP_LOCALLAB_TRANSIT;Transitieverloop +TP_LOCALLAB_TRANSITGRAD;Transitie-differentiatie XY !TP_LOCALLAB_TRANSITGRAD_TOOLTIP;Allows you to vary the y-axis transition. -!TP_LOCALLAB_TRANSITVALUE;Transition value -!TP_LOCALLAB_TRANSITWEAK;Transition decay (linear-log) +TP_LOCALLAB_TRANSITVALUE;Transitiewaarde +TP_LOCALLAB_TRANSITWEAK;Transitieverval (lineair-log) !TP_LOCALLAB_TRANSITWEAK_TOOLTIP;Adjust transition decay function: 1 linear , 2 parabolic, 3 cubic up to ^25.\nCan be used in conjunction with very low transition values to reduce defects (CBDL, Wavelets, Color & Light). !TP_LOCALLAB_TRANSIT_TOOLTIP;Adjust smoothness of transition between affected and unaffected areas as a percentage of the 'radius'. -!TP_LOCALLAB_TRANSMISSIONGAIN;Transmission gain -!TP_LOCALLAB_TRANSMISSIONMAP;Transmission map +TP_LOCALLAB_TRANSMISSIONGAIN;Transmissieversterking +TP_LOCALLAB_TRANSMISSIONMAP;Transmissiemap !TP_LOCALLAB_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positive values (max).\nOrdinate: amplification or reduction.\nYou can adjust this curve to change the Transmission and reduce artifacts. -!TP_LOCALLAB_USEMASK;Laplacian -!TP_LOCALLAB_VART;Variance (contrast) -!TP_LOCALLAB_VIBRANCE;Vibrance & Warm/Cool +TP_LOCALLAB_USEMASK;Laplacian +TP_LOCALLAB_VART;Variantie (contrast) +TP_LOCALLAB_VIBRANCE;Levendigheid & Warm/Koel !TP_LOCALLAB_VIBRA_TOOLTIP;Adjusts vibrance (essentially the same as the global adjustment).\nCarries out the equivalent of a white-balance adjustment using a CIECAM algorithm. -!TP_LOCALLAB_VIB_TOOLNAME;Vibrance & Warm/Cool +TP_LOCALLAB_VIB_TOOLNAME;Levendigheid & Warm/Koel !TP_LOCALLAB_VIS_TOOLTIP;Click to show/hide selected Control Spot.\nCtrl+click to show/hide all Control Spot. -!TP_LOCALLAB_WARM;Warm/Cool & Color artifacts +TP_LOCALLAB_WARM;Warm/Koel & Kleuronregelmatigheden !TP_LOCALLAB_WARM_TOOLTIP;This slider uses the CIECAM algorithm and acts as a White Balance control to make the color temperature of the selected area warmer or cooler.\nIt can also reduce color artifacts in some cases. !TP_LOCALLAB_WASDEN_TOOLTIP;Luminance noise reduction: the left-hand side of the curve including the dark-gray/light-gray boundary corresponds to the first 3 levels 0, 1, 2 (fine detail). The right hand side of the curve corresponds to the coarser details (level 3, 4, 5, 6). !TP_LOCALLAB_WAT_BALTHRES_TOOLTIP;Balances the action within each level. @@ -3932,161 +4042,222 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_LOCALLAB_WAT_WAVLEVELBLUR_TOOLTIP;Allows you to adjust the maximum effect of blurring on the levels. !TP_LOCALLAB_WAT_WAVSHAPE_TOOLTIP;Low to high local contrast from left to right on the x-axis\nIncrease or decrease local contrast on the y-axis. !TP_LOCALLAB_WAT_WAVTM_TOOLTIP;The lower (negative) part compresses each level of decomposition creating a tone mapping effect.\nThe upper (positive) part attenuates the contrast by level.\nThe finest to coarsest levels of decomposition are from left to right on the x-axis. -!TP_LOCALLAB_WAV;Local contrast +TP_LOCALLAB_WAV;Lokaal contrast !TP_LOCALLAB_WAVBLUR_TOOLTIP;Allows you to blur each level of the decomposition, as well as the residual image. -!TP_LOCALLAB_WAVCOMP;Compression by level -!TP_LOCALLAB_WAVCOMPRE;Compression by level +TP_LOCALLAB_WAVCOMP;Compressie per niveau +TP_LOCALLAB_WAVCOMPRE;Compressie per niveau !TP_LOCALLAB_WAVCOMPRE_TOOLTIP;Allows you to apply tone mapping or reduce local contrast on individual levels.\nFine to coarse detail levels from left to right on the x-axis. !TP_LOCALLAB_WAVCOMP_TOOLTIP;Allows you to apply local contrast based on the direction of the wavelet decomposition : horizontal, vertical, diagonal. -!TP_LOCALLAB_WAVCON;Contrast by level +TP_LOCALLAB_WAVCON;Contrast per niveau !TP_LOCALLAB_WAVCONTF_TOOLTIP;Similar to Contrast By Detail Levels. Fine to coarse detail levels from left to right on the x-axis. -!TP_LOCALLAB_WAVDEN;Luminance denoise -!TP_LOCALLAB_WAVE;Wavelets -!TP_LOCALLAB_WAVEDG;Local contrast +TP_LOCALLAB_WAVDEN;Luminantie ruisvermindering +TP_LOCALLAB_WAVE;Wavelets +TP_LOCALLAB_WAVEDG;Lokaal contrast !TP_LOCALLAB_WAVEEDG_TOOLTIP;Improves sharpness by targeting the action of local contrast on the edges. It has the same functions as the corresponding module in Wavelet Levels and uses the same settings. !TP_LOCALLAB_WAVEMASK_LEVEL_TOOLTIP;Range of wavelet levels used in 'Local contrast' (by wavelet level). !TP_LOCALLAB_WAVGRAD_TOOLTIP;Allows the local contrast to be varied according to a chosen gradient and angle. The variation of the luminance signal is taken into account and not the luminance. !TP_LOCALLAB_WAVHUE_TOOLTIP;Allows you to reduce or increase the denoise based on hue. -!TP_LOCALLAB_WAVLEV;Blur by level -!TP_LOCALLAB_WAVMASK;Local contrast +TP_LOCALLAB_WAVLEV;Vervaag per niveau +TP_LOCALLAB_WAVMASK;Lokaal contrast !TP_LOCALLAB_WAVMASK_TOOLTIP;Uses wavelets to modify the local contrast of the mask and reinforce or reduce the structure (skin, buildings, etc.). -!TP_LOCALLAB_WEDIANHI;Median Hi -!TP_LOCALLAB_WHITE_EV;White Ev -!TP_LOCALLAB_ZCAMFRA;ZCAM Image Adjustments -!TP_LOCALLAB_ZCAMTHRES;Retrieve high datas -!TP_LOCAL_HEIGHT;Bottom -!TP_LOCAL_HEIGHT_T;Top -!TP_LOCAL_WIDTH;Right -!TP_LOCAL_WIDTH_L;Left +TP_LOCALLAB_WEDIANHI;Mediaan Hi +TP_LOCALLAB_WHITE_EV;Wit Ev +TP_LOCALLAB_ZCAMFRA;ZCAM Beeldaanpassingen +TP_LOCALLAB_ZCAMTHRES;Haal hoge data op +TP_LOCAL_HEIGHT;Onder +TP_LOCAL_HEIGHT_T;Boven +TP_LOCAL_WIDTH;Rechts +TP_LOCAL_WIDTH_L;Links !TP_LOCRETI_METHOD_TOOLTIP;Low = Reinforce low light.\nUniform = Evenly distributed.\nHigh = Reinforce strong light. -!TP_PERSPECTIVE_CAMERA_CROP_FACTOR;Crop factor -!TP_PERSPECTIVE_CAMERA_FOCAL_LENGTH;Focal length -!TP_PERSPECTIVE_CAMERA_FRAME;Correction -!TP_PERSPECTIVE_CAMERA_PITCH;Vertical -!TP_PERSPECTIVE_CAMERA_ROLL;Rotation -!TP_PERSPECTIVE_CAMERA_SHIFT_HORIZONTAL;Horizontal shift -!TP_PERSPECTIVE_CAMERA_SHIFT_VERTICAL;Vertical shift -!TP_PERSPECTIVE_CAMERA_YAW;Horizontal -!TP_PERSPECTIVE_CONTROL_LINES;Control lines +TP_PERSPECTIVE_CAMERA_CROP_FACTOR;Bijsnijdfactor +TP_PERSPECTIVE_CAMERA_FOCAL_LENGTH;Brandpuntsafstand +TP_PERSPECTIVE_CAMERA_FRAME;Correctie +TP_PERSPECTIVE_CAMERA_PITCH;Verticaal +TP_PERSPECTIVE_CAMERA_ROLL;Rotatie +TP_PERSPECTIVE_CAMERA_SHIFT_HORIZONTAL;Horizontale verschuiving +TP_PERSPECTIVE_CAMERA_SHIFT_VERTICAL;Verticale verschuiving +TP_PERSPECTIVE_CAMERA_YAW;Horizontaal +TP_PERSPECTIVE_CONTROL_LINES;Controlelijnen !TP_PERSPECTIVE_CONTROL_LINES_TOOLTIP;Ctrl+drag: Draw new line\nRight-click: Delete line !TP_PERSPECTIVE_CONTROL_LINE_APPLY_INVALID_TOOLTIP;At least two horizontal or two vertical control lines required. -!TP_PERSPECTIVE_METHOD;Method -!TP_PERSPECTIVE_METHOD_CAMERA_BASED;Camera-based -!TP_PERSPECTIVE_METHOD_SIMPLE;Simple -!TP_PERSPECTIVE_POST_CORRECTION_ADJUSTMENT_FRAME;Post-correction adjustment -!TP_PERSPECTIVE_PROJECTION_PITCH;Vertical -!TP_PERSPECTIVE_PROJECTION_ROTATE;Rotation -!TP_PERSPECTIVE_PROJECTION_SHIFT_HORIZONTAL;Horizontal shift -!TP_PERSPECTIVE_PROJECTION_SHIFT_VERTICAL;Vertical shift -!TP_PERSPECTIVE_PROJECTION_YAW;Horizontal -!TP_PERSPECTIVE_RECOVERY_FRAME;Recovery -!TP_PREPROCWB_LABEL;Preprocess White Balance -!TP_PREPROCWB_MODE;Mode -!TP_PREPROCWB_MODE_AUTO;Auto -!TP_PREPROCWB_MODE_CAMERA;Camera -!TP_RAW_AMAZEBILINEAR;AMaZE+Bilinear -!TP_RAW_DCBBILINEAR;DCB+Bilinear -!TP_RAW_PIXELSHIFTAVERAGE;Use average for moving parts +TP_PERSPECTIVE_METHOD;Methode +TP_PERSPECTIVE_METHOD_CAMERA_BASED;Camera-gebaseerd +TP_PERSPECTIVE_METHOD_SIMPLE;Simpel +TP_PERSPECTIVE_POST_CORRECTION_ADJUSTMENT_FRAME;Post-correctie aanpassingen +TP_PERSPECTIVE_PROJECTION_PITCH;Verticaal +TP_PERSPECTIVE_PROJECTION_ROTATE;Rotatie +TP_PERSPECTIVE_PROJECTION_SHIFT_HORIZONTAL;Horizontale verschuiving +TP_PERSPECTIVE_PROJECTION_SHIFT_VERTICAL;Verticale verschuiving +TP_PERSPECTIVE_PROJECTION_YAW;Horizontaal +TP_PERSPECTIVE_RECOVERY_FRAME;Herstel +TP_PREPROCWB_LABEL;Pre-proces witbalans +TP_PREPROCWB_MODE;Modus +TP_PREPROCWB_MODE_AUTO;Auto +TP_PREPROCWB_MODE_CAMERA;Camera +TP_RAW_AMAZEBILINEAR;AMaZE+Bilineair +TP_RAW_DCBBILINEAR;DCB+Bilineair +TP_RAW_PIXELSHIFTAVERAGE;Gebruik gemiddelde voor bewegende delen !TP_RAW_PIXELSHIFTAVERAGE_TOOLTIP;Use average of all frames instead of selected frame for regions with motion.\nGives motion effect on slow moving (overlapping) objects. -!TP_RAW_RCDBILINEAR;RCD+Bilinear -!TP_RESIZE_LE;Long Edge: -!TP_RESIZE_LONG;Long Edge -!TP_RESIZE_SE;Short Edge: -!TP_RESIZE_SHORT;Short Edge -!TP_SPOT_COUNTLABEL;%1 point(s) -!TP_SPOT_DEFAULT_SIZE;Default spot size -!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_WAVELET_BALCHROM;Equalizer Color -!TP_WAVELET_BALLUM;Denoise equalizer White-Black -!TP_WAVELET_BL;Blur levels -!TP_WAVELET_BLCURVE;Blur by levels -!TP_WAVELET_BLURFRAME;Blur -!TP_WAVELET_BLUWAV;Attenuation response -!TP_WAVELET_CHROFRAME;Denoise chrominance -!TP_WAVELET_CHROMAFRAME;Chroma -!TP_WAVELET_CHROMCO;Chrominance Coarse -!TP_WAVELET_CHROMFI;Chrominance Fine -!TP_WAVELET_CHRWAV;Blur chroma -!TP_WAVELET_CLA;Clarity -!TP_WAVELET_CLARI;Sharp-mask and Clarity -!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. -!TP_WAVELET_COMPNORMAL;Standard -!TP_WAVELET_CONTFRAME;Contrast - Compression -!TP_WAVELET_CURVEEDITOR_BL_TOOLTIP;Disabled if zoom > about 300%. -!TP_WAVELET_DAUBLOCAL;Wavelet Edge performance -!TP_WAVELET_DEN5THR;Guided threshold -!TP_WAVELET_DENCURV;Curve -!TP_WAVELET_DENL;Correction structure -!TP_WAVELET_DENLH;Guided threshold levels 1-4 +TP_RAW_RCDBILINEAR;RCD+Bilineair +TP_RESIZE_LE;Lange zijde: +TP_RESIZE_LONG;Korte zijde +TP_RESIZE_SE;Korte zijde: +TP_RESIZE_SHORT;Korte zijde +TP_SPOT_COUNTLABEL;%1 punt(en) +TP_SPOT_DEFAULT_SIZE;Standaard spot-grootte +TP_SPOT_ENTRYCHANGED;Punt veranderd +TP_SPOT_HINT;Klik op deze button... 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;Verwijder vlekken +TP_TONE_EQUALIZER_BANDS;Banden +TP_TONE_EQUALIZER_BAND_0;Zwarten +TP_TONE_EQUALIZER_BAND_1;Schaduwen +TP_TONE_EQUALIZER_BAND_2;Middentonen +TP_TONE_EQUALIZER_BAND_3;Hoge lichten +TP_TONE_EQUALIZER_BAND_4;Witten +TP_TONE_EQUALIZER_DETAIL;Fijnafstemming +TP_TONE_EQUALIZER_LABEL;Toonequalizer +TP_TONE_EQUALIZER_PIVOT;Draaipunt (LW) +TP_TONE_EQUALIZER_SHOW_COLOR_MAP;Toon kleurenmap +TP_WAVELET_BALCHROM;Equalizer kleur +TP_WAVELET_BALLUM;Ruisonderdrukkings-equalizer wit-zwart +TP_WAVELET_BL;Vervagingsniveaus +TP_WAVELET_BLCURVE;Vervaag per niveau +TP_WAVELET_BLURFRAME;Vervaag +TP_WAVELET_BLUWAV;Versterkingsrespons +TP_WAVELET_CHROFRAME;Vervaag chrominantie +TP_WAVELET_CHROMAFRAME;Chroma +TP_WAVELET_CHROMCO;Chrominantie grof +TP_WAVELET_CHROMFI;Chrominantie fijn +TP_WAVELET_CHRWAV;Vervaging chroma +TP_WAVELET_CLA;Klaarheid (Clarity) +TP_WAVELET_CLARI;Scherptemasker en Clarity +TP_WAVELET_COMPEXPERT;Geavanceerd +TP_WAVELET_COMPLEXLAB;Complexiteit +TP_WAVELET_COMPLEX_TOOLTIP;Standaard: toont... shows a reduced set of tools suitable for most processing operations.\nAdvanced: shows the complete set of tools for advanced processing operations. +TP_WAVELET_COMPNORMAL;Standaard +TP_WAVELET_CONTFRAME;Contrast - Compressie +TP_WAVELET_CURVEEDITOR_BL_TOOLTIP;Uitgeschakeld als zoom > ~300% +TP_WAVELET_DAUBLOCAL;Wavelet Rand-performance +TP_WAVELET_DEN5THR;Begeleid drempel +TP_WAVELET_DENCURV;Curve +TP_WAVELET_DENL;Correctie structuur +TP_WAVELET_DENLH;Begeleid drempel niveaus 1-4 !TP_WAVELET_DENLOCAL_TOOLTIP;Use a curve in order to guide the denoising according to the local contrast.\nThe areas are denoised, the structures are maintained. !TP_WAVELET_DENMIX_TOOLTIP;The local-contrast reference value used by the guided filter.\nDepending on the image, results can vary depending on whether the noise is measured before or after the noise reduction. These four choices allow you to take into account various combinations of the original and modified (denoised) images to find the best compromise. -!TP_WAVELET_DENOISE;Guide curve based on Local contrast -!TP_WAVELET_DENOISEGUID;Guided threshold based on hue -!TP_WAVELET_DENOISEH;High levels Curve Local contrast -!TP_WAVELET_DENOISEHUE;Denoise hue equalizer -!TP_WAVELET_DENQUA;Mode -!TP_WAVELET_DENSIGMA_TOOLTIP;Adapts the shape of the guide. -!TP_WAVELET_DENSLI;Slider -!TP_WAVELET_DENSLILAB;Method -!TP_WAVELET_DENWAVGUID_TOOLTIP;Uses hue to reduce or increase the action of the guided filter. -!TP_WAVELET_DENWAVHUE_TOOLTIP;Amplify or reduce denoising depending on the color. -!TP_WAVELET_DETEND;Details -!TP_WAVELET_DIRFRAME;Directional contrast -!TP_WAVELET_EDEFFECT;Attenuation response +TP_WAVELET_DENOISE;Gids curve gebaseerd op Lokaal contrast +TP_WAVELET_DENOISEGUID;Begeleide drempel gebaseerd op tint +TP_WAVELET_DENOISEH;Hoge niveaus curve Lokaal contrast +TP_WAVELET_DENOISEHUE;Ruisonderdrukking Tint-equalizer +TP_WAVELET_DENQUA;Modus +TP_WAVELET_DENSIGMA_TOOLTIP;Wijzigt de vorm van de gids +TP_WAVELET_DENSLI;Schuif +TP_WAVELET_DENSLILAB;Methode +TP_WAVELET_DENWAVGUID_TOOLTIP;Gebruikt tint om de actie van het begeleid filter te verminderen of te vermeerderen +TP_WAVELET_DENWAVHUE_TOOLTIP;Versterk of verminder ruisvermindering afhankelijk van de kleur +TP_WAVELET_DETEND;Details +TP_WAVELET_DIRFRAME;Directioneel contrast +TP_WAVELET_EDEFFECT;Versterkingsrespons !TP_WAVELET_EDEFFECT_TOOLTIP;This slider selects the range of contrast values that will receive the full effect of any adjustment. -!TP_WAVELET_FINCFRAME;Final local contrast +TP_WAVELET_FINCFRAME;Finaal lokaal contrast !TP_WAVELET_FINTHR_TOOLTIP;Uses local contrast to reduce or increase the action of the guided filter. -!TP_WAVELET_GUIDFRAME;Final smoothing (guided filter) -!TP_WAVELET_LABGRID_VALUES;High(a)=%1 High(b)=%2\nLow(a)=%3 Low(b)=%4 -!TP_WAVELET_LEVDEN;Level 5-6 denoise -!TP_WAVELET_LEVELHIGH;Radius 5-6 -!TP_WAVELET_LEVELLOW;Radius 1-4 -!TP_WAVELET_LEVELSIGM;Radius -!TP_WAVELET_LEVFOUR;Level 5-6 denoise and guided threshold -!TP_WAVELET_LIMDEN;Interaction levels 5-6 on levels 1-4 -!TP_WAVELET_LOWTHR_TOOLTIP;Prevents amplification of fine textures and noise. -!TP_WAVELET_MERGEC;Merge chroma -!TP_WAVELET_MERGEL;Merge luma -!TP_WAVELET_MIXCONTRAST;Reference -!TP_WAVELET_MIXDENOISE;Denoise -!TP_WAVELET_MIXMIX;Mixed 50% noise - 50% denoise -!TP_WAVELET_MIXMIX70;Mixed 30% noise - 70% denoise -!TP_WAVELET_MIXNOISE;Noise +TP_WAVELET_GUIDFRAME;Uiteindelijke verzachting (begeleid filter) +TP_WAVELET_LABGRID_VALUES;Hoog(a)=%1 Hoog(b)=%2\nLaag(a)=%3 Laag(b)=%4 +TP_WAVELET_LEVDEN;Niveau 5-6 ruisvermindering +TP_WAVELET_LEVELHIGH;Straal 5-6 +TP_WAVELET_LEVELLOW;Straal 1-4 +TP_WAVELET_LEVELSIGM;Straal +TP_WAVELET_LEVFOUR;Niveau 5-6 ruisvermindering en begeleide drempel +TP_WAVELET_LIMDEN;Interactie niveaus 5-6 op niveaus 1-4 +TP_WAVELET_LOWTHR_TOOLTIP;Voorkomt versterking van fijne texturen en ruis +TP_WAVELET_MERGEC;Meng chroma +TP_WAVELET_MERGEL;Meng luma +TP_WAVELET_MIXCONTRAST;Referentie +TP_WAVELET_MIXDENOISE;Ruisvermindering +TP_WAVELET_MIXMIX;Gemengd 50% ruis - 50% ruisvermindering +TP_WAVELET_MIXMIX70;Gemengd 30% ruis - 70% ruisvermindering +TP_WAVELET_MIXNOISE;Ruis !TP_WAVELET_OFFSET_TOOLTIP;Offset modifies the balance between low contrast and high contrast details.\nHigh values will amplify contrast changes to the higher contrast details, whereas low values will amplify contrast changes to low contrast details.\nBy using a low Attenuation response value you can select which contrast values will be enhanced. -!TP_WAVELET_OLDSH;Algorithm using negatives values -!TP_WAVELET_PROTAB;Protection -!TP_WAVELET_QUAAGRES;Aggressive -!TP_WAVELET_QUACONSER;Conservative -!TP_WAVELET_RADIUS;Radius shadows - highlight -!TP_WAVELET_RANGEAB;Range a and b % -!TP_WAVELET_RESBLUR;Blur luminance -!TP_WAVELET_RESBLURC;Blur chroma -!TP_WAVELET_RESBLUR_TOOLTIP;Disabled if zoom > about 500%. -!TP_WAVELET_SHA;Sharp mask -!TP_WAVELET_SHFRAME;Shadows/Highlights -!TP_WAVELET_SHOWMASK;Show wavelet 'mask' -!TP_WAVELET_SIGM;Radius -!TP_WAVELET_SIGMA;Attenuation response -!TP_WAVELET_SIGMAFIN;Attenuation response +TP_WAVELET_OLDSH;Algoritme met negatieve waarden +TP_WAVELET_PROTAB;Bescherming +TP_WAVELET_QUAAGRES;Agressief +TP_WAVELET_QUACONSER;Conservatief +TP_WAVELET_RADIUS;Straal schaduwen - hoge lichten +TP_WAVELET_RANGEAB;Reeks a en b % +TP_WAVELET_RESBLUR;Vervaging luminantie +TP_WAVELET_RESBLURC;Vervaging chroma +TP_WAVELET_RESBLUR_TOOLTIP;Uitgeschakeld als zoom > ~500% +TP_WAVELET_SHA;Scherptemasker +TP_WAVELET_SHFRAME;Schaduwen/hoge lichten +TP_WAVELET_SHOWMASK;Toon wavelet-masker +TP_WAVELET_SIGM;Straal +TP_WAVELET_SIGMA;Verzwakkingsrespons +TP_WAVELET_SIGMAFIN;Verzwakkingsrespons !TP_WAVELET_SIGMA_TOOLTIP;The effect of the contrast sliders is stronger in medium contrast details, and weaker in high and low contrast details.\n With this slider you can control how quickly the effect dampens towards the extreme contrasts.\n The higher the slider is set, the wider the range of contrasts which will get a strong change, and the higher the risk to generate artifacts.\n .The lower it is, the more the effect will be pinpointed towards a narrow range of contrast values. -!TP_WAVELET_SOFTRAD;Soft radius -!TP_WAVELET_STREND;Strength +TP_WAVELET_SOFTRAD;Verzachtingsstraal +TP_WAVELET_STREND;Kracht !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_WAVELET_TMEDGS;Edge stopping -!TP_WAVELET_TMSCALE;Scale -!TP_WAVELET_TONFRAME;Excluded colors -!TP_WAVELET_USH;None -!TP_WAVELET_USHARP;Clarity method +TP_WAVELET_THREND;Drempel lokaal contrast +TP_WAVELET_TMEDGS;Edge stopping +TP_WAVELET_TMSCALE;Schaal +TP_WAVELET_TONFRAME;Uitgesloten kleuren +TP_WAVELET_USH;Geen +TP_WAVELET_USHARP;'Clarity'-methode !TP_WAVELET_USH_TOOLTIP;If you select Sharp-mask, you can choose any level (in Settings) from 1 to 4 for processing.\nIf you select Clarity, you can choose any level (in Settings) between 5 and Extra. -!TP_WAVELET_WAVLOWTHR;Low contrast threshold -!TP_WAVELET_WAVOFFSET;Offset -!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_WAVELET_WAVLOWTHR;Laag contrast drempel +TP_WAVELET_WAVOFFSET;Verschuiving +TP_WBALANCE_AUTOITCGREEN;Temperatuurcorrelatie +TP_WBALANCE_AUTOOLD;RGB grijs +TP_WBALANCE_AUTO_HEADER;Automatisch & Verfijning +!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;Verwijder 2-pas algoritme +TP_WBALANCE_ITCWB_CUSTOM;Gebruik aangepaste temperatuur & tint +TP_WBALANCE_ITCWB_DELTA;Delta temperatuur in groene lus +TP_WBALANCE_ITCWB_FGREEN;Vind groene student +TP_WBALANCE_ITCWB_FORCED;Dichtbij volledig CIE-diagram +TP_WBALANCE_ITCWB_FRA;Autom. instellingen temperatuurcorrelatie +!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 minimumgrootte +TP_WBALANCE_ITCWB_NOPURPLE;Filter op paars +TP_WBALANCE_ITCWB_PRECIS;Precisie-algoritme - schaal gebruikt +TP_WBALANCE_ITCWB_PRIM_ACE;Forceer gebruik van het gehele CIE-diagram +TP_WBALANCE_ITCWB_PRIM_ADOB;Medium sampling +TP_WBALANCE_ITCWB_PRIM_BETA;Medium sampling - nabij Pointer's kleurenscala +TP_WBALANCE_ITCWB_PRIM_JDCMAX;Nabij volledig CIE-diagram +TP_WBALANCE_ITCWB_PRIM_REC;Hoge sampling +TP_WBALANCE_ITCWB_PRIM_SRGB;Lage sampling & Gebruik geen camera-instellingen +TP_WBALANCE_ITCWB_PRIM_XYZCAM;Camera XYZ-matrix +TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax na camera XYZ-matrix +TP_WBALANCE_ITCWB_RGREEN;Groen bereik +TP_WBALANCE_ITCWB_SAMPLING;Lage sampling 5,9 +TP_WBALANCE_ITCWB_SIZE;Grootte ref.kleur vergelijk met histogram +TP_WBALANCE_ITCWB_SIZEPATCH;Grootte kleur-patch +TP_WBALANCE_ITCWB_THRES;Kleuren gebruikt in afbeelding (voorinstelling) +!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;Groen verfijning +!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;Vermenigvuldigers: r=%1 g=%2 b=%3 +!TP_WBALANCE_MULLABEL_TOOLTIP;Values given for information purposes. You cannot change them. +TP_WBALANCE_OBSERVER10;Observer 10° in plaats van 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;Lees kleuren:%1 Patch: Chroma:%2 Grootte=%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 - data 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;Correlatiefactor: %1 Doorgangen:%2 Slechtst=%3 +TP_WBALANCE_STUDLABEL0;Correlatiefactor: %1 Doorgangen:%2 Alt=%3 +TP_WBALANCE_STUDLABEL1;Correlatiefactor: %1 Doorgangen:%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. + diff --git a/rtdata/languages/Polish b/rtdata/languages/Polish index 06ed63aba..94df4424f 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 @@ -2718,21 +2729,26 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_COMPLEX;Wavelet complexity !HISTORY_MSG_COMPLEXRETI;Retinex complexity !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation +!HISTORY_MSG_DIRPYRDENOISE_GAIN;NR - Compensate for lightness !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 +2763,9 @@ 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_LOCAL_TMO_SATUR;Local Exp Fattal Saturation !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 +2796,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 +2839,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;Green 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 Threshold !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 +2886,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 +2899,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 +2917,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 +2949,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 +3003,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 +3028,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. @@ -2963,6 +3053,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO;Preview noise: Mean=%1 High=%2 !TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO_EMPTY;Preview noise: Mean= - High= - !TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_TILEINFO;Tile size=%1, Center: Tx=%2 Ty=%3 +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN;Compensate for lightness +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN_TOOLTIP;Alter the noise reduction strength based on the image lightness. Strength is reduced for dark images and increased for bright images. !TP_DIRPYRDENOISE_MEDIAN_METHOD_WEIGHTED;Weighted L* (little) + a*b* (normal) !TP_DIRPYRDENOISE_MEDIAN_PASSES_TOOLTIP;Applying three median filter iterations with a 3×3 window size often leads to better results than using one median filter iteration with a 7×7 window size. !TP_DIRPYRDENOISE_MEDIAN_TYPE_TOOLTIP;Apply a median filter of the desired window size. The larger the window's size, the longer it takes.\n\n3×3 soft: treats 5 pixels in a 3×3 pixel window.\n3×3: treats 9 pixels in a 3×3 pixel window.\n5×5 soft: treats 13 pixels in a 5×5 pixel window.\n5×5: treats 25 pixels in a 5×5 pixel window.\n7×7: treats 49 pixels in a 7×7 pixel window.\n9×9: treats 81 pixels in a 9×9 pixel window.\n\nSometimes it is possible to achieve higher quality running several iterations with a smaller window size than one iteration with a larger one. @@ -2978,11 +3070,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 +3087,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 +3127,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 +3148,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 +3174,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 +3207,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 +3235,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 +3270,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 +3298,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 +3342,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 +3350,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 @@ -3261,6 +3364,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_LOCALLAB_FATFRA;Dynamic Range Compression ƒ !TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal – uses the Fattal Tone-mapping algorithm. !TP_LOCALLAB_FATLEVEL;Sigma +!TP_LOCALLAB_FATSAT;Saturation control !TP_LOCALLAB_FATSHFRA;Dynamic Range Compression Mask ƒ !TP_LOCALLAB_FEATH_TOOLTIP;Gradient width as a percentage of the Spot diagonal\nUsed by all graduated filters in all tools.\nNo action if a graduated filter hasn't been activated. !TP_LOCALLAB_FEATVALUE;Feather gradient (Grad. Filters) @@ -3279,6 +3383,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 +3476,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 +3538,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 +3576,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 +3601,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 +3651,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 +3744,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 +3756,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 +3845,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 +4040,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 +4202,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 & 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_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..77ffcaf40 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;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 - 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 @@ -2918,18 +2929,23 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !HISTORY_MSG_COMPLEX;Wavelet complexity !HISTORY_MSG_COMPLEXRETI;Retinex complexity !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation +!HISTORY_MSG_DIRPYRDENOISE_GAIN;NR - Compensate for lightness !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 +2954,9 @@ 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_LOCAL_TMO_SATUR;Local Exp Fattal Saturation !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 +2986,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 +3030,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;Green 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 Threshold !ICCPROFCREATOR_ILL_63;D63 : DCI-P3 Theater !ICCPROFCREATOR_PRIM_DCIP3;DCI-P3 !INSPECTOR_WINDOW_TITLE;Inspector @@ -3013,11 +3054,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 +3074,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 +3120,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 +3141,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,12 +3164,15 @@ 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. !TP_CROP_GTCENTEREDSQUARE;Centered square !TP_CROP_PPI;PPI !TP_DEHAZE_SATURATION;Saturation +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN;Compensate for lightness +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN_TOOLTIP;Alter the noise reduction strength based on the image lightness. Strength is reduced for dark images and increased for bright images. !TP_FILMNEGATIVE_BLUE;Blue ratio !TP_FILMNEGATIVE_BLUEBALANCE;Cool/Warm !TP_FILMNEGATIVE_COLORSPACE;Inversion color space: @@ -3093,12 +3185,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 +3233,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 +3260,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 +3286,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 +3319,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 +3347,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 +3382,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 +3410,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 +3454,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 +3462,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 @@ -3373,6 +3476,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !TP_LOCALLAB_FATFRA;Dynamic Range Compression ƒ !TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal – uses the Fattal Tone-mapping algorithm. !TP_LOCALLAB_FATLEVEL;Sigma +!TP_LOCALLAB_FATSAT;Saturation control !TP_LOCALLAB_FATSHFRA;Dynamic Range Compression Mask ƒ !TP_LOCALLAB_FEATH_TOOLTIP;Gradient width as a percentage of the Spot diagonal\nUsed by all graduated filters in all tools.\nNo action if a graduated filter hasn't been activated. !TP_LOCALLAB_FEATVALUE;Feather gradient (Grad. Filters) @@ -3391,6 +3495,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 +3588,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 +3650,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 +3688,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 +3713,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 +3763,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 +3856,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 +3868,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 +3957,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 +4092,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 +4191,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 & 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_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..c22207212 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;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 - 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 @@ -2925,18 +2936,23 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !HISTORY_MSG_COMPLEX;Wavelet complexity !HISTORY_MSG_COMPLEXRETI;Retinex complexity !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation +!HISTORY_MSG_DIRPYRDENOISE_GAIN;NR - Compensate for lightness !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 +2961,9 @@ 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_LOCAL_TMO_SATUR;Local Exp Fattal Saturation !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 +2993,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 +3037,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;Green 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 Threshold !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 +3080,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 +3143,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 +3166,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. @@ -3085,6 +3175,8 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_CROP_GTCENTEREDSQUARE;Centered square !TP_CROP_PPI;PPI !TP_DEHAZE_SATURATION;Saturation +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN;Compensate for lightness +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN_TOOLTIP;Alter the noise reduction strength based on the image lightness. Strength is reduced for dark images and increased for bright images. !TP_FILMNEGATIVE_BLUEBALANCE;Cool/Warm !TP_FILMNEGATIVE_COLORSPACE;Inversion color space: !TP_FILMNEGATIVE_COLORSPACE_INPUT;Input color space @@ -3095,11 +3187,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 +3234,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 +3258,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 +3284,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 +3317,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 +3345,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 +3380,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 +3408,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 +3452,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 +3460,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 @@ -3371,6 +3474,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_LOCALLAB_FATFRA;Dynamic Range Compression ƒ !TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal – uses the Fattal Tone-mapping algorithm. !TP_LOCALLAB_FATLEVEL;Sigma +!TP_LOCALLAB_FATSAT;Saturation control !TP_LOCALLAB_FATSHFRA;Dynamic Range Compression Mask ƒ !TP_LOCALLAB_FEATH_TOOLTIP;Gradient width as a percentage of the Spot diagonal\nUsed by all graduated filters in all tools.\nNo action if a graduated filter hasn't been activated. !TP_LOCALLAB_FEATVALUE;Feather gradient (Grad. Filters) @@ -3389,6 +3493,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 +3586,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 +3648,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 +3686,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 +3711,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 +3761,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 +3854,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 +3866,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 +3955,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 +4093,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 +4192,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 & 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_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..74a08f2d3 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;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 - 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 @@ -2359,20 +2370,25 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_COMPLEX;Wavelet complexity !HISTORY_MSG_COMPLEXRETI;Retinex complexity !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation +!HISTORY_MSG_DIRPYRDENOISE_GAIN;NR - Compensate for lightness !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 +2403,9 @@ 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_LOCAL_TMO_SATUR;Local Exp Fattal Saturation !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 +2447,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 +2491,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;Green 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 Threshold !ICCPROFCREATOR_COPYRIGHT;Copyright: !ICCPROFCREATOR_COPYRIGHT_RESET_TOOLTIP;Reset to the default copyright, granted to 'RawTherapee, CC0'. !ICCPROFCREATOR_CUSTOM;Custom @@ -2526,6 +2567,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 +2580,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 +2610,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 +2650,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 +2689,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 +2721,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 +2773,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. @@ -2762,6 +2852,8 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO;Preview noise: Mean=%1 High=%2 !TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO_EMPTY;Preview noise: Mean= - High= - !TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_TILEINFO;Tile size=%1, Center: Tx=%2 Ty=%3 +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN;Compensate for lightness +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN_TOOLTIP;Alter the noise reduction strength based on the image lightness. Strength is reduced for dark images and increased for bright images. !TP_DIRPYRDENOISE_MEDIAN_METHOD;Median method !TP_DIRPYRDENOISE_MEDIAN_METHOD_CHROMINANCE;Chroma only !TP_DIRPYRDENOISE_MEDIAN_METHOD_LABEL;Median Filter @@ -2794,14 +2886,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 +2907,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 +2948,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 +2981,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 +3007,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 +3040,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 +3068,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 +3103,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 +3131,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 +3175,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 +3183,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 @@ -3094,6 +3197,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_LOCALLAB_FATFRA;Dynamic Range Compression ƒ !TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal – uses the Fattal Tone-mapping algorithm. !TP_LOCALLAB_FATLEVEL;Sigma +!TP_LOCALLAB_FATSAT;Saturation control !TP_LOCALLAB_FATSHFRA;Dynamic Range Compression Mask ƒ !TP_LOCALLAB_FEATH_TOOLTIP;Gradient width as a percentage of the Spot diagonal\nUsed by all graduated filters in all tools.\nNo action if a graduated filter hasn't been activated. !TP_LOCALLAB_FEATVALUE;Feather gradient (Grad. Filters) @@ -3112,6 +3216,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 +3309,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 +3371,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 +3409,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 +3434,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 +3484,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 +3577,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 +3589,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 +3678,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 +3938,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 +4197,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 & 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_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..1cf1086bf 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;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 - 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 @@ -2167,21 +2177,26 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation !HISTORY_MSG_DEHAZE_SHOW_DEPTH_MAP;Dehaze - Show depth map !HISTORY_MSG_DEHAZE_STRENGTH;Dehaze - Strength +!HISTORY_MSG_DIRPYRDENOISE_GAIN;NR - Compensate for lightness !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 +2216,9 @@ 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_LOCAL_TMO_SATUR;Local Exp Fattal Saturation !HISTORY_MSG_METADATA_MODE;Metadata copy mode !HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold @@ -2246,6 +2264,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 +2308,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;Green 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 Threshold !ICCPROFCREATOR_COPYRIGHT;Copyright: !ICCPROFCREATOR_COPYRIGHT_RESET_TOOLTIP;Reset to the default copyright, granted to 'RawTherapee, CC0'. !ICCPROFCREATOR_CUSTOM;Custom @@ -2387,6 +2427,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 +2447,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 +2461,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 +2497,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 +2511,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 +2552,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 +2600,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 +2638,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 +2665,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. @@ -2670,6 +2759,8 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_DIRPYRDENOISE_LUMINANCE_CONTROL;Luminance control !TP_DIRPYRDENOISE_LUMINANCE_CURVE;Luminance curve !TP_DIRPYRDENOISE_LUMINANCE_FRAME;Luminance +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN;Compensate for lightness +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN_TOOLTIP;Alter the noise reduction strength based on the image lightness. Strength is reduced for dark images and increased for bright images. !TP_DIRPYRDENOISE_MAIN_COLORSPACE_LAB;L*a*b* !TP_DIRPYRDENOISE_MAIN_MODE;Mode !TP_DIRPYRDENOISE_MAIN_MODE_AGGRESSIVE;Aggressive @@ -2722,9 +2813,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 +2825,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 +2838,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 +2880,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 +2922,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 +2948,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 +2981,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 +3009,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 +3044,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 +3072,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 +3116,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 +3124,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 @@ -3036,6 +3138,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_LOCALLAB_FATFRA;Dynamic Range Compression ƒ !TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal – uses the Fattal Tone-mapping algorithm. !TP_LOCALLAB_FATLEVEL;Sigma +!TP_LOCALLAB_FATSAT;Saturation control !TP_LOCALLAB_FATSHFRA;Dynamic Range Compression Mask ƒ !TP_LOCALLAB_FEATH_TOOLTIP;Gradient width as a percentage of the Spot diagonal\nUsed by all graduated filters in all tools.\nNo action if a graduated filter hasn't been activated. !TP_LOCALLAB_FEATVALUE;Feather gradient (Grad. Filters) @@ -3054,6 +3157,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 +3250,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 +3312,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 +3350,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 +3375,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 +3425,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 +3518,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 +3530,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 +3619,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 +3928,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 +4189,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 & 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_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..84ea9e72e 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;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 - 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 @@ -2951,16 +2962,21 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !HISTORY_MSG_COMPLEX;Wavelet complexity !HISTORY_MSG_COMPLEXRETI;Retinex complexity !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation +!HISTORY_MSG_DIRPYRDENOISE_GAIN;NR - Compensate for lightness !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 +2985,9 @@ 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_LOCAL_TMO_SATUR;Local Exp Fattal Saturation !HISTORY_MSG_PDSHARPEN_CHECKITER;CS - Auto limit iterations !HISTORY_MSG_PERSP_CAM_ANGLE;Perspective - Camera !HISTORY_MSG_PERSP_CAM_FL;Perspective - Camera @@ -2992,6 +3011,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 +3055,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;Green 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 Threshold !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 +3096,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 +3156,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,11 +3179,14 @@ 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. !TP_CROP_GTCENTEREDSQUARE;Centered square !TP_DEHAZE_SATURATION;Saturation +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN;Compensate for lightness +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN_TOOLTIP;Alter the noise reduction strength based on the image lightness. Strength is reduced for dark images and increased for bright images. !TP_FILMNEGATIVE_BLUEBALANCE;Cool/Warm !TP_FILMNEGATIVE_COLORSPACE;Inversion color space: !TP_FILMNEGATIVE_COLORSPACE_INPUT;Input color space @@ -3102,11 +3194,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 +3241,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 +3263,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 +3289,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 +3322,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 +3350,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 +3385,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 +3413,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 +3457,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 +3465,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 @@ -3376,6 +3479,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !TP_LOCALLAB_FATFRA;Dynamic Range Compression ƒ !TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal – uses the Fattal Tone-mapping algorithm. !TP_LOCALLAB_FATLEVEL;Sigma +!TP_LOCALLAB_FATSAT;Saturation control !TP_LOCALLAB_FATSHFRA;Dynamic Range Compression Mask ƒ !TP_LOCALLAB_FEATH_TOOLTIP;Gradient width as a percentage of the Spot diagonal\nUsed by all graduated filters in all tools.\nNo action if a graduated filter hasn't been activated. !TP_LOCALLAB_FEATVALUE;Feather gradient (Grad. Filters) @@ -3394,6 +3498,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 +3591,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 +3653,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 +3691,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 +3716,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 +3766,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 +3859,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 +3871,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 +3960,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 +4091,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 +4190,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 & 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_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..0ff9f831f 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;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 - 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 @@ -2515,21 +2525,26 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation !HISTORY_MSG_DEHAZE_SHOW_DEPTH_MAP;Dehaze - Show depth map !HISTORY_MSG_DEHAZE_STRENGTH;Dehaze - Strength +!HISTORY_MSG_DIRPYRDENOISE_GAIN;NR - Compensate for lightness !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 +2564,9 @@ 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_LOCAL_TMO_SATUR;Local Exp Fattal Saturation !HISTORY_MSG_METADATA_MODE;Metadata copy mode !HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold @@ -2594,6 +2612,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 +2656,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;Green 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 Threshold !ICCPROFCREATOR_COPYRIGHT;Copyright: !ICCPROFCREATOR_COPYRIGHT_RESET_TOOLTIP;Reset to the default copyright, granted to 'RawTherapee, CC0'. !ICCPROFCREATOR_CUSTOM;Custom @@ -2721,6 +2761,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 +2776,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 +2789,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 +2817,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 +2852,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 +2900,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 +2929,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 +2956,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. @@ -2911,6 +3000,8 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_DIRPYRDENOISE_CHROMINANCE_METHOD_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the 'Preview' method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CHROMINANCE_PREVIEWRESIDUAL_INFO_TOOLTIP;Displays the remaining noise levels of the part of the image visible in the preview after wavelet.\n\n>300 Very noisy\n100-300 Noisy\n50-100 A little noisy\n<50 Very low noise\n\nBeware, the values will differ between RGB and L*a*b* mode. The RGB values are less accurate because the RGB mode does not completely separate luminance and chrominance. !TP_DIRPYRDENOISE_LABEL;Noise Reduction +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN;Compensate for lightness +!TP_DIRPYRDENOISE_MAIN_AUTO_GAIN_TOOLTIP;Alter the noise reduction strength based on the image lightness. Strength is reduced for dark images and increased for bright images. !TP_DIRPYRDENOISE_MAIN_MODE_TOOLTIP;Conservative preserves low frequency chroma patterns, while aggressive obliterates them. !TP_DIRPYRDENOISE_MEDIAN_METHOD;Median method !TP_DIRPYRDENOISE_MEDIAN_METHOD_LABEL;Median Filter @@ -2936,17 +3027,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 +3082,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 +3124,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 +3150,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 +3183,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 +3211,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 +3246,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 +3274,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 +3318,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 +3326,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 @@ -3238,6 +3340,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_LOCALLAB_FATFRA;Dynamic Range Compression ƒ !TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal – uses the Fattal Tone-mapping algorithm. !TP_LOCALLAB_FATLEVEL;Sigma +!TP_LOCALLAB_FATSAT;Saturation control !TP_LOCALLAB_FATSHFRA;Dynamic Range Compression Mask ƒ !TP_LOCALLAB_FEATH_TOOLTIP;Gradient width as a percentage of the Spot diagonal\nUsed by all graduated filters in all tools.\nNo action if a graduated filter hasn't been activated. !TP_LOCALLAB_FEATVALUE;Feather gradient (Grad. Filters) @@ -3256,6 +3359,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 +3452,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 +3514,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 +3552,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 +3577,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 +3627,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 +3720,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 +3732,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 +3821,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 +4054,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 +4191,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 & 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_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 8362c1c15..0397ecf2c 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,24 +191,24 @@ 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_SHOWRECURSIVE;Show images in sub-folders recursively. 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 @@ -738,23 +741,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;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 - 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 @@ -762,7 +765,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 @@ -821,16 +824,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 @@ -861,7 +864,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 @@ -884,7 +887,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 @@ -898,11 +901,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 @@ -915,7 +918,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 @@ -998,7 +1001,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 @@ -1017,19 +1020,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 @@ -1065,7 +1068,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 @@ -1098,7 +1101,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 @@ -1123,7 +1126,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 @@ -1137,7 +1140,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 @@ -1149,10 +1152,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 @@ -1266,7 +1269,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 @@ -1357,7 +1360,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 @@ -1406,6 +1409,7 @@ HISTORY_MSG_DEHAZE_ENABLED;Haze Removal HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation HISTORY_MSG_DEHAZE_SHOW_DEPTH_MAP;Dehaze - Show depth map HISTORY_MSG_DEHAZE_STRENGTH;Dehaze - Strength +HISTORY_MSG_DIRPYRDENOISE_GAIN;NR - Compensate for lightness HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST;Dual demosaic - Auto threshold HISTORY_MSG_DUALDEMOSAIC_CONTRAST;Dual demosaic - Contrast threshold HISTORY_MSG_EDGEFFECT;Edge Attenuation response @@ -1444,8 +1448,10 @@ 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_DEHAZE_BLACK;Local - Dehaze - black +HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Color Shift +HISTORY_MSG_LOCAL_TMO_SATUR;Local Exp Fattal Saturation HISTORY_MSG_METADATA_MODE;Metadata copy mode HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold @@ -1536,6 +1542,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;Green 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 Threshold HISTORY_NEWSNAPSHOT;Add HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s HISTORY_SNAPSHOT;Snapshot @@ -1668,15 +1690,15 @@ 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_EXPORT; Fast Export MAIN_TAB_EXPOSURE;Exposure 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_FILTER; Filter +MAIN_TAB_INSPECT; Inspect MAIN_TAB_IPTC;IPTC MAIN_TAB_LOCALLAB;Local MAIN_TAB_LOCALLAB_TOOLTIP;Shortcut: Alt-o @@ -1751,11 +1773,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 @@ -1813,7 +1835,6 @@ 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_APPLNEXTSTARTUP;restart required PREFERENCES_AUTOMONPROFILE;Use operating system's main monitor color profile @@ -1844,7 +1865,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 @@ -1924,7 +1944,11 @@ 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_MAX_ZOOM_TITLE;Maximum zoom PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders PREFERENCES_MENUGROUPEXTPROGS;Group 'Open with' PREFERENCES_MENUGROUPFILEOPERATIONS;Group 'File operations' @@ -1932,6 +1956,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 @@ -2013,7 +2042,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 @@ -2062,10 +2106,31 @@ QINFO_PIXELSHIFT;Pixel Shift / %2 frame(s) QUEUE_AUTOSTART;Auto-start QUEUE_AUTOSTART_TOOLTIP;Start processing automatically when a new job arrives. QUEUE_DESTFILENAME;Path and file name +QUEUE_DESTPREVIEW_TITLE;Select a thumbnail to preview its destination path here +QUEUE_DESTPREVIEW_TOOLTIP;Destination path for the first selected image appears here QUEUE_FORMAT_TITLE;File Format QUEUE_LOCATION_FOLDER;Save to folder QUEUE_LOCATION_TEMPLATE;Use template -QUEUE_LOCATION_TEMPLATE_TOOLTIP;Specify the output location based on the source photo's location, rank, trash status or position in the queue.\n\nUsing the following pathname as an example:\n/home/tom/photos/2010-10-31/photo1.raw\nthe meaning of the formatting strings follows:\n%d4 = home\n%d3 = tom\n%d2 = photos\n%d1 = 2010-10-31\n%f = photo1\n%p1 = /home/tom/photos/2010-10-31/\n%p2 = /home/tom/photos/\n%p3 = /home/tom/\n%p4 = /home/\n\n%r will be replaced by the photo's rank. If the photo is unranked, '0' is used. If the photo is in the trash, 'x' is used.\n\n%s1, ..., %s9 will be replaced by the photo's initial position in the queue at the time the queue is started. The number specifies the padding, e.g. %s3 results in '001'.\n\nIf you want to save the output image alongside the source image, write:\n%p1/%f\n\nIf you want to save the output image in a folder named 'converted' located in the source photo's folder, write:\n%p1/converted/%f\n\nIf you want to save the output image in\n'/home/tom/photos/converted/2010-10-31', write:\n%p2/converted/%d1/%f +QUEUE_LOCATION_TEMPLATE_TOOLTIP;Specify the output location based on characteristics such as the source photo's location, rank, trash status or position in the queue.\n\nThe output template field value can include specifiers beginning with %, which are replaced by those characteristics in the actual destination path.\n\nPress the ? button for full instructions. +QUEUE_LOCATION_TEMPLATE_HELP_BUTTON_TOOLTIP;Show or hide a help panel with instructions for creating location templates +QUEUE_LOCATION_TEMPLATE_HELP_TITLE;Creating an output template +QUEUE_LOCATION_TEMPLATE_HELP_INTRO;The output template field allows you to to dynamically customize the destination folder and filename. When you include certain specifiers, which begin with %, they are replaced by the program when each file is being saved.\n\nThe sections below describe each type of specifier. +QUEUE_LOCATION_TEMPLATE_HELP_PATHS_TITLE;Directories and partial paths +QUEUE_LOCATION_TEMPLATE_HELP_PATHS_INTRO;The %dN, %d-N, %pN, %p-N, %PN and %P-N (N = 1..9) specifiers will be replaced by elements of the image file's directory path.\nThe format specifiers operate as follows:\n %dN = Nth directory from the end of the path\n %d-N = Nth directory from the start of the path\n %pN = all directories up to the Nth from the end of the path\n %p-N = the first N directories in the path\n %PN = the last N directories in the path\n %P-N = all directories from the Nth to the end of the path\n %f = base filename (no extension) +QUEUE_LOCATION_TEMPLATE_HELP_PATHS_INTRO_WINDOWS;For Windows paths, %d-1 is the drive letter and colon, and %d-2 is the base directory on that drive. +QUEUE_LOCATION_TEMPLATE_HELP_PATHS_BODY_1;Using this pathname as an example: +QUEUE_LOCATION_TEMPLATE_HELP_PATHS_EXAMPLE_LINUX;/home/tom/photos/2010-10-31/photo1.raw +QUEUE_LOCATION_TEMPLATE_HELP_PATHS_EXAMPLE_WINDOWS;D:\tom\photos\2010-10-31\photo1.raw +QUEUE_LOCATION_TEMPLATE_HELP_PATHS_BODY_2;The meanings of the formatting strings are: +QUEUE_LOCATION_TEMPLATE_HELP_RESULT_MISMATCH;ERROR: 2nd result is different: +QUEUE_LOCATION_TEMPLATE_HELP_RANK_TITLE;Rank +QUEUE_LOCATION_TEMPLATE_HELP_RANK_BODY;%r will be replaced by the photo's rank. If the photo is unranked, '0' is used. If the photo is in the trash, 'x' is used. +QUEUE_LOCATION_TEMPLATE_HELP_SEQUENCE_TITLE;Position/sequence in queue +QUEUE_LOCATION_TEMPLATE_HELP_SEQUENCE_BODY;%s1, ..., %s9 will be replaced by the photo's initial position in the queue at the time the queue is started. The number specifies the padding, e.g. %s3 results in '001'. +QUEUE_LOCATION_TEMPLATE_HELP_TIMESTAMP_TITLE;Date and time +QUEUE_LOCATION_TEMPLATE_HELP_TIMESTAMP_BODY;Three different date/time values may be used in templates:\n %tE"%Y-%m-%d" = when export started\n %tF"%Y-%m-%d" = when file was last saved\n %tP"%Y-%m-%d" = when photo was taken\nThe quoted string defines the format of the resulting date and/or time. The format string %tF"%Y-%m-%d" is just one example. The string can use all conversion specifiers defined for the g_date_time_format function (see https://docs.gtk.org/glib/method.DateTime.format.html).\n\nExample format strings: +QUEUE_LOCATION_TEMPLATE_HELP_EXAMPLES_TITLE;Common examples +QUEUE_LOCATION_TEMPLATE_HELP_EXAMPLES_BODY;If you want to save the output image alongside the source image, write:\n%p1/%f\n\nIf you want to save the output image in a folder named 'converted' located in the source photo's folder, write:\n%p1/converted/%f\n\nIf you want to save the output image in\n'/home/tom/photos/converted/2010-10-31', write:\n%p-3/converted/%P-4/%f 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 @@ -2098,11 +2163,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 @@ -2287,8 +2352,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. @@ -2409,6 +2474,8 @@ TP_DIRPYRDENOISE_LUMINANCE_CURVE;Luminance curve TP_DIRPYRDENOISE_LUMINANCE_DETAIL;Detail recovery TP_DIRPYRDENOISE_LUMINANCE_FRAME;Luminance TP_DIRPYRDENOISE_LUMINANCE_SMOOTHING;Luminance +TP_DIRPYRDENOISE_MAIN_AUTO_GAIN;Compensate for lightness +TP_DIRPYRDENOISE_MAIN_AUTO_GAIN_TOOLTIP;Alter the noise reduction strength based on the image lightness. Strength is reduced for dark images and increased for bright images. TP_DIRPYRDENOISE_MAIN_COLORSPACE;Color space TP_DIRPYRDENOISE_MAIN_COLORSPACE_LAB;L*a*b* TP_DIRPYRDENOISE_MAIN_COLORSPACE_RGB;RGB @@ -2502,9 +2569,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? @@ -2620,6 +2689,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 @@ -2728,7 +2798,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. @@ -2761,6 +2831,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. @@ -2787,7 +2859,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. @@ -2822,8 +2894,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. @@ -2834,6 +2906,7 @@ TP_LOCALLAB_DARKRETI;Darkness TP_LOCALLAB_DEHAFRA;Dehaze TP_LOCALLAB_DEHAZ;Strength TP_LOCALLAB_DEHAZFRAME_TOOLTIP;Removes atmospheric haze. Increases overall saturation and detail.\nCan remove color casts, but may also introduce a blue cast which can be corrected with other tools. +TP_LOCALLAB_DEHAZE_BLACK;Black TP_LOCALLAB_DEHAZ_TOOLTIP;Negative values add haze. TP_LOCALLAB_DELTAD;Delta balance TP_LOCALLAB_DELTAEC;ΔE Image mask @@ -2853,7 +2926,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 @@ -2894,7 +2967,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. @@ -2902,20 +2975,22 @@ 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 TP_LOCALLAB_FATANCHOR;Anchor TP_LOCALLAB_FATDETAIL;Detail +TP_LOCALLAB_FATSAT;Saturation control TP_LOCALLAB_FATFRA;Dynamic Range Compression ƒ TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal – uses the Fattal Tone-mapping algorithm. TP_LOCALLAB_FATLEVEL;Sigma +TP_LOCALLAB_FATSAT;Saturation control TP_LOCALLAB_FATSHFRA;Dynamic Range Compression Mask ƒ TP_LOCALLAB_FEATH_TOOLTIP;Gradient width as a percentage of the Spot diagonal\nUsed by all graduated filters in all tools.\nNo action if a graduated filter hasn't been activated. TP_LOCALLAB_FEATVALUE;Feather gradient (Grad. Filters) @@ -2934,11 +3009,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. @@ -3027,6 +3102,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 @@ -3087,11 +3164,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 @@ -3148,7 +3227,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. @@ -3182,12 +3261,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 @@ -3297,7 +3370,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 @@ -3309,7 +3382,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 @@ -3795,12 +3868,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) @@ -4081,7 +4154,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 @@ -4108,6 +4181,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,7 +4230,11 @@ 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_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).\nIn the rare case of a color drift with "Observer 2°" (probably due to the conversion matrix) “Observer 10°” must be selected. +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: @@ -4127,10 +4243,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 @@ -4143,3 +4261,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/options/options.osx b/rtdata/options/options.osx index cf31210e6..ef68d7144 100644 --- a/rtdata/options/options.osx +++ b/rtdata/options/options.osx @@ -37,8 +37,3 @@ CustomProfileBuilder= # Default profile name (without extension) to use for standard (8bits) images #ImgDefault=Neutral - -[GUI] -# Set the included font as default -FontFamily=Droid Sans Mono Slashed -CPFontFamily=Droid Sans Mono Slashed diff --git a/rtdata/themes/RawTherapee - Legacy-GTK3-20_.css b/rtdata/themes/RawTherapee - Legacy.css similarity index 99% rename from rtdata/themes/RawTherapee - Legacy-GTK3-20_.css rename to rtdata/themes/RawTherapee - Legacy.css index 07a0bd65d..2a8ae4adc 100644 --- a/rtdata/themes/RawTherapee - Legacy-GTK3-20_.css +++ b/rtdata/themes/RawTherapee - Legacy.css @@ -20,7 +20,7 @@ */ /***************************/ -/**/ @import "size - Legacy.css"; /**/ +/**/ @import url("./common/size - Legacy.css"); /**/ /***************************/ /* text-shadow causes a serious performance degradation in rendering the UI, @@ -227,6 +227,8 @@ menu separator { } #PlacesPaned .view.separator { + min-height: 0.16666666666666666em; + color: #363636; } #MetaPanelNotebook separator { diff --git a/rtdata/themes/RawTherapee-GTK3-_19.css b/rtdata/themes/RawTherapee-GTK3-_19.css deleted file mode 100644 index f4bec23b1..000000000 --- a/rtdata/themes/RawTherapee-GTK3-_19.css +++ /dev/null @@ -1,525 +0,0 @@ -/* - This file is part of RawTherapee. - - Copyright (c) 2015-2017 DrSlony - Copyright (c) 2016-2017 Hombre - - 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 . -*/ - -* { - color: #AAAAAA; -} - -.view:selected { - color: #262626; - background-color: #AAAAAA -} - -/* The Places and Dir browser panels */ -.view { - background-color: #262626; -} -/* The headers of these panels */ -.view .button { - background-color: #363636; - padding: 2px; -} - -.plainback { - background-color: #404040; -} - -GtkBox { - border-width: 0; - border-style: none; - border-radius: 0; - margin: 0; - padding: 0; -} - -GtkGrid { - margin: 2px; - padding: 0; - border-width: 0; - border-style: none; - border-radius: 0; -} - -/* Affects all frames except in the toolbox */ -GtkFrame { - border-width: 0; - border-color: #303030; - border-radius: 0; - border-style: solid; - /*border-style: none none none solid;*/ - padding: 4px; -} - -GtkFrame > GtkLabel { - color: #D8D8D8; -} - -#FileBrowser { - padding: 10px; - margin: 10px; -} - -/* Frames in Preferences */ -#PrefNotebook GtkFrame { - background-color: #3B3B3B; - border: 1px solid #505050; - border-radius: 4px; -} - -/* Frames in the toolbox. Not MyExpander frames. */ -GtkEventBox .frame { - border-color: #565656; -} - -/*.EditorTopPanel .button, .ToolBarPanelFileBrowser .button, .EditorZoomPanel .button {*/ -.button { - padding: 1px; - margin: 1px; -} - -/* Adjusters */ -.text-button { - padding: 0; -} - -/* Any text-button which is a real button, unlike Slider label */ -.text-button.button { - padding: 4px; -} - -.separator { - color: #363636; -} - -GtkProgressBar { - -GtkProgressBar-min-vertical-bar-width: 10; - -GtkProgressBar-min-horizontal-bar-height: 10; -} - -GtkDrawingArea { - border-radius: 0; - background-color: #363636; - border: 1px solid #252525; -} - -GtkDrawingArea:selected { - background-color: #565656; - border-radius: 10px; -} - -GtkImage { - padding: 1px; -} - - - - - -GtkScale.slider { - margin: 1px; -} -GtkScale.slider:hover { - background-image: linear-gradient(#444444, #3E3E3E, #393939); -} -GtkScale.slider:insensitive { - background-image: none; - background-color: #444; - border-color: #282828; -} -GtkScale.trough { - background-color: #2A2A2A; -} -GtkScale.trough:insensitive { - background-color: #444; - border-color: #282828; -} - - - -GtkLabel { - margin: 0 1px; -} - - -GtkButton { - padding: 0; - margin: 1px; -} -GtkButton, GtkButton.flat:hover { - background-image: linear-gradient(#343434, #2E2E2E, #292929); -} - -GtkButton.flat, GtkCheckButton { - background-image: none; -} - -/* Vertical group of buttons in 1 column */ -GtkButton.Top { - border-radius: 10px 4px 0 0; - border-style: solid solid none solid; - margin-bottom: 0; -} -GtkButton.MiddleV { - border-radius: 0; - border-style: none solid none solid; - margin-top: 0; - margin-bottom: 0; -} -GtkButton.Bottom { - border-radius: 0 0 4px 4px; - border-style: none solid solid solid; - margin-top: 0; -} -/* end */ - -/* Horizontal group of buttons in 1 row */ -GtkButton.Left { - border-radius: 4px 0 0 4px; - border-style: solid none solid solid; - margin-right: 0; -} -GtkButton.MiddleH { - border-radius: 0; - border-style: solid none solid none; - margin-left: 0; - margin-right: 0; -} -GtkButton.Right { - border-radius: 0 4px 4px 0; - border-style: solid solid solid none; - margin-left: 0; -} -/* end */ - -/* [1.23[-][+]] */ -GtkEntry, GtkSpinButton { - background-color: #262626; -} - -GtkEntry:insensitive, GtkSpinButton:insensitive { - background-color: #363636; -} - -GtkEntry:hover, GtkSpinButton:hover { - background-color: #565656; -} - -GtkEntry:selected { - color: #262626; - background-color: #AAAAAA; -} - -/* Context menus */ -GtkMenu { - background-color: #262626; - color: #909090; -} - -/* Context menu item */ -.menuitem { - padding: 2px; -} - -#MyExpander { - margin: 10px; - padding: 5px; -} - -/* Tool background */ -#ExpanderBox { - background-color: #363636; - border-width: 1px; - border-style: solid; - border-radius: 4px; - border-color: #252525; - margin: 9px; - padding: 4px; -} - -#ExpanderBox GtkDrawingArea { - background-color: #363636; -} - -#ExpanderBox GtkFrame { - background-color: #3B3B3B; - border-style: solid; - border-width: 1px; - border-radius: 4px; - border-color: #313131; - margin: 3px; - padding: 2px; -} - -#ExpanderBox GtkFrame GtkDrawingArea { - background-color: #3B3B3B; -} - -#ExpanderBox GtkFrame GtkFrame { - background-color: #414141; - border: 1px solid #373737; - border-radius: 4px; - margin: 3px; - padding: 2px; -} - -#ExpanderBox GtkFrame GtkFrame GtkDrawingArea { - background-color: #414141; -} - -/* Sub-tool (MyExpander) background */ -#ExpanderBox2 { - background-color: #3B3B3B; - border: 1px solid #2A2A2A; - border-radius: 4px; - margin: 9px; - padding: 4px; -} - -#ExpanderBox2 GtkDrawingArea { - background-color: #3B3B3B; -} - -#ExpanderBox2 GtkFrame { - background-color: #414141; - border: 1px solid #373737; - border-radius: 4px; - margin: 3px; - padding: 2px; -} - -#ExpanderBox2 GtkFrame GtkDrawingArea { - background-color: #414141; -} - -#ExpanderBox2 GtkFrame GtkFrame { - background-color: #474747; - border: 1px solid #3D3D3D; - border-radius: 4px; - margin: 3px; - padding: 2px; -} - -#ExpanderBox2 GtkFrame GtkFrame GtkDrawingArea { - background-color: #474747; -} - -#MyExpanderTitle { - margin: 5px; - padding: 3px 1px 3px 1px; - font-size: 120%; -} -#MyExpanderTitle GtkLabel { - color: #CCCCCC; -} -#MyExpanderTitle:hover { - background-color: #202020; -} -#MyExpanderTitle GtkEventBox:hover GtkImage { - background-color: #202020; - border-radius: 3px; -} -#MyExpanderTitle:hover GtkLabel { - color: #D8D8D8; -} - -#ExpanderBox2 GtkSeparator, #ExpanderBox3 GtkSeparator { - color: #292929; -} - -/* Editor tab button */ -#MainNotebook > GtkGrid GtkLabel, #MainNotebook > GtkGrid GtkImage { - /* OK */ - padding: 1px; -} - -/* File Browser right side tabs - Toolbox, Inspector, Fast Export, Filter */ -GtkNotebook tab { - background-color: #383838; - border-width: 1px; - border-style: none; - border-color: #262626; - border-radius: 0; - padding: 3px; -} - -GtkNotebook tab:hover { - background-color: #505050; -} - -GtkNotebook tab:active { - border-width: 5px; - border-color: #989898; -} - -/* Get rid of shitty notebook header shadow */ -GtkNotebook.top tab { - border-bottom-style: solid; - padding-bottom: 8px; -} -GtkNotebook.right tab { - border-left-style: solid; - padding-left: 8px; -} -GtkNotebook.bottom tab { - border-top-style: solid; - padding-top: 8px; -} -GtkNotebook.left tab { - border-right-style: solid; - padding-right: 8px; -} - -/* Get rid of notebook frame border - too many borders */ -GtkNotebook.top.header, GtkNotebook.right.header, GtkNotebook.bottom.header, GtkNotebook.left.header { - box-shadow: none; - border-width: 1px; - border-color: #262626; - border-style: none; - border-radius: 0; - background-color: #383838; - padding: 0; -} -/* Get rid of notebook header border - too many borders */ -GtkNotebook.top.header { - /* OK */ - border-bottom-style: solid; -} -GtkNotebook.right.header { - /* OK */ - border-left-style: solid; -} -GtkNotebook.bottom.header { - /* OK */ - border-top-style: solid; -} -GtkNotebook.left.header { - /* OK */ - border-right-style: solid; -} -GtkNotebook.frame { - /* OK */ - border-radius: 0; - border-style: none; -} - -/* Pad notebooks, makes the other borders look nicer */ -GtkNotebook { - /* OK */ - background-color: #484848; - padding: 0; -} - - -#MainNotebook.header { - /* OK */ - background-color: #2A2A2A; -} -#MainNotebook > tab { - /* OK */ - background-color: #2A2A2A; -} -#MainNotebook > tab:hover { - /* OK */ - background-color: #505050; -} -#MainNotebook > tab:active { - /* OK */ - border-color: #989898; -} - -#RightNotebook.header { - /* OK */ - background-color: #2A2A2A; -} -#RightNotebook > tab { - /* OK */ - background-color: #2A2A2A; -} -#RightNotebook > tab:hover { - /* OK */ - background-color: #505050; -} -#RightNotebook > tab:active { - /* OK */ - border-color: #989898; -} - - -/* All tool panels have a frame except for Meta which unlike the rest is a notebook itself. - * So we use CSS to make it look like a frame. */ -#MetaPanelNotebook.frame { - border: 1px solid #262626; - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - border-top-left-radius: 0; - border-top-right-radius: 0; - border-top-width: 0; -} - -#MetaPanelNotebook.header { - border: 1px solid #262626; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom-width: 0; - padding: 5px; - margin: 5px; -} - -.tooltip { - padding: 0; -} - - -/* make the "partial profile" dialog a little bit more readable */ -#PartialPasteHeader { - margin: 1.5em 0 0 0; - padding: 0; - font-weight: bold; - color: #363636; -} - -#PartialPasteHeaderSep { - color: #D8D8D8; -} - - -#MyFileChooserButton { - padding-left: 3px; - padding-right: 3px; -} - -/* Better on/off state separation for text toggle buttons, e.g. auto-levels or histogram matching. */ -GtkToggleButton.button.text-button { - background-image: linear-gradient(to bottom, rgba(100,100,100,.3), rgba(30,30,30,.3)); -} - -GtkToggleButton.button.text-button:hover { - background-image: linear-gradient(to bottom, rgba(128,128,128,.3), rgba(64,64,64,.3)); -} - -GtkToggleButton.button.text-button:checked { - background-image: linear-gradient(to bottom, rgba(30,30,30,.3), rgba(0,0,0,.4)); -} - -GtkToggleButton.button.text-button:hover:checked { - background-image: linear-gradient(to bottom, rgba(48,48,48,.3), rgba(0,0,0,.3)); -} diff --git a/rtdata/themes/RawTherapee-GTK3-20_.css b/rtdata/themes/RawTherapee.css similarity index 99% rename from rtdata/themes/RawTherapee-GTK3-20_.css rename to rtdata/themes/RawTherapee.css index 2e314510a..499b2197e 100644 --- a/rtdata/themes/RawTherapee-GTK3-20_.css +++ b/rtdata/themes/RawTherapee.css @@ -19,14 +19,13 @@ */ /***************************/ -/**/ @import "size.css"; /**/ /* TODO: Remove this weird dependency */ +/**/ @import url("./common/size.css"); /**/ /* TODO: Remove this weird dependency */ /***************************/ /** Set style defaults **/ * { color: #BBBBBB; text-shadow: none; /* Keep at none, or suffer serious performance issues */ - font-size: 1em; } *:disabled { @@ -44,7 +43,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 +206,8 @@ menu separator { } #PlacesPaned .view.separator { + min-height: 0.16666666666666666em; + color: #363636; } #MetaPanelNotebook separator { @@ -1066,7 +1067,7 @@ dialog frame > label:not(.dummy) { } #ToolPanelNotebook viewport { - padding: 0; + padding: 0; } #ToolPanelNotebook .PanelEnding { @@ -1224,7 +1225,7 @@ dialog frame > label:not(.dummy) { border-top-width: 0.083333333333333333em; } -#Navigator box label { +#Navigator box label { margin: 0; padding: 0; } diff --git a/rtdata/themes/TooWaBlue - Bright-GTK3-20_.css b/rtdata/themes/TooWaBlue - Bright.css similarity index 98% rename from rtdata/themes/TooWaBlue - Bright-GTK3-20_.css rename to rtdata/themes/TooWaBlue - Bright.css index 19e2eb049..6b12db47c 100644 --- a/rtdata/themes/TooWaBlue - Bright-GTK3-20_.css +++ b/rtdata/themes/TooWaBlue - Bright.css @@ -20,7 +20,7 @@ /*****************************************/ -/**/ @import "TooWaBlue-GTK3-20_.css"; /**/ +/**/ @import "TooWaBlue.css"; /**/ /*****************************************/ /*** Change me *** rgb(red,green,blue) *** allowed values from 0 to 255 for each color ***/ diff --git a/rtdata/themes/TooWaBlue - Dark-GTK3-20_.css b/rtdata/themes/TooWaBlue - Dark.css similarity index 98% rename from rtdata/themes/TooWaBlue - Dark-GTK3-20_.css rename to rtdata/themes/TooWaBlue - Dark.css index 5875e2132..d9ca22dff 100644 --- a/rtdata/themes/TooWaBlue - Dark-GTK3-20_.css +++ b/rtdata/themes/TooWaBlue - Dark.css @@ -20,7 +20,7 @@ /*****************************************/ -/**/ @import "TooWaBlue-GTK3-20_.css"; /**/ +/**/ @import "TooWaBlue.css"; /**/ /*****************************************/ /*** Change me *** rgb(red,green,blue) *** allowed values from 0 to 255 for each color ***/ diff --git a/rtdata/themes/TooWaBlue-GTK3-_19.css b/rtdata/themes/TooWaBlue-GTK3-_19.css deleted file mode 100644 index 31676ca8d..000000000 --- a/rtdata/themes/TooWaBlue-GTK3-_19.css +++ /dev/null @@ -1,881 +0,0 @@ -/* - This file is part of RawTherapee. - - Copyright (c) 2016 TooWaBoo (v1.19.5) - Many thanks to the RawTherapee Developer Team for this great piece of software - - 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 . -*/ - -/*** Change me *** rgb(red,green,blue) *** allowed values from 0 to 255 for each color ***/ - -@define-color accent-color rgb(35,99,166); /*** Highlight/selected color for Tab indicator, List, Dropdown menu, Borders ... ***/ -@define-color text-hl-color rgb(210,210,210); /*** Highlight/selected text color ***/ - -@define-color accent-color2 rgb(35,99,166); /*** Slider, Progressbar, Scrollbar ***/ -@define-color accent-color4 rgb(35,99,166); /*** Slider knob ***/ - -@define-color accent-color3 rgb(35,99,166); /*** Selected thumbnail background color ***/ -@define-color text-hl-color3 rgb(210,210,210); /*** Selected thumbnail text color ***/ - -/*** Change me end ************************************************************************/ - -@define-color text-color rgb(180,180,180); -@define-color text-hl-color2 rgb(192,192,192); -@define-color text-tbEntry rgb(192,192,192); -@define-color bg-dark-grey rgb(36,36,36); -@define-color bg-grey rgb(70,70,70); -@define-color bg-light-grey rgb(88,88,88); -@define-color border-color rgba(255,255,255,.25); -@define-color bg-list-hover rgba(255,255,255,.065); -@define-color bg-scale-entry rgba(0,0,0,.14); -@define-color bg-button-border rgba(0,0,0,.48); -@define-color bg-button-border-hover rgba(0,0,0,.58); -@define-color bg-entry-border rgba(0,0,0,.40); -@define-color bg-button-hover rgba(0,0,0,.22); -@define-color bg-spin-button-hover rgba(0,0,0,.25); -@define-color bg-entry-IPTC @bg-dark-grey; -@define-color view-grid-border rgb(64,64,64); - -* { - color: @text-color; - transition: none; - text-shadow: none; - icon-shadow: none; - box-shadow: none; - outline-style: none; /* removes the ugly dotted focus line */ - border-image: none; - -GtkCheckButton-indicator-size: 16; - -GtkCheckMenuItem-indicator-size: 16; - -GtkCheckButton-indicator-spacing: 2; -} - -.undershoot { - background-image: none; /* removes the dotted scrollbar line */ -} -GtkWindow { - background-color: @bg-light-grey; -} -GtkDialog { - background-color: @bg-grey; - -GtkDialog-content-area-spacing: 7; - -GtkDialog-action-area-border: 0; - -GtkDialog-content-area-border: 8; -} - -GtkFontChooser, -GtkColorChooser { - -GtkDialog-action-area-border: 4; - -GtkDialog-content-area-border: 0; -} - -.frame { - border: none; -} -#PrefNotebook > .frame { - border: 1px solid rgba(0,0,0,.50); - border-top: none; -} -#BatchQueueButtonsMainContainer GtkFrame { - padding: 4px 4px 4px 10px; -} - -/*** Add space between buttons and image area***/ -#BeforeAfterContainer GtkFrame { - padding: 2px 0 4px; -} -/*** Add space between before/after image ***/ -#BeforeAfterContainer GtkContainer:nth-child(1) > GtkContainer:nth-child(2) GtkFrame { - padding-right: 14px; -} - -/*** Menu bubble box ***/ -GtkPopover { - background-color: @bg-grey; - border: 1px solid @accent-color; - border-radius: 0; -} - -.menu { - background-color: @bg-dark-grey; - border: 1px solid @accent-color; -} -.menu > .menuitem { - padding: 2px 4px; -} -.menu > .menuitem:hover { - background-color: @accent-color; -} -.menu > .menuitem:hover > * > *, -.menu > .menuitem:hover > * { - color: @text-hl-color; -} - -GtkNotebook { - padding: 4px; - background-color: @bg-light-grey; -} -GtkDialog GtkNotebook { - padding: 2px 0 0; -} -#PrefNotebook { - padding: 4px 8px; -} -#RightNotebook { - padding: 0 0 0 4px; -} - -GtkPaned { - -GtkPaned-handle-size: 4px; - background-color: transparent; -} -.pane-separator { - background-color: @bg-light-grey; -} -GtkDialog .pane-separator { - background-color: @bg-grey; -} - -/*** Separator ***/ -.separator { - color: @bg-light-grey; -} -GtkDialog .separator { - color: @border-color; -} -#RightNotebook .separator { - color: @bg-dark-grey; -} - /*** Navigator ***/ -#Navigator .separator { - color: @view-grid-border; -} -/*** end ***/ - -/*** Background color image area***/ -GtkDrawingArea { - background-color: @bg-grey; - border: 1px solid rgba(0,0,0,.32); -} -/*** Histogram ***/ -#HistogramPanel, -#HistogramArea { - background-color: @bg-dark-grey; - border: none; -} -/*** Histogram RGB-Bar***/ -#HistogramRGBArea { - background-color: rgb(128,128,128); - border: none; -} -/*** Navigator ***/ -#Navigator GtkDrawingArea { - background-color: @bg-dark-grey; - border: 1px solid @bg-dark-grey; -} -#Navigator { - background-color: @bg-dark-grey; - border-top: 156px solid @bg-light-grey; -} - -#RightNotebook GtkDrawingArea { - background-color: @bg-dark-grey; -} - -/*** Label ***/ - .label { - padding: 0 4px; -} - /*** Increase space between labels in navigater ***/ -#Navigator .label { - padding: 6px 0 3px; -} -#Navigator GtkTable .label { - padding: 0 0 4px; -} - /***/ -GtkDialog .label, -#ToolPanelNotebook .label, -.notebook tab .label { - padding: 0 1px; -} -.button .label { - padding: 0; -} - - /*** Add left and right space between frame and labels ***/ -.frame > .label, -#ToolPanelNotebook .frame > .label { - padding: 4px; -} -#BatchQueueButtonsMainContainer GtkFrame:nth-child(3) > .label{ - padding: 2px 0px 4px; -} - -#MyExpanderTitle .label { - padding: 2px 3px; -} -/*** end ***/ - -.tooltip { - border-radius: 0; - padding: 0; -} -.tooltip.background { - background-color: @bg-dark-grey; - border: 1px solid @accent-color; -} - -/*** PartialPaste ***/ -#PartialPaste:nth-child(2) { - background-color: @bg-light-grey; - border: 1px solid rgba(0,0,0,.50); -} -#PartialPaste > .frame { - padding: 8px 10px; -} -#PartialPasteHeaderSep { - color: rgb(192,192,192); -} -#PartialPasteHeader .label { - color: rgb(213,213,213); -} -/*** end ***/ - -/*** Scrollbar ***/ -.scrollbar.trough { - background-color: rgba(0,0,0,.38); - background-image: none; - border: none; -} -.scrollbar.slider:active { - background-color: shade(@accent-color2,1.12); -} - -/*** end ***/ - -/*** Scale & Progressbar ***/ -.scale { - box-shadow: inset 0 1px rgba(255, 255, 255, 0.1), 0 1px rgba(242, 242, 242, 0.1); - -GtkRange-trough-border: 6; - -GtkScale-slider-length: 15; - -GtkRange-slider-width: 15; -} -.scale.trough, -#ToolPanelNotebook .scale.trough { - background-color: @bg-scale-entry; - border-color: @bg-dark-grey; - box-shadow: inset 0 1px rgba(255, 255, 255, 0.1), 0 1px rgba(242, 242, 242, 0.1); -} -.scale.trough.highlight, -#ToolPanelNotebook .scale.trough.highlight { - box-shadow: inset 0 1px rgba(255, 255, 255, 0.1), 0 1px rgba(242, 242, 242, 0.1); - background-image: none; - background-color: @accent-color2; - border: 1px solid @bg-dark-grey; - color: @text-hl-color2; -} -.scale.slider, -#ToolPanelNotebook .scale.slider { - background-image: linear-gradient(to bottom, shade (@accent-color4,1.15), shade (@accent-color4,.85)); - border: 1px solid shade(@bg-dark-grey, 1.25); - box-shadow: none; -} -.scale.fine-tune { - -GtkRange-trough-border: 5; -} -.scale.scale-has-marks-below { - -GtkRange-trough-border: 6; - -GtkScale-slider-length: 6; - -GtkRange-slider-width: 19; -} -.scale.slider.scale-has-marks-below { - border-radius: 0 0 20px 20px; - border: 1px solid @bg-dark-grey; -} -.scale.fine-tune.scale-has-marks-below { - -GtkRange-trough-border: 5; -} -.scale.slider:hover, -#ToolPanelNotebook .scale.slider:hover { - background-image: linear-gradient(to bottom, shade (@accent-color4,1.25), shade (@accent-color4,.95)); -} - -.scale.slider:active, -#ToolPanelNotebook .scale.slider:active { - background-image: linear-gradient(to bottom, shade (@accent-color4,1.25), shade (@accent-color4,.95)); -} - -GtkProgressBar { - -GtkProgressBar-min-vertical-bar-width: 8; - -GtkProgressBar-min-horizontal-bar-height: 8; - -GtkProgressBar-yspacing: 4px; - border-radius: 10px; - box-shadow: inset 0 1px rgba(255, 255, 255, 0.1), 0 1px rgba(242, 242, 242, 0.1); -} -.progressbar { - background-image: none; - background-color: @accent-color2; - border-color: @bg-dark-grey; -} -GtkProgressBar.trough { - background-image: none; - background-color: @bg-scale-entry; -} -#MainNotebook > GtkGrid GtkProgressBar { - box-shadow: none; -} -#MainNotebook > GtkGrid GtkProgressBar.trough { - background-image: none; - background-color: @bg-dark-grey; - border-color: @bg-dark-grey; -} -/*** end ***/ - -/*** Load/Save ***/ -GtkFileChooserWidget { - background-color: @bg-grey; -} -GtkFileChooserWidget > GtkBox { - border-bottom-color: @bg-dark-grey; -} -GtkFileChooserWidget GtkBox { - background-color: transparent; -} -GtkFileChooserWidget GtkListBox * { - padding-top: 1px; - padding-bottom: 1px; -} -GtkFileChooserWidget GtkListBox { - background-color: @bg-dark-grey; -} -GtkFileChooserWidget .list-row * { - padding: 1px 4px; -} -GtkFileChooserWidget .list-row:hover { - background-color: @bg-list-hover; -} -GtkFileChooserWidget .list-row:hover * { - color: @text-hl-color2; -} -GtkFileChooserWidget .list-row:selected { - background-color: @accent-color; -} -GtkFileChooserWidget .list-row:selected * { - color: @text-hl-color; -} -/*** end ***/ - -/*** Tab Bars ***/ -.notebook tab, .notebook.header { - background-color: @bg-dark-grey; - border-color: @bg-dark-grey; -} -#MainNotebook tab { - padding: 5px; -} -.notebook tab.top { - border-width: 0 0 5px 0; -} -.notebook tab.left { - border-width: 0 5px 0 0; -} -#RightNotebook tab.left, -#PrefNotebook tab, -GtkDialog tab { - padding: 9px; -} -#ToolPanelNotebook tab { - padding: 10px 2px 7px; -} -#MetaPanelNotebook tab { - padding: 8px 4px; -} - -.notebook tab:active { - border-color: @accent-color; -} - -/*** end ***/ - -/*** File Browser ***/ -#FileBrowser GtkDrawingArea { - background-color: @bg-grey; -} -#FileBrowser GtkDrawingArea:selected { - background-color: @accent-color3; - color: @text-hl-color3; -} -/*** end ***/ - -/*** Image ***/ -GtkImage { - padding: 0; -} -#MainNotebook > GtkGrid GtkImage { - padding: 1px; -} - -#ToolPanelNotebook GtkImage{ - padding: 0 4px; -} -#MyExpanderTitle GtkImage{ - padding: 0; -} - -#ToolPanelNotebook tab GtkImage, -#ToolPanelNotebook .button GtkImage { - padding: 1px 0; -} - -GtkDialog .button GtkImage{ - padding: 0; -} -GtkFileChooserWidget .button GtkImage{ - padding: 0 4px; -} -/*** end ***/ - -/*** Toolpanel ***/ -#ToolPanelNotebook { - background-color: @bg-dark-grey; - padding: 0; - border-top: 4px solid @bg-dark-grey; -} - -#ToolPanelNotebook GtkScrolledWindow GtkViewport.frame { - padding: 0 4px; -} -#ToolPanelNotebook .separator { - color: transparent; -} -#ToolPanelNotebook GtkFrame, -#PrefNotebook GtkFrame { - border: 1px solid @border-color; - border-radius: 0; - padding: 5px; -} - -#ToolPanelNotebook GtkDrawingArea { - background-color: @bg-dark-grey; - border-color: @bg-light-grey; - color: @text-color; -} -#ToolPanelNotebook GtkDrawingArea { - border-radius: 1px; /* BUG: if 0, scale mini sliders look funny */ -} - -#ExpanderBox #ExpanderBox, -#ExpanderBox2, -#ExpanderBox3 { - border: 1px solid @border-color; -} - -#ExpanderBox, -#ExpanderBox2, -#ExpanderBox3 { - background-color: @bg-grey; - border-radius: 0; -} - -#MyExpanderTitle .label { - color: @text-color; -} -#MyExpanderTitle:hover .label { - color: @text-hl-color2; -} -/*** end ***/ - -/*** View ***/ -.view { - background-color: @bg-dark-grey; - border-color: @view-grid-border; -} -#PrefNotebook .view { - background-color: @bg-grey; -} -#MainNotebook .view.cell:nth-child(2) { - padding: 1px 0px 1px 4px; -} -.view row:hover { - background-color: @bg-list-hover; - color: @text-hl-color2; -} -#PrefNotebook .view row:hover { - background-color: @bg-light-grey; - color: @text-hl-color2; -} -.view row:selected { - color: @text-hl-color; - background-color: @accent-color; -} -#PrefNotebook .view row:selected { - color: @text-hl-color; - background-color: @accent-color; -} -/*** end ***/ - -/*** Metadata ***/ -#MetaPanelNotebook { - padding: 8px 11px 0; -} -#MetaPanelNotebook GtkScrolledWindow GtkViewport.frame { - padding: 8px 10px; -} -#MetaPanelNotebook.frame { - background-color: @bg-grey; - border-bottom: none; - border-top: 4px solid @bg-dark-grey; - border-left: 9px solid @bg-dark-grey; - border-right: 9px solid @bg-dark-grey; -} -#MetaPanelNotebook .separator { - color: @border-color; -} -#MetaPanelNotebook.header { - background-color: @bg-dark-grey; - -} -#MetaPanelNotebook GtkTreeView { - padding: 1px; - background-color: @bg-grey; -} -#MetaPanelNotebook .frame GtkTreeView { - padding: 0px; - background-color: @bg-entry-IPTC; -} -#MetaPanelNotebook GtkTreeView:hover, -#MetaPanelNotebook .frame GtkTreeView:hover { - background-color: @bg-list-hover; - color: @text-hl-color; -} -#MetaPanelNotebook GtkTreeView:selected, -#MetaPanelNotebook .frame GtkTreeView:selected { - color: @text-hl-color; - background-color: @accent-color; -} -#MetaPanelNotebook GtkTextView { - color: @text-color; - background-color: @bg-entry-IPTC; - padding: 2px 4px; -} -/*** end ***/ - -/*** Entry ***/ -.entry { - background-image: none; - background-color: @bg-scale-entry; - border: 1px solid @bg-entry-border; - border-radius: 0; - padding: 2px 4px; - color: @text-color; - box-shadow: inset 1px 1px rgba(0, 0, 0, 0.08), 0 1px rgba(242 , 242, 242, 0.1); -} -#FileBrowser .entry { - padding: 3px 4px; -} -.entry:focused:selected { - color: @text-hl-color; - background-color: @accent-color; -} -.entry:not(:focused):not(:insensitive) {/*Workaround*/ - color: @text-color; - background-color: transparent; -} -.entry:not(:selected):not(:insensitive) { - color: @text-color; - background-color: @bg-scale-entry; -} -#ToolPanelNotebook .entry { - padding: 0 4px 0 8px; - border-radius: 20px 0 0 20px; - background-color: rgba(255,255,255,.12); - border: 1px solid rgba(0,0,0,.46); - color: @text-tbEntry; - box-shadow: inset 1px 1px rgba(0, 0, 0, .12), 0 1px rgba(255 , 255, 255, 0.12); -} -#ToolPanelNotebook .entry:focused:selected { - color: @text-hl-color; - background-color: @accent-color; -} -#ToolPanelNotebook .entry:not(:focused):not(:insensitive) {/*Workaround*/ - color: @text-tbEntry; - background-color: transparent; -} -#ToolPanelNotebook .entry:not(:selected):not(:insensitive) { - color: @text-tbEntry; - background-color: rgba(255,255,255,.12); -} - -#MetaPanelNotebook .entry { - color: @text-color; - background-color: @bg-entry-IPTC; - border: none; - border-radius: 0; - padding: 2px 4px; - box-shadow: none; -} -#MetaPanelNotebook .entry:focused:selected { - color: @text-hl-color; - background-color: @accent-color; - box-shadow: none; -} -#MetaPanelNotebook .entry:not(:focused):not(:insensitive) {/*Workaround*/ - color: @text-color; - background-color: transparent; - box-shadow: none; -} -#MetaPanelNotebook .entry:not(:selected):not(:insensitive) { - color: @text-color; - background-color: @bg-entry-IPTC; - box-shadow: none; -} -/*** end ***/ - -/*** Buttons ***/ -.button { - background-color: transparent; - border: 1px solid @bg-button-border; - border-radius: 0; - padding: 3px 4px; - box-shadow: inset 0 1px rgba(242, 242, 242, 0.1), 0 1px rgba(242, 242, 242, 0.1); - background-image: linear-gradient(to bottom, rgba(0,0,0,.05), rgba(0,0,0,.14) 40%, rgba(0,0,0,.26)); -} -.message-dialog .dialog-action-area .button { - padding: 6px; - } - -.button.Left + .button:not(.image-button).Right { - border-left: none; -} -GtkComboBox .button { - padding: 4px 3px; -} -#ToolPanelNotebook .button, -GtkDialog .button, -#BatchQueueButtonsMainContainer .button { - padding: 0px 3px; -} -#BatchQueueButtons .button { - padding-top: 6px; - padding-bottom: 6px -} -#BeforeAfterContainer .button { - padding: 2px; -} - - /*** Fix: Space between first Retinex Comboboxes ***/ -GtkLabel + GtkComboBox + GtkComboBox { - padding-left: 4px; -} - -.text-button { - padding: 0 2px 0 0; -} -#PartialPaste .text-button { - padding: 0 8px 0 2px; - -GtkCheckButton-indicator-spacing: 1; -} -#ToolPanelNotebook GtkFrame > .text-button { - padding: 0 3px 0 0; -} - -.button.text-button { - padding: 5px 12px; -} -#ToolPanelNotebook .button.text-button, -#PrefNotebook .button.text-button, -GtkFileChooserWidget .button.text-button, -#RightNotebook .button.text-button { - padding: 3px 4px; -} -GtkPopover .button.text-button { - padding: 2px 4px; -} - -.spinbutton .button { - background-image: none; - background-color: transparent; - border: none; - border-radius: 0; - padding: 2px; - box-shadow: none; -} -#ToolPanelNotebook .spinbutton .button { - padding: 0; -} - -.button:hover { - background-color: rgba(0, 0, 0,.18); -} -#ToolPanelNotebook .spinbutton .button:hover { - background-color: @bg-spin-button-hover; -} - -.button:active, -.button:checked { - background-image: linear-gradient(to bottom, rgb(41,41,41), rgb(37,37,37) 40%, rgb(25,25,25)); - background-color: transparent; - border-color: black; -} - -#MainNotebook > GtkGrid .button { - padding: 2px; - border: 4px solid @bg-dark-grey; - background-color: transparent; - background-image: none; - box-shadow: none; -} -#MainNotebook tab .button { - padding: 1px; - border-top: 4px solid @bg-dark-grey; - border-bottom: 4px solid @bg-dark-grey; - border-left: none; - border-right: none; - background-color: transparent; - background-image: none; - box-shadow: none; -} -#MainNotebook > GtkGrid .button:hover, -#MainNotebook tab .button:hover { - background-color: rgba(255,255,255,.20); - box-shadow: inset 0 1px rgba(255, 255, 255, 0.12); - background-image: linear-gradient(to bottom, rgba(0,0,0,.05), rgba(0,0,0,.12) 40%, rgba(0,0,0,.24)); -} -#MainNotebook > GtkGrid .button:active, -#MainNotebook tab .button:active { - background-color: rgba(255,255,255,.27); - box-shadow: inset 0 1px rgba(255, 255, 255, 0.12); - background-image: linear-gradient(to bottom, rgba(0,0,0,.05), rgba(0,0,0,.12) 40%, rgba(0,0,0,.24)); -} -.view .button { - background-color: rgb(20,20,20); - padding: 1px 5px 2px; - background-image: none; - border-color: black; - box-shadow: none; -} -.menu .button.bottom, -.menu .button.bottom:insensitive { - background-color: rgb(20,20,20); - border-color: @accent-color; - border-width: 0 1px 1px 1px; - background-image: none; - box-shadow: none; -} -.menu .button.top, -.menu .button.top:insensitive { - background-color: rgb(20,20,20); - border-color: @accent-color; - border-width: 1px 1px 0 1px; - background-image: none; - box-shadow: none; -} -#fullButton, -#histButton { - padding: 5px; - border: none; - background-color: @bg-dark-grey; - background-image: none; - box-shadow: none; -} -/*** end ***/ - -/*** Check & Radio buttons ***/ -.check, -.check row { - -gtk-icon-source: url("images/twb/checkbox-unchecked.png"); -} -.check:checked, -.check row:checked { - -gtk-icon-source: url("images/twb/checkbox-checked.png"); -} -.check:insensitive, -.check row:insensitive { - -gtk-icon-source: url("images/twb/checkbox-unchecked-disabled.png"); -} -.check:checked:insensitive, -.check row:checked:insensitive { - -gtk-icon-source: url("images/twb/checkbox-checked-disabled.png"); -} -.check:inconsistent, -.check row:inconsistent { - -gtk-icon-source: url("images/twb/checkbox-inconsistent.png"); -} -.check:inconsistent:insensitive, -.check row:inconsistent:insensitive { - -gtk-icon-source: url("images/twb/checkbox-inconsistent-disabled.png"); -} - -.radio, -.radio row { - -gtk-icon-source: url("images/twb/radio-unchecked.png"); -} -.radio:checked, -.radio row:checked { - -gtk-icon-source: url("images/twb/radio-checked.png"); -} -.radio:insensitive, -.radio row:insensitive { - -gtk-icon-source: url("images/twb/radio-unchecked-disabled.png"); -} -.radio:checked:insensitive, -.radio row:checked:insensitive { - -gtk-icon-source: url("images/twb/radio-checked-disabled.png"); -} -.radio:inconsistent, -.radio row:inconsistent { - -gtk-icon-source: url("images/twb/radio-inconsistent.png"); -} -.radio:inconsistent:insensitive, -.radio row:inconsistent:insensitive { - -gtk-icon-source: url("images/twb/radio-inconsistent-disabled.png"); -} -/*** end ***/ - -/*** Disabled Items ***/ - -*:insensitive, -#ToolPanelNotebook *:insensitive { - color: rgb(128,128,128); - box-shadow: none; -} -#ToolPanelNotebook .entry:insensitive { - color: rgb(144,144,144); - background-color: rgba(255,255,255,.06); - box-shadow: none; -} -.button:insensitive { - background-image: none; - background-color: rgba(0,0,0,.10); - border-color: rgba(0,0,0,.30); - box-shadow: none; -} -.spinbutton .button:insensitive { - background-image: none; - background-color: transparent; - border: none; - box-shadow: none; -} -.scale.slider:insensitive, -.scale.trough.highlight:insensitive, -.scale.trough:insensitive, -#ToolPanelNotebook .scale.slider:insensitive, -#ToolPanelNotebook .scale.trough.highlight:insensitive, -#ToolPanelNotebook .scale.trough:insensitive { - background-color: rgb(65,65,65); - box-shadow: none; - background-image: none; -} -/*** end ***/ diff --git a/rtdata/themes/TooWaBlue-GTK3-20_.css b/rtdata/themes/TooWaBlue.css similarity index 99% rename from rtdata/themes/TooWaBlue-GTK3-20_.css rename to rtdata/themes/TooWaBlue.css index ba25e70b7..4d7504dc5 100644 --- a/rtdata/themes/TooWaBlue-GTK3-20_.css +++ b/rtdata/themes/TooWaBlue.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/TooWaGrey - Average Surround-GTK3-20_.css b/rtdata/themes/TooWaGrey - Average Surround.css similarity index 98% rename from rtdata/themes/TooWaGrey - Average Surround-GTK3-20_.css rename to rtdata/themes/TooWaGrey - Average Surround.css index 8f045e206..1574edf03 100644 --- a/rtdata/themes/TooWaGrey - Average Surround-GTK3-20_.css +++ b/rtdata/themes/TooWaGrey - Average Surround.css @@ -20,7 +20,7 @@ /*****************************************/ -/**/ @import "TooWaBlue-GTK3-20_.css"; /**/ +/**/ @import "TooWaBlue.css"; /**/ /*****************************************/ /*** Change me *** rgb(red,green,blue) *** allowed values from 0 to 255 for each color ***/ diff --git a/rtdata/themes/TooWaGrey - Bright-GTK3-20_.css b/rtdata/themes/TooWaGrey - Bright.css similarity index 98% rename from rtdata/themes/TooWaGrey - Bright-GTK3-20_.css rename to rtdata/themes/TooWaGrey - Bright.css index 579ca7a00..34120efe7 100644 --- a/rtdata/themes/TooWaGrey - Bright-GTK3-20_.css +++ b/rtdata/themes/TooWaGrey - Bright.css @@ -20,7 +20,7 @@ /*****************************************/ -/**/ @import "TooWaBlue-GTK3-20_.css"; /**/ +/**/ @import "TooWaBlue.css"; /**/ /*****************************************/ /*** Change me *** rgb(red,green,blue) *** allowed values from 0 to 255 for each color ***/ diff --git a/rtdata/themes/TooWaGrey - Dark-GTK3-20_.css b/rtdata/themes/TooWaGrey - Dark.css similarity index 98% rename from rtdata/themes/TooWaGrey - Dark-GTK3-20_.css rename to rtdata/themes/TooWaGrey - Dark.css index 8d6d05152..9ef4dda31 100644 --- a/rtdata/themes/TooWaGrey - Dark-GTK3-20_.css +++ b/rtdata/themes/TooWaGrey - Dark.css @@ -20,7 +20,7 @@ /*****************************************/ -/**/ @import "TooWaBlue-GTK3-20_.css"; /**/ +/**/ @import "TooWaBlue.css"; /**/ /*****************************************/ /*** Change me *** rgb(red,green,blue) *** allowed values from 0 to 255 for each color ***/ diff --git a/rtdata/themes/TooWaGrey-GTK3-20_.css b/rtdata/themes/TooWaGrey.css similarity index 98% rename from rtdata/themes/TooWaGrey-GTK3-20_.css rename to rtdata/themes/TooWaGrey.css index 0b29ed2e7..ba3910d9c 100644 --- a/rtdata/themes/TooWaGrey-GTK3-20_.css +++ b/rtdata/themes/TooWaGrey.css @@ -20,7 +20,7 @@ /*****************************************/ -/**/ @import "TooWaBlue-GTK3-20_.css"; /**/ +/**/ @import "TooWaBlue.css"; /**/ /*****************************************/ /*** Change me *** rgb(red,green,blue) *** allowed values from 0 to 255 for each color ***/ diff --git a/rtdata/themes/size - Legacy.css b/rtdata/themes/common/size - Legacy.css similarity index 99% rename from rtdata/themes/size - Legacy.css rename to rtdata/themes/common/size - Legacy.css index 089a909ee..290b95d8c 100644 --- a/rtdata/themes/size - Legacy.css +++ b/rtdata/themes/common/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/common/size.css similarity index 99% rename from rtdata/themes/size.css rename to rtdata/themes/common/size.css index 675ed51c2..5f5e64120 100644 --- a/rtdata/themes/size.css +++ b/rtdata/themes/common/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/rtdata/themes/images/svg/twb/checkbox-checked-disabled.svg b/rtdata/themes/images/svg/twb/checkbox-checked-disabled.svg deleted file mode 100644 index 1103ee917..000000000 --- a/rtdata/themes/images/svg/twb/checkbox-checked-disabled.svg +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - diff --git a/rtdata/themes/images/svg/twb/checkbox-checked.svg b/rtdata/themes/images/svg/twb/checkbox-checked.svg deleted file mode 100644 index c7d28d45d..000000000 --- a/rtdata/themes/images/svg/twb/checkbox-checked.svg +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - diff --git a/rtdata/themes/images/svg/twb/checkbox-inconsistent-disabled.svg b/rtdata/themes/images/svg/twb/checkbox-inconsistent-disabled.svg deleted file mode 100644 index ee55c4f6f..000000000 --- a/rtdata/themes/images/svg/twb/checkbox-inconsistent-disabled.svg +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - diff --git a/rtdata/themes/images/svg/twb/checkbox-inconsistent.svg b/rtdata/themes/images/svg/twb/checkbox-inconsistent.svg deleted file mode 100644 index e0f5bd362..000000000 --- a/rtdata/themes/images/svg/twb/checkbox-inconsistent.svg +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - diff --git a/rtdata/themes/images/svg/twb/checkbox-unchecked-disabled.svg b/rtdata/themes/images/svg/twb/checkbox-unchecked-disabled.svg deleted file mode 100644 index 635dae59b..000000000 --- a/rtdata/themes/images/svg/twb/checkbox-unchecked-disabled.svg +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/rtdata/themes/images/svg/twb/checkbox-unchecked.svg b/rtdata/themes/images/svg/twb/checkbox-unchecked.svg deleted file mode 100644 index 0adfe66cc..000000000 --- a/rtdata/themes/images/svg/twb/checkbox-unchecked.svg +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/rtdata/themes/images/svg/twb/radio-checked-disabled.svg b/rtdata/themes/images/svg/twb/radio-checked-disabled.svg deleted file mode 100644 index f415b4be7..000000000 --- a/rtdata/themes/images/svg/twb/radio-checked-disabled.svg +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - diff --git a/rtdata/themes/images/svg/twb/radio-checked.svg b/rtdata/themes/images/svg/twb/radio-checked.svg deleted file mode 100644 index c6f9b4ee8..000000000 --- a/rtdata/themes/images/svg/twb/radio-checked.svg +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - diff --git a/rtdata/themes/images/svg/twb/radio-inconsistent-disabled.svg b/rtdata/themes/images/svg/twb/radio-inconsistent-disabled.svg deleted file mode 100644 index e41f3ff9c..000000000 --- a/rtdata/themes/images/svg/twb/radio-inconsistent-disabled.svg +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - diff --git a/rtdata/themes/images/svg/twb/radio-inconsistent.svg b/rtdata/themes/images/svg/twb/radio-inconsistent.svg deleted file mode 100644 index 65ea2a8e8..000000000 --- a/rtdata/themes/images/svg/twb/radio-inconsistent.svg +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - diff --git a/rtdata/themes/images/svg/twb/radio-unchecked-disabled.svg b/rtdata/themes/images/svg/twb/radio-unchecked-disabled.svg deleted file mode 100644 index 60098048f..000000000 --- a/rtdata/themes/images/svg/twb/radio-unchecked-disabled.svg +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/rtdata/themes/images/svg/twb/radio-unchecked.svg b/rtdata/themes/images/svg/twb/radio-unchecked.svg deleted file mode 100644 index 8b448f3cf..000000000 --- a/rtdata/themes/images/svg/twb/radio-unchecked.svg +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/rtdata/themes/images/twb/checkbox-checked-disabled.png b/rtdata/themes/images/twb/checkbox-checked-disabled.png deleted file mode 100644 index 8458b5987..000000000 Binary files a/rtdata/themes/images/twb/checkbox-checked-disabled.png and /dev/null differ diff --git a/rtdata/themes/images/twb/checkbox-checked.png b/rtdata/themes/images/twb/checkbox-checked.png deleted file mode 100644 index 83d3744d3..000000000 Binary files a/rtdata/themes/images/twb/checkbox-checked.png and /dev/null differ diff --git a/rtdata/themes/images/twb/checkbox-inconsistent-disabled.png b/rtdata/themes/images/twb/checkbox-inconsistent-disabled.png deleted file mode 100644 index 96c5fbe5f..000000000 Binary files a/rtdata/themes/images/twb/checkbox-inconsistent-disabled.png and /dev/null differ diff --git a/rtdata/themes/images/twb/checkbox-inconsistent.png b/rtdata/themes/images/twb/checkbox-inconsistent.png deleted file mode 100644 index 373f218be..000000000 Binary files a/rtdata/themes/images/twb/checkbox-inconsistent.png and /dev/null differ diff --git a/rtdata/themes/images/twb/checkbox-unchecked-disabled.png b/rtdata/themes/images/twb/checkbox-unchecked-disabled.png deleted file mode 100644 index 985dd07cc..000000000 Binary files a/rtdata/themes/images/twb/checkbox-unchecked-disabled.png and /dev/null differ diff --git a/rtdata/themes/images/twb/checkbox-unchecked.png b/rtdata/themes/images/twb/checkbox-unchecked.png deleted file mode 100644 index 747a9c8c3..000000000 Binary files a/rtdata/themes/images/twb/checkbox-unchecked.png and /dev/null differ diff --git a/rtdata/themes/images/twb/radio-checked-disabled.png b/rtdata/themes/images/twb/radio-checked-disabled.png deleted file mode 100644 index 0947a5e06..000000000 Binary files a/rtdata/themes/images/twb/radio-checked-disabled.png and /dev/null differ diff --git a/rtdata/themes/images/twb/radio-checked.png b/rtdata/themes/images/twb/radio-checked.png deleted file mode 100644 index 48cfc16ae..000000000 Binary files a/rtdata/themes/images/twb/radio-checked.png and /dev/null differ diff --git a/rtdata/themes/images/twb/radio-inconsistent-disabled.png b/rtdata/themes/images/twb/radio-inconsistent-disabled.png deleted file mode 100644 index a59b179e1..000000000 Binary files a/rtdata/themes/images/twb/radio-inconsistent-disabled.png and /dev/null differ diff --git a/rtdata/themes/images/twb/radio-inconsistent.png b/rtdata/themes/images/twb/radio-inconsistent.png deleted file mode 100644 index abe1e28ba..000000000 Binary files a/rtdata/themes/images/twb/radio-inconsistent.png and /dev/null differ diff --git a/rtdata/themes/images/twb/radio-unchecked-disabled.png b/rtdata/themes/images/twb/radio-unchecked-disabled.png deleted file mode 100644 index 6cbc076f2..000000000 Binary files a/rtdata/themes/images/twb/radio-unchecked-disabled.png and /dev/null differ diff --git a/rtdata/themes/images/twb/radio-unchecked.png b/rtdata/themes/images/twb/radio-unchecked.png deleted file mode 100644 index e28db04f9..000000000 Binary files a/rtdata/themes/images/twb/radio-unchecked.png and /dev/null differ diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index c17826623..05b3cb824 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 = 2 * ((border_crop + 1) / 2); // Round up to nearest even integer. //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..6f329f7be 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}" @@ -117,6 +120,7 @@ set(RTENGINESOURCEFILES imagedimensions.cc imagefloat.cc imageio.cc + imagesource.cc improccoordinator.cc improcfun.cc impulse_denoise.cc @@ -143,6 +147,7 @@ set(RTENGINESOURCEFILES lcp.cc lmmse_demosaic.cc loadinitial.cc + metadata.cc munselllch.cc myfile.cc panasonic_decoders.cc @@ -223,7 +228,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 +245,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/FTblockDN.cc b/rtengine/FTblockDN.cc index 7477c5d08..4d8750929 100644 --- a/rtengine/FTblockDN.cc +++ b/rtengine/FTblockDN.cc @@ -665,7 +665,7 @@ BENCHFUN Color::gammanf2lut(igamcurve, igam, 32768.f, 65535.f); } - const float gain = std::pow(2.0, expcomp); + const float gain = dnparams.autoGain ? static_cast(std::pow(2.0, expcomp)) : 1.f; const double params_Ldetail = std::min(dnparams.Ldetail, 99.9); // max out to avoid div by zero when using noisevar_Ldetail as divisor const float noisevar_Ldetail = SQR((SQR(100. - params_Ldetail) + 50.0 * (100.0 - params_Ldetail)) * TS * 0.5); @@ -1246,7 +1246,9 @@ BENCHFUN chresid = sqrt(chresid / (6 * (levwav))); highresi = chresid + 0.66f * (sqrt(chmaxresid) - chresid); //evaluate sigma nresi = chresid; - printf("Nresi=%f Highresi=%f lev=%i\n", (double) nresi, (double) highresi, levwav); + if (settings->verbose) { + printf("Nresi=%f Highresi=%f lev=%i\n", (double) nresi, (double) highresi, levwav); + } } bdecomp->reconstruct(labdn->b[0]); @@ -1773,7 +1775,6 @@ BENCHFUN //median 3x3 in complement on RGB if (dnparams.methodmed == "RGB" && dnparams.median) { -//printf("RGB den\n"); int wid = dst->getWidth(), hei = dst->getHeight(); float** tm; tm = new float*[hei]; @@ -2106,7 +2107,7 @@ float ImProcFunctions::Mad(const float * DataList, const int datalen) //calculate histogram of absolute values of wavelet coeffs for (int i = 0; i < datalen; ++i) { - histo[static_cast(rtengine::min(32768.f, fabsf(DataList[i])))]++; + histo[static_cast(rtengine::min(32767.f, fabsf(DataList[i])))]++; } //find median of histogram @@ -2381,7 +2382,10 @@ bool ImProcFunctions::WaveletDenoiseAll_BiShrinkL(wavelet_decomposition& Wavelet bool ImProcFunctions::WaveletDenoiseAll_BiShrinkAB(wavelet_decomposition& WaveletCoeffs_L, wavelet_decomposition& WaveletCoeffs_ab, float *noisevarchrom, float madL[8][3], float *variC, int local, float noisevar_ab, const bool useNoiseCCurve, bool autoch, bool denoiseMethodRgb, int denoiseNestedLevels) { int maxlvl = WaveletCoeffs_L.maxlevel(); - printf("Ftblockdn ab bishrink\n"); + + if (settings->verbose) { + printf("Ftblockdn ab bishrink\n"); + } if (local == 1) { maxlvl = 6; //for local denoise @@ -2463,7 +2467,6 @@ bool ImProcFunctions::WaveletDenoiseAll_BiShrinkAB(wavelet_decomposition& Wavele float* const* WavCoeffs_ab = WaveletCoeffs_ab.level_coeffs(lvl); if (lvl == maxlvl - 1) { - //printf("Shrink ab bis\n"); ShrinkAllAB(WaveletCoeffs_L, WaveletCoeffs_ab, buffer, lvl, dir, noisevarchrom, noisevar_ab, useNoiseCCurve, autoch, denoiseMethodRgb, madL[lvl], nullptr, 0, madab[lvl], true); } else { //simple wavelet shrinkage @@ -3287,7 +3290,7 @@ void ImProcFunctions::RGB_denoise_info(Imagefloat * src, Imagefloat * provicalc, bool denoiseMethodRgb = (dnparams.dmethod == "RGB"); - const float gain = pow(2.0f, float(expcomp)); + const float gain = dnparams.autoGain ? pow(2.0f, float(expcomp)) : 1.f; int tilesize = 0; int overlap = 0; diff --git a/rtengine/PF_correct_RT.cc b/rtengine/PF_correct_RT.cc index 15b7b21ee..5bc04c3ff 100644 --- a/rtengine/PF_correct_RT.cc +++ b/rtengine/PF_correct_RT.cc @@ -27,6 +27,8 @@ // //////////////////////////////////////////////////////////////// +#include + #include "gauss.h" #include "improcfun.h" #include "cieimage.h" @@ -134,6 +136,8 @@ void ImProcFunctions::PF_correct_RT(LabImage * lab, double radius, int thresh) const float threshfactor = 1.f / (SQR(thresh / 33.f) * chromavef * 5.0f + chromavef); const int halfwin = std::ceil(2 * radius) + 1; + const LabImage labOriginal(*lab, multiThread); + // Issue 1674: // often, colour fringe is not evenly distributed, e.g. a lot in contrasty regions and none in the sky. // so it's better to schedule dynamic and let every thread only process 16 rows, to avoid running big threads out of work @@ -156,8 +160,8 @@ void ImProcFunctions::PF_correct_RT(LabImage * lab, double radius, int thresh) for (int j1 = 0; j1 < j + halfwin; j1++) { // neighbourhood average of pixels weighted by chrominance const float wt = fringe[i1 * width + j1]; - atot += wt * lab->a[i1][j1]; - btot += wt * lab->b[i1][j1]; + atot += wt * labOriginal.a[i1][j1]; + btot += wt * labOriginal.b[i1][j1]; norm += wt; } @@ -176,8 +180,8 @@ void ImProcFunctions::PF_correct_RT(LabImage * lab, double radius, int thresh) for (int j1 = j - halfwin + 1; j1 < j + halfwin; j1++) { // neighbourhood average of pixels weighted by chrominance const float wt = fringe[i1 * width + j1]; - atot += wt * lab->a[i1][j1]; - btot += wt * lab->b[i1][j1]; + atot += wt * labOriginal.a[i1][j1]; + btot += wt * labOriginal.b[i1][j1]; norm += wt; } @@ -196,8 +200,8 @@ void ImProcFunctions::PF_correct_RT(LabImage * lab, double radius, int thresh) for (int j1 = j - halfwin + 1; j1 < width; j1++) { // neighbourhood average of pixels weighted by chrominance const float wt = fringe[i1 * width + j1]; - atot += wt * lab->a[i1][j1]; - btot += wt * lab->b[i1][j1]; + atot += wt * labOriginal.a[i1][j1]; + btot += wt * labOriginal.b[i1][j1]; norm += wt; } @@ -525,6 +529,20 @@ void ImProcFunctions::Badpixelscam(CieImage * ncie, double radius, int thresh, i } } + std::vector sh_p_orig(static_cast::size_type>(width) * height); + const auto sh_p_orig_at = [&sh_p_orig, width](int y, int x) { + return sh_p_orig[y * width + x]; + }; + +#ifdef _OPENMP + #pragma omp parallel for +#endif + for (int i = 0; i < height; i++) { + for (int j = 0; j < width; j++) { + sh_p_orig[i * width + j] = ncie->sh_p[i][j]; + } + } + #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) #endif @@ -538,10 +556,10 @@ void ImProcFunctions::Badpixelscam(CieImage * ncie, double radius, int thresh, i for (int i1 = std::max(0, i - 2); i1 <= std::min(i + 2, height - 1); i1++) { for (int j1 = 0; j1 <= j + 2; j1++) { if (!badpixb[i1 * width + j1]) { - sum += ncie->sh_p[i1][j1]; + sum += sh_p_orig_at(i1, j1); tot += 1.f; - const float dirsh = 1.f / (SQR(ncie->sh_p[i1][j1] - ncie->sh_p[i][j]) + eps); - shsum += dirsh * ncie->sh_p[i1][j1]; + const float dirsh = 1.f / (SQR(sh_p_orig_at(i1, j1) - sh_p_orig_at(i, j)) + eps); + shsum += dirsh * sh_p_orig_at(i1, j1); norm += dirsh; } } @@ -561,10 +579,10 @@ void ImProcFunctions::Badpixelscam(CieImage * ncie, double radius, int thresh, i for (int i1 = std::max(0, i - 2); i1 <= std::min(i + 2, height - 1); i1++) { for (int j1 = j - 2; j1 <= j + 2; j1++) { if (!badpixb[i1 * width + j1]) { - sum += ncie->sh_p[i1][j1]; + sum += sh_p_orig_at(i1, j1); tot += 1.f; - const float dirsh = 1.f / (SQR(ncie->sh_p[i1][j1] - ncie->sh_p[i][j]) + eps); - shsum += dirsh * ncie->sh_p[i1][j1]; + const float dirsh = 1.f / (SQR(sh_p_orig_at(i1, j1) - sh_p_orig_at(i, j)) + eps); + shsum += dirsh * sh_p_orig_at(i1, j1); norm += dirsh; } } @@ -584,10 +602,10 @@ void ImProcFunctions::Badpixelscam(CieImage * ncie, double radius, int thresh, i for (int i1 = std::max(0, i - 2); i1 <= std::min(i + 2, height - 1); i1++) { for (int j1 = j - 2; j1 < width; j1++) { if (!badpixb[i1 * width + j1]) { - sum += ncie->sh_p[i1][j1]; + sum += sh_p_orig_at(i1, j1); tot += 1.f; - const float dirsh = 1.f / (SQR(ncie->sh_p[i1][j1] - ncie->sh_p[i][j]) + eps); - shsum += dirsh * ncie->sh_p[i1][j1]; + const float dirsh = 1.f / (SQR(sh_p_orig_at(i1, j1) - sh_p_orig_at(i, j)) + eps); + shsum += dirsh * sh_p_orig_at(i1, j1); norm += dirsh; } } @@ -864,6 +882,8 @@ void ImProcFunctions::BadpixelsLab(LabImage * lab, double radius, int thresh, fl const std::unique_ptr badpix(new float[width * height]); + const LabImage labOriginal(*lab, multiThread); + if (radius >= 0.5) { // for gauss sigma less than 0.25 gaussianblur() just calls memcpy => nothing to do here //luma badpixels // for bad pixels in L channel we need 0 / != 0 information. Use 1 byte per pixel instead of 4 to reduce memory pressure @@ -956,10 +976,10 @@ void ImProcFunctions::BadpixelsLab(LabImage * lab, double radius, int thresh, fl for (int i1 = std::max(0, i - 2); i1 <= std::min(i + 2, height - 1); i1++) { for (int j1 = 0; j1 <= j + 2; j1++) { if (!badpixb[i1 * width + j1]) { - sum += lab->L[i1][j1]; + sum += labOriginal.L[i1][j1]; tot += 1.f; - const float dirsh = 1.f / (SQR(lab->L[i1][j1] - lab->L[i][j]) + eps); - shsum += dirsh * lab->L[i1][j1]; + const float dirsh = 1.f / (SQR(labOriginal.L[i1][j1] - labOriginal.L[i][j]) + eps); + shsum += dirsh * labOriginal.L[i1][j1]; norm += dirsh; } } @@ -979,10 +999,10 @@ void ImProcFunctions::BadpixelsLab(LabImage * lab, double radius, int thresh, fl for (int i1 = std::max(0, i - 2); i1 <= std::min(i + 2, height - 1); i1++) { for (int j1 = j - 2; j1 <= j + 2; j1++) { if (!badpixb[i1 * width + j1]) { - sum += lab->L[i1][j1]; + sum += labOriginal.L[i1][j1]; tot += 1.f; - const float dirsh = 1.f / (SQR(lab->L[i1][j1] - lab->L[i][j]) + eps); - shsum += dirsh * lab->L[i1][j1]; + const float dirsh = 1.f / (SQR(labOriginal.L[i1][j1] - labOriginal.L[i][j]) + eps); + shsum += dirsh * labOriginal.L[i1][j1]; norm += dirsh; } } @@ -1002,10 +1022,10 @@ void ImProcFunctions::BadpixelsLab(LabImage * lab, double radius, int thresh, fl for (int i1 = std::max(0, i - 2); i1 <= std::min(i + 2, height - 1); i1++) { for (int j1 = j - 2; j1 < width; j1++) { if (!badpixb[i1 * width + j1]) { - sum += lab->L[i1][j1]; + sum += labOriginal.L[i1][j1]; tot += 1.f; - const float dirsh = 1.f / (SQR(lab->L[i1][j1] - lab->L[i][j]) + eps); - shsum += dirsh * lab->L[i1][j1]; + const float dirsh = 1.f / (SQR(labOriginal.L[i1][j1] - labOriginal.L[i][j]) + eps); + shsum += dirsh * labOriginal.L[i1][j1]; norm += dirsh; } } @@ -1095,8 +1115,8 @@ void ImProcFunctions::BadpixelsLab(LabImage * lab, double radius, int thresh, fl for (int i1 = std::max(0, i - halfwin + 1); i1 < std::min(height, i + halfwin); i1++) { for (int j1 = 0; j1 < j + halfwin; j1++) { const float wt = badpix[i1 * width + j1]; - atot += wt * lab->a[i1][j1]; - btot += wt * lab->b[i1][j1]; + atot += wt * labOriginal.a[i1][j1]; + btot += wt * labOriginal.b[i1][j1]; norm += wt; } } @@ -1118,15 +1138,15 @@ void ImProcFunctions::BadpixelsLab(LabImage * lab, double radius, int thresh, fl for (int i1 = std::max(0, i - halfwin + 1); i1 < std::min(height, i + halfwin); i1++) { for (int j1 = j - halfwin + 1; j1 < j + halfwin; j1++) { const vfloat wtv = LVFU(badpix[i1 * width + j1]); - atotv += wtv * LVFU(lab->a[i1][j1]); - btotv += wtv * LVFU(lab->b[i1][j1]); + atotv += wtv * LVFU(labOriginal.a[i1][j1]); + btotv += wtv * LVFU(labOriginal.b[i1][j1]); normv += wtv; } } selMask = vandm(selMask, vmaskf_lt(SQRV(atotv) + SQR(btotv), chromv * SQRV(normv))); if (_mm_movemask_ps(reinterpret_cast(selMask))) { - const vfloat aOrig = LVFU(lab->a[i][j]); - const vfloat bOrig = LVFU(lab->b[i][j]); + const vfloat aOrig = LVFU(labOriginal.a[i][j]); + const vfloat bOrig = LVFU(labOriginal.b[i][j]); STVFU(lab->a[i][j], vself(selMask, atotv / normv, aOrig)); STVFU(lab->b[i][j], vself(selMask, btotv / normv, bOrig)); } @@ -1141,8 +1161,8 @@ void ImProcFunctions::BadpixelsLab(LabImage * lab, double radius, int thresh, fl for (int i1 = std::max(0, i - halfwin + 1); i1 < std::min(height, i + halfwin); i1++) { for (int j1 = j - halfwin + 1; j1 < j + halfwin; j1++) { const float wt = badpix[i1 * width + j1]; - atot += wt * lab->a[i1][j1]; - btot += wt * lab->b[i1][j1]; + atot += wt * labOriginal.a[i1][j1]; + btot += wt * labOriginal.b[i1][j1]; norm += wt; } } @@ -1161,8 +1181,8 @@ void ImProcFunctions::BadpixelsLab(LabImage * lab, double radius, int thresh, fl for (int i1 = std::max(0, i - halfwin + 1); i1 < std::min(height, i + halfwin); i1++) { for (int j1 = j - halfwin + 1; j1 < width; j1++) { const float wt = badpix[i1 * width + j1]; - atot += wt * lab->a[i1][j1]; - btot += wt * lab->b[i1][j1]; + atot += wt * labOriginal.a[i1][j1]; + btot += wt * labOriginal.b[i1][j1]; norm += wt; } } 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 352dc26e1..f834acdbd 100644 --- a/rtengine/camconst.json +++ b/rtengine/camconst.json @@ -389,13 +389,18 @@ Camera constants: "ranges": { // black levels are read from raw masked pixels // white levels are same for all colors all ISOs, but safety margin vary on ISO + // actually not, 160 & 320 & 640 seem to have different white levels per color "white": [ { "iso": 50, "levels": 16350 }, // typical for all ISOs: 16383, stdev 2.25 { "iso": 100, "levels": 16350 }, // stdev 2.25 - { "iso": [ 125, 160, 200, 250 ], "levels": 16340 }, // stdev 2.5 - { "iso": [ 320, 400, 500 ], "levels": 16330 }, // stdev 2.95 - { "iso": [ 640, 800, 1000 ], "levels": 16320 }, // stdev x, 4.0 , x - { "iso": [ 1250, 1600, 2000 ], "levels": 16300 }, // stdev x, 6.0 , x + { "iso": [ 125, 200, 250 ], "levels": 16340 }, // stdev 2.5 + { "iso": 160, "levels": [ 16340, 14450, 15600 ] }, // based on CarVac's testing + { "iso": [ 400, 500 ], "levels": 16330 }, // stdev 2.95 + { "iso": 320, "levels": [ 16330, 16000, 16330 ] }, // based on CarVac's testing + { "iso": [ 800, 1000 ], "levels": 16320 }, // stdev x, 4.0 , x + { "iso": 640, "levels": [ 16320, 15800, 16320 ] }, // based on CarVac's testing + { "iso": [ 1600, 2000 ], "levels": 16300 }, // stdev x, 6.0 , x + { "iso": 1250, "levels": [ 16300, 16050, 16300 ] }, // based on CarVac's testing { "iso": [ 2500, 3200, 4000 ], "levels": 16250 }, // STDEV x, 9.8 , x { "iso": [ 5000, 6400, 8000 ], "levels": 16150 }, // stdev x, 17, x { "iso": [ 10000, 12800, 16000 ], "levels": 16100 }, // stdev x, 34 , x @@ -586,7 +591,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 +655,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 @@ -1049,6 +1058,11 @@ Camera constants: } }, + { // Quality C + "make_model": [ "Canon EOS Rebel SL3", "Canon EOS 250D", "Canon EOS Kiss X10" ], + "dcraw_matrix": [ 9079, -1923, -1236, -4677, 12454, 2492, -922, 2319, 5565 ] + }, + // Canon low-range DSLRs // Canon EOS 1200D/Rebel T5/Kiss X70" is upper at the same item as 600D/T3i/X5 @@ -1213,14 +1227,26 @@ Camera constants: { // Quality C, only raw crop "make_model": [ "Canon EOS M6 Mark II", "Canon EOS 90D" ], - "raw_crop": [ 144, 72, 6984, 4660 ] + "raw_crop": [ 144, 72, 6984, 4660 ], + "masked_areas": [ 76, 40, 4580, 140 ] }, - { // 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 +1256,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 +1267,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 @@ -1259,10 +1285,10 @@ Camera constants: }, { // Quality C - "make_model": "Canon EOS R6m2", + "make_model": ["Canon EOS R6m2", "Canon EOS R8"], "dcraw_matrix": [9539, -2795, -1224, -4175, 11998, 2458, -465, 1755, 6048], "raw_crop": [ - {"frame": [6188, 4120], "crop": [154, 96, 6028, 4024]}, + {"frame": [6188, 4120], "crop": [154, 96, 6024, 4024]}, {"frame": [3936, 2612], "crop": [156, 96, 3780, 2516]} ], "masked_areas": [ @@ -1348,7 +1374,7 @@ Camera constants: }, { // Quality B, - "make_model": [ "Canon PowerShot G5 X", "Canon PowerShot G7 X Mark II" ], + "make_model": [ "Canon PowerShot G5 X", "Canon PowerShot G9 X", "Canon PowerShot G7 X Mark II" ], "dcraw_matrix": [ 9602,-3823,-937,-2984,11495,1675,-407,1414,5049 ], // DNG v13.2 //"raw_crop": [ 116, 24, 5504, 3680 ], // Sensor size 5632x3710. Largest useful frame 120-5616X28-3702 = 5504x3682, 4pix RTborders, Left Border 120-4, Top border 28-4 "raw_crop": [ 128, 36, 5480, 3656 ], // Default official 3/2 frame 5472X3648, 4pix borders, Left Border 132-4, Top border 40-4 @@ -1570,7 +1596,10 @@ Camera constants: { // Quality A, samples provided by Daniel Catalina (#5839) and pi99y (#5860) "make_model": [ "FUJIFILM X-T3", "FUJIFILM X-PRO3" ], "dcraw_matrix": [ 13426,-6334,-1177,-4244,12136,2371,-580,1303,5980 ], // DNG_v11, standard_v2 d65 - "raw_crop": [ 0, 5, 6252, 4176], + "raw_crop" : [ + { "frame" : [6384, 4182], "crop": [ 0, 5, 6252, 4176] }, + { "frame" : [6384, 3348], "crop": [624, 0, 5004, 3348] } + ], "white": [ 16170, 16275, 16170 ] // typical safe-margins with LENR // negligible aperture scaling effect }, @@ -1615,8 +1644,9 @@ Camera constants: { // Quality B "make_model" : "LEICA D-LUX 7", - "dcraw_matrix" : [11577, -4230, -1106, -3967, 12211, 1957, -758, 1762, 5610] // DNG + "dcraw_matrix" : [11577, -4230, -1106, -3967, 12211, 1957, -758, 1762, 5610], // DNG // "dcraw_matrix" : [8585, -3127, -833, -4005, 12250, 1953, -650, 1494, 4862] // DNG alternate + "ranges" : { "black" : 15 } }, { // Quality B, Matrix from Adobe's dcp D65 instead of the internal in Leica's DNG @@ -1755,7 +1785,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 +2164,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 +2231,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 } }, @@ -2230,11 +2271,22 @@ Camera constants: { // Quality C "make_model": [ "Panasonic DC-G100", "Panasonic DC-G110" ], - "dcraw_matrix": [ 8370, -2869, -710, -3389, 11372, 2298, -640, 1598, 4887 ] // DNG + "dcraw_matrix": [ 8370, -2869, -710, -3389, 11372, 2298, -640, 1598, 4887 ], // DNG + "ranges": { + "white": [ // Measured with DC-G100 (#6913). Levels affected by LENR for ISOs 1600-4000. + { "iso": [ 200, 400, 800, 1250 ], "levels": 4095 }, + { "iso": 1600, "levels": 4050 }, + { "iso": 2000, "levels": 4040 }, + { "iso": 2500, "levels": 4025 }, + { "iso": 3200, "levels": 4010 }, + { "iso": 4000, "levels": 4000 }, + { "iso": [ 5000, 6400, 12800, 25600 ], "levels": 4095 } + ] + } }, { // Quality C, only color matrix - "make_model" : "Panasonic DC-GF10", + "make_model" : [ "Panasonic DC-GF10", "PANASONIC DC-GX880" ], "dcraw_matrix": [ 7610, -2781, -576, -4614, 12195, 2733, -1375, 2393, 6490 ], // DNG v13.2 "raw_crop": [ 0, 0, 4600, 0 ], // SensorWidth=4816 SensorHeight=3464. Width=4600 to match DNG. "ranges": { "black": 15 } @@ -2993,8 +3045,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 +3081,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, @@ -3044,7 +3097,17 @@ Camera constants: { // Quality C, "make_model": "Sony ILCE-7RM4", "dcraw_matrix": [ 7662, -2686, -660, -5240, 12965, 2530, -796, 1508, 6167 ], - "raw_crop": [ 0, 0, -32, 0 ] // full raw frame 9600x6376 - 32 rightmost columns are garbage. Using -32 instead of 9568 to support also 16-shot pixelshift files + "raw_crop": [ 0, 0, -32, 0 ], // full raw frame 9600x6376 - 32 rightmost columns are garbage. Using -32 instead of 9568 to support also 16-shot pixelshift files + "pdaf_pattern": [ 0,12,18,36,42,60,66,72,78,96,108,120,126,138,156,168,180,186,192,198,210,222,228,240,246,252,270,276,282,288,306,312,318,330,336,348,360,366,372,378,390,396,408,420 ], // Assume the pattern is the same as the ILCE-7CR. + "pdaf_offset": 1 + }, + + { // Quality B + "make_model": [ "Sony ILCE-7CR", "Sony ILCE-7RM5" ], // 7RM5 is assumed to have the same sensor as the 7CR. + "dcraw_matrix": [ 8200, -2976, -719, -4296, 12053, 2532, -429, 1282, 5774 ], // DNG v15.2 for ILCE-7CR and ILCE-7RM5. + "raw_crop": [ 0, 0, -32, 0 ], // A few repeated pixels on the right edge. + "pdaf_pattern": [ 0,12,18,36,42,60,66,72,78,96,108,120,126,138,156,168,180,186,192,198,210,222,228,240,246,252,270,276,282,288,306,312,318,330,336,348,360,366,372,378,390,396,408,420 ], // From issue #6938. Slightly different every repetition, maybe the real pattern is 3 or more multiples of 420 pixels. This is a composite. + "pdaf_offset": 1 }, { // Quality B, assumed correct for 9M2 as well 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 ef71002a6..236414c31 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++) @@ -5775,6 +5775,8 @@ nf: order = 0x4949; cam_mul[0] = get2() / 256.0; if (tag == 0x1018 || tag == 0x20400100) cam_mul[2] = get2() / 256.0; + if (tag == 0x104D) + read_crop.crop_mode = (CropMode)get2(); if (tag == 0x2011 && len == 2) { get2_256: order = 0x4d4d; @@ -7652,15 +7654,27 @@ void CLASS parse_fuji (int offset) tag = get2(); len = get2(); save = ftell(ifp); + // tag 0x100 = 256 RawImageFullSize RT if (tag == 0x100) { raw_height = get2(); raw_width = get2(); + // RawImageCroppedSize 0x111 = 273 (including borders) RT + } else if (tag == 0x111) { // RT + read_crop.height = get2(); // RT + read_crop.width = get2(); // RT + // RawImageTopLeft 0x110 = 272 (top margin first, then left margin) RT + } else if (tag == 0x110){ // RT + read_crop.top_margin = get2(); // RT + read_crop.left_margin = get2(); // RT + // 0x115 = 277 RawImageAspectRatio RT } else if (tag == 0x121) { height = get2(); if ((width = get2()) == 4284) width += 3; + // tag 0x130 = 304 FujiLayout RT } else if (tag == 0x130) { fuji_layout = fgetc(ifp) >> 7; fuji_width = !(fgetc(ifp) & 8); + // tag 0x131 = 305 XTransLayout RT } else if (tag == 0x131) { filters = 9; FORC(36) xtrans_abs[0][35-c] = fgetc(ifp) & 3; @@ -7674,8 +7688,18 @@ void CLASS parse_fuji (int offset) height = get4(); order = c; } + // 0x9650 = 38480 RawExposureBias RT + fseek (ifp, save+len, SEEK_SET); } + + if (read_crop.crop_mode != CropMode::NA) { // RT + height = read_crop.height; // RT + width = read_crop.width; // RT + top_margin = read_crop.top_margin; // RT + left_margin = read_crop.left_margin; // RT + } // RT + height <<= fuji_layout; width >>= fuji_layout; } @@ -8675,7 +8699,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, @@ -9807,9 +9832,9 @@ void CLASS identify() if (!strncasecmp (model, make, i) && model[i++] == ' ') memmove (model, model+i, 64-i); if (!strncmp (model,"FinePix ",8)) - strcpy (model, model+8); +/* RT */ memmove (model, model+8, 64-8); if (!strncmp (model,"Digital Camera ",15)) - strcpy (model, model+15); +/* RT */ memmove (model, model+15, 64-15); desc[511] = artist[63] = make[63] = model[63] = model2[63] = 0; if (!is_raw) goto notraw; @@ -10132,8 +10157,12 @@ canon_a5: width = raw_width = 6016; height = raw_height = 4014; } else if (!strcmp(model, "X-Pro3") || !strcmp(model, "X-T3") || !strcmp(model, "X-T30") || !strcmp(model, "X-T4") || !strcmp(model, "X100V") || !strcmp(model, "X-S10")) { - width = raw_width = 6384; - height = raw_height = 4182; + raw_width = 6384; // RT + raw_height = 4182; // RT + if (read_crop.crop_mode == CropMode::NA) { // RT + width = raw_width; // RT + height = raw_height; // RT + } // RT } else if (!strcmp(model, "DBP for GX680")) { // Special case for #4204 width = raw_width = 5504; height = raw_height = 3856; diff --git a/rtengine/dcraw.h b/rtengine/dcraw.h index aadc0b969..f932e2472 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 @@ -76,6 +76,20 @@ public: } protected: + enum class CropMode : std::uint_fast16_t { // RT + NA = 0, // RT + FullFrameOnGfx = 1, // RT + SportsFinderMode = 2, // RT + ElectronicShutter1_25xCrop = 4 // RT + }; // RT + // stores the cropdata read from the file RT + struct CropData { // RT + std::uint_fast16_t width, // RT + height, // RT + top_margin, // RT + left_margin; // RT + CropMode crop_mode = CropMode::NA; // RT + } read_crop; // RT int exif_base, ciff_base, ciff_len; rtengine::IMFILE *ifp; FILE *ofp; diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index bce6f2291..85661edd3 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) { @@ -781,7 +781,7 @@ void Crop::update(int todo) if (need_fattal) { parent->ipf.dehaze(f, params.dehaze); - parent->ipf.ToneMapFattal02(f, params.fattal, 3, 0, nullptr, 0, 0, 0); + parent->ipf.ToneMapFattal02(f, params.fattal, 3, 0, nullptr, 0, 0, 0, false); } // crop back to the size expected by the rest of the pipeline @@ -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..5ad664b52 100644 --- a/rtengine/dfmanager.cc +++ b/rtengine/dfmanager.cc @@ -317,7 +317,6 @@ private: typedef std::map > bpList_t; dfList_t dfList; bpList_t bpList; - bool initialized; Glib::ustring currentPath; dfInfo* addFileInfo(const Glib::ustring &filename, bool pool = true); dfInfo* find(const std::string &mak, const std::string &mod, int isospeed, double shut, time_t t); @@ -569,7 +568,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..3ae009537 100644 --- a/rtengine/dynamicprofile.cc +++ b/rtengine/dynamicprofile.cc @@ -24,6 +24,7 @@ #include #include #include +#include #include "rtengine.h" #include "../rtgui/options.h" @@ -88,7 +89,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 @@ -174,9 +175,10 @@ bool DynamicProfileRules::loadRules() { dynamicRules.clear(); Glib::KeyFile kf; + const Glib::ustring fileName = Glib::build_filename (Options::rtdir, "dynamicprofile.cfg"); try { - if (!kf.load_from_file (Glib::build_filename (Options::rtdir, "dynamicprofile.cfg"))) { + if (!(Glib::file_test(fileName, Glib::FILE_TEST_EXISTS) && kf.load_from_file (fileName))) { return false; } } catch (Glib::Error &e) { @@ -221,7 +223,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 +231,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 e44243fd3..af1b94fbe 100644 --- a/rtengine/iccstore.cc +++ b/rtengine/iccstore.cc @@ -18,13 +18,14 @@ */ #include #include +#include #include #include #include #include -#ifdef WIN32 +#ifdef _WIN32 #include #else #include @@ -51,9 +52,9 @@ namespace // Not recursive void loadProfiles( const Glib::ustring& dirName, - std::map* profiles, - std::map* profileContents, - std::map* profileNames, + std::map* profiles, + std::map* profileContents, + std::map* profileNames, bool nameUpper ) { @@ -114,8 +115,8 @@ void loadProfiles( bool loadProfile( const Glib::ustring& profile, const Glib::ustring& dirName, - std::map* profiles, - std::map* profileContents + std::map* profiles, + std::map* profileContents ) { if (dirName.empty() || profiles == nullptr) { @@ -196,9 +197,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 @@ -455,6 +456,8 @@ public: if (loadAll) { loadProfiles(profilesDir, &fileProfiles, &fileProfileContents, nullptr, false); loadProfiles(userICCDir, &fileProfiles, &fileProfileContents, nullptr, false); + Glib::ustring user_output_icc_dir = Glib::build_filename(options.rtdir, "iccprofiles", "output"); + loadProfiles(user_output_icc_dir, &fileProfiles, &fileProfileContents, nullptr, false); } // Input profiles @@ -994,10 +997,10 @@ parse_error: return false; } - using ProfileMap = std::map; - using MatrixMap = std::map; - using ContentMap = std::map; - using NameMap = std::map; + using ProfileMap = std::map; + using MatrixMap = std::map; + using ContentMap = std::map; + using NameMap = std::map; ProfileMap wProfiles; // ProfileMap wProfilesGamma; diff --git a/rtengine/iimage.h b/rtengine/iimage.h index cdb7dd6eb..3e865bb2b 100644 --- a/rtengine/iimage.h +++ b/rtengine/iimage.h @@ -18,6 +18,7 @@ */ #pragma once +#include #include #include @@ -111,7 +112,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; } @@ -396,7 +397,7 @@ public: swap(rotatedImg); } else if (deg == 180) { - int height2 = height / 2 + (height & 1); + int height2 = height / 2; #ifdef _OPENMP // difficult to find a cutoff value where parallelization is counter productive because of processor's data cache collision... @@ -406,13 +407,22 @@ public: for (int i = 0; i < height2; i++) { for (int j = 0; j < width; j++) { - T tmp; int x = width - 1 - j; int y = height - 1 - i; - tmp = v(i, j); - v(i, j) = v(y, x); - v(y, x) = tmp; + std::swap(v(i, j), v(y, x)); + } + } + + // Middle row of odd-height images: only go half way otherwise the + // pixels will be swapped twice. + if (height & 1) { + int i = height / 2; + int width2 = width / 2; + for (int j = 0; j < width2; j++) { + int x = width - 1 - j; + + std::swap(v(i, j), v(i, x)); } } #ifdef _OPENMP @@ -828,7 +838,7 @@ public: swap(rotatedImg); } else if (deg == 180) { - int height2 = height / 2 + (height & 1); + int height2 = height / 2; #ifdef _OPENMP // difficult to find a cutoff value where parallelization is counter productive because of processor's data cache collision... @@ -838,21 +848,26 @@ public: for (int i = 0; i < height2; i++) { for (int j = 0; j < width; j++) { - T tmp; int x = width - 1 - j; int y = height - 1 - i; - tmp = r(i, j); - r(i, j) = r(y, x); - r(y, x) = tmp; + std::swap(r(i, j), r(y, x)); + std::swap(g(i, j), g(y, x)); + std::swap(b(i, j), b(y, x)); + } + } - tmp = g(i, j); - g(i, j) = g(y, x); - g(y, x) = tmp; + // Middle row of odd-height images: only go half way otherwise the + // pixels will be swapped twice. + if (height & 1) { + int i = height / 2; + int width2 = width / 2; + for (int j = 0; j < width2; j++) { + int x = width - 1 - j; - tmp = b(i, j); - b(i, j) = b(y, x); - b(y, x) = tmp; + std::swap(r(i, j), r(i, x)); + std::swap(g(i, j), g(i, x)); + std::swap(b(i, j), b(i, x)); } } #ifdef _OPENMP @@ -1481,26 +1496,31 @@ public: swap(rotatedImg); } else if (deg == 180) { - int height2 = height / 2 + (height & 1); + int height2 = height / 2; // Maybe not sufficiently optimized, but will do what it has to do for (int i = 0; i < height2; i++) { for (int j = 0; j < width; j++) { - T tmp; int x = width - 1 - j; int y = height - 1 - i; - tmp = r(i, j); - r(i, j) = r(y, x); - r(y, x) = tmp; + std::swap(r(i, j), r(y, x)); + std::swap(g(i, j), g(y, x)); + std::swap(b(i, j), b(y, x)); + } + } - tmp = g(i, j); - g(i, j) = g(y, x); - g(y, x) = tmp; + // Middle row of odd-height images: only go half way otherwise the + // pixels will be swapped twice. + if (height & 1) { + int i = height / 2; + int width2 = width / 2; + for (int j = 0; j < width2; j++) { + int x = width - 1 - j; - tmp = b(i, j); - b(i, j) = b(y, x); - b(y, x) = tmp; + std::swap(r(i, j), r(i, x)); + std::swap(g(i, j), g(i, x)); + std::swap(b(i, j), b(i, x)); } } } @@ -1858,7 +1878,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..6507a970d 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,783 @@ 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 = pos->toFloat(); + // } + /* + * Get the focus distance in meters. + */ + if (Exiv2::testVersion(0, 27, 4) && find_exif_tag("Exif.NikonLd4.LensID") && to_long(pos) != 0) { + // Z lens, need to specifically look for the second instance of + // Exif.NikonLd4.FocusDistance unless using Exiv2 0.28.x and later + // (also expanded to 2 bytes of precision since 0.28.1). +#if EXIV2_TEST_VERSION(0, 28, 0) + if (find_exif_tag("Exif.NikonLd4.FocusDistance2")) { + float value = pos->toFloat(); + if (Exiv2::testVersion(0, 28, 1)) { + value /= 256.f; + } +#else + pos = exif.end(); + for (auto it = exif.begin(); it != exif.end(); it++) { + if (it->key() == "Exif.NikonLd4.FocusDistance") { + pos = it; + } + } + if (pos != exif.end() && pos->size()) { + float value = pos->toFloat(); +#endif + focus_dist = 0.01 * std::pow(10, value / 40); + } + } else if (find_exif_tag("Exif.NikonLd2.FocusDistance") + || find_exif_tag("Exif.NikonLd3.FocusDistance") + || (Exiv2::testVersion(0, 27, 4) + && find_exif_tag("Exif.NikonLd4.FocusDistance"))) { + float value = pos->toFloat(); + focus_dist = (0.01 * std::pow(10, value / 40)); + } else if (find_exif_tag("Exif.OlympusFi.FocusDistance")) { + /* the distance is stored as a rational (fraction). according to + * http://www.dpreview.com/forums/thread/1173960?page=4 + + * some Olympus cameras have a wrong denominator of 10 in there + * while the nominator is always in mm. thus we ignore the + * denominator and divide with 1000. + + * "I've checked a number of E-1 and E-300 images, and I agree + * that the FocusDistance looks like it is in mm for the + * E-1. However, it looks more like cm for the E-300. + + * For both cameras, this value is stored as a rational. With + * the E-1, the denominator is always 1, while for the E-300 it + * is 10. + + * Therefore, it looks like the numerator in both cases is in mm + * (which makes a bit of sense, in an odd sort of way). So I + * think what I will do in ExifTool is to take the numerator and + * divide by 1000 to display the focus distance in meters." -- + * Boardhead, dpreview forums in 2005 + */ + int nominator = pos->toRational(0).first; + focus_dist = std::max(0.0, (0.001 * nominator)); + } else if (find_exif_tag("Exif.CanonFi.FocusDistanceUpper")) { + const float FocusDistanceUpper = pos->toFloat(); + if (FocusDistanceUpper <= 0.0f + || (int)FocusDistanceUpper >= 0xffff) { + focus_dist = 0.0f; + } else { + focus_dist = FocusDistanceUpper / 100.0; + if (find_exif_tag("Exif.CanonFi.FocusDistanceLower")) { + const float FocusDistanceLower = pos->toFloat(); + if (FocusDistanceLower > 0.0f && (int)FocusDistanceLower < 0xffff) { + focus_dist += FocusDistanceLower / 100.0; + focus_dist /= 2.0; + } + } + } + } else if (find_exif_tag("Exif.CanonSi.SubjectDistance")) { + focus_dist = pos->toFloat() / 100.0; + } else if (find_tag(Exiv2::subjectDistance)) { + focus_dist = pos->toFloat(); + } else if (Exiv2::testVersion(0,27,2) && find_exif_tag("Exif.Sony2Fp.FocusPosition2")) { + const float focus_position = pos->toFloat(); + + if (focus_position && find_exif_tag("Exif.Photo.FocalLengthIn35mmFilm")) { + const float focal_length_35mm = pos->toFloat(); + + /* http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3688.msg29653.html#msg29653 */ + focus_dist = + (std::pow(2, focus_position / 16 - 5) + 1) * focal_length_35mm / 1000; } } - 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); + 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); } - 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 +905,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 +938,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 ad230bb7d..e2c6c1310 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); @@ -881,7 +791,7 @@ int ImageIO::loadTIFF (const Glib::ustring &fname) if (samplesperpixel > 3) { for (int i = 0; i < width; i++) { - memcpy(linebuffer.get() + i * 3 * bitspersample / 8, linebuffer.get() + i * samplesperpixel * bitspersample / 8, 3 * bitspersample / 8); + memmove(linebuffer.get() + i * 3 * bitspersample / 8, linebuffer.get() + i * samplesperpixel * bitspersample / 8, 3 * bitspersample / 8); } } else if (samplesperpixel == 1) { @@ -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) { @@ -1033,7 +873,7 @@ int ImageIO::savePNG (const Glib::ustring &fname, int bps) const #if defined(PNG_SKIP_sRGB_CHECK_PROFILE) && defined(PNG_SET_OPTION_SUPPORTED) png_set_option(png, PNG_SKIP_sRGB_CHECK_PROFILE, PNG_OPTION_ON); #endif - + png_infop info = png_create_info_struct(png); if (!info) { @@ -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,52 +1053,9 @@ int ImageIO::saveJPEG (const Glib::ustring &fname, int quality, int subSamp) con jpeg_start_compress(&cinfo, TRUE); - // buffer for exif and iptc markers - unsigned char* buffer = new unsigned char[165535]; //FIXME: no buffer size check so it can be overflowed in createJPEGMarker() for large tags, and then software will crash - unsigned int size; - - // assemble and write exif marker - if (exifRoot) { - int size = rtexif::ExifManager::createJPEGMarker (exifRoot, *exifChange, cinfo.image_width, cinfo.image_height, buffer); - - if (size > 0 && size < 65530) { - jpeg_write_marker(&cinfo, JPEG_APP0 + 1, buffer, size); - } - } - - // assemble and write iptc marker - if (iptc) { - unsigned char* iptcdata; - bool error = false; - - if (iptc_data_save (iptc, &iptcdata, &size)) { - if (iptcdata) { - iptc_data_free_buf (iptc, iptcdata); - } - - error = true; - } - - int bytes = 0; - - if (!error && (bytes = iptc_jpeg_ps3_save_iptc (nullptr, 0, iptcdata, size, buffer, 65532)) < 0) { - error = true; - } - - if (iptcdata) { - iptc_data_free_buf (iptc, iptcdata); - } - - if (!error) { - jpeg_write_marker(&cinfo, JPEG_APP0 + 13, buffer, bytes); - } - } - - delete [] buffer; - // 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 @@ -1285,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 @@ -1326,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); @@ -1334,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, @@ -1359,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) { @@ -1391,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); @@ -1507,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++) { @@ -1559,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); @@ -1722,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.cc b/rtengine/imagesource.cc new file mode 100644 index 000000000..049c6b562 --- /dev/null +++ b/rtengine/imagesource.cc @@ -0,0 +1,275 @@ +/* + * This file is part of RawTherapee. + * + * Copyright (c) 2024 RawTherapee team + * + * RawTherapee is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * RawTherapee is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with RawTherapee. If not, see . + */ + +#include "imagesource.h" +#include "procparams.h" + + +namespace rtengine +{ + +void ImageSource::getAutoWBMultipliersItcGreen( + procparams::ProcParams ¶ms, + bool forcewbgrey, + int kcam, + double greenitc, + bool extra, + float &temp0, + float &delta, + int &bia, + int &dread, + int nocam, + float &studgood, + float &minchrom, + int &kmin, + float &minhist, + float &maxhist, + int fh, + int fw, + ColorTemp &currWB, + int tempnotisraw, + double greennotisraw, + bool skipRecalculate, + ColorTemp &autoWB, + double &rm, + double &gm, + double &bm + ) +{ + float tem = 5000.f; + float gre = 1.f; + double tempref0bias = 5000.; + double tempitc = 5000.f; + bool autowb1 = true; + double green_thres = 0.8; + + if (isRAW()) {// only with Raw files + + auto currWBitc = getWB(); + + double greenref = currWBitc.getGreen(); + double tempref0bias0 = currWBitc.getTemp(); + + if (greenref > green_thres && params.wb.itcwb_prim == "srgb") { + forcewbgrey = true; + } + + 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"; + tempitc = 5000.f; + greenitc = 1.; + currWBitc = 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... + 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); + wbMul2Camera(rm, gm, bm); + 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"; + + } else if (!isRAW()) { // Itcwb and no raw + params.wb.temperature = tempnotisraw; + params.wb.green = greennotisraw; + params.wb.equal = 1.; + } + float greenitc_low = 1.f; + float tempitc_low = 5000.f; + //raw files and autitcgreen + if (isRAW() || !skipRecalculate) { + greenitc = 1.; + auto currWBitc = 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) { + printf("tempref=%f greref=%f tempitc=%f greenitc=%f\n", tempref, greenref, tempitc, greenitc); + } + + 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); + + params.wb.temperature = tempitc; + params.wb.green = 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, 0.); //params.wb.tempBias already used before + + } +} + +} // namespace rtengine + diff --git a/rtengine/imagesource.h b/rtengine/imagesource.h index 1f4c2179a..50bc38baf 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,37 @@ 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 void getAutoWBMultipliersItcGreen( + procparams::ProcParams ¶ms, + bool forcewbgrey, + int kcam, + double greenitc, + bool extra, + float &temp0, + float &delta, + int &bia, + int &dread, + int nocam, + float &studgood, + float &minchrom, + int &kmin, + float &minhist, + float &maxhist, + int fh, + int fw, + ColorTemp &currWB, + int tempnotisraw, + double greennotisraw, + bool skipRecalculate, + ColorTemp &autoWB, + double &rm, + double &gm, + double &bm + ); 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 +194,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..5358f2880 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) { @@ -509,13 +518,15 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } } - const bool autowb = (params->wb.method == "autold" || params->wb.method == "autitcgreen"); + // 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,43 +534,60 @@ 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 tempnotisraw = 6501;//D65 with Observer 2° - 6473 with Observer 10° + double greennotisraw = 1.;//D65 with Observer 2° - 0.967 with Observer 10° + + if (!imgsrc->isRAW() && params->wb.method == "autitcgreen") { + if (params->wb.compat_version == 1) { + // ITCWB compatibility version 1 used 5000 K and observer 10 + // degrees for non-raw files. + auto currWBitc = ColorTemp(5000., 1., 1., params->wb.method, StandardObserver::TEN_DEGREES); + currWBitc = currWBitc.convertObserver(params->wb.observer); + tempnotisraw = currWBitc.getTemp(); + greennotisraw = currWBitc.getGreen(); + } else { + auto currWBitc = imgsrc->getWB();//if jpg TIF with another illuminant + currWBitc = currWBitc.convertObserver(params->wb.observer); + tempnotisraw = currWBitc.getTemp(); + greennotisraw = currWBitc.getGreen(); + } + } + + 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 greenitc = 1.; + float temp0 = 5000.f; + bool extra = false; + bool forcewbgrey = false; if (!params->wb.enabled) { currWB = ColorTemp(); } else if (params->wb.method == "Camera") { 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) { + + } else if (params->wb.method == "autold") { + if (lastAwbEqual != params->wb.equal || lastAwbTempBias != params->wb.tempBias || lastAwbauto != params->wb.method) { double rm, gm, bm; - double tempitc = 5000.f; - double greenitc = 1.; - 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); - } - - 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 (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); - - currWB.getMultipliers(rm, gm, bm); + if (params->wb.compat_version == 1 && !imgsrc->isRAW()) { + // RGB grey compatibility version 1 used the identity + // multipliers plus temperature bias for non-raw files. + rm = gm = bm = 1.; + } else { + imgsrc->getAutoWBMultipliers(rm, gm, bm); } if (rm != -1.) { double bias = params->wb.tempBias; - if (params->wb.method == "autitcgreen") { - bias = 0.; - } - autoWB.update(rm, gm, bm, params->wb.equal, params->wb.observer, bias); lastAwbEqual = params->wb.equal; lastAwbObserver = params->wb.observer; @@ -571,31 +599,116 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) lastAwbTempBias = 0.0; lastAwbauto = ""; autoWB.useDefaults(params->wb.equal, params->wb.observer); + + } + + //double rr,gg,bb; + //autoWB.getMultipliers(rr,gg,bb); + } + currWB = autoWB; + // lastAwbauto = ""; //reinitialize auto + } else if (params->wb.method == "autitcgreen") { //(// autowb) { + double rm; + double gm; + double bm; + imgsrc->getAutoWBMultipliersItcGreen( + *params, + forcewbgrey, + kcam, + greenitc, + extra, + temp0, + delta, + bia, + dread, + nocam, + studgood, + minchrom, + kmin, + minhist, + maxhist, + fh, + fw, + currWB, + tempnotisraw, + greennotisraw, + lastAwbEqual == params->wb.equal && lastAwbObserver == params->wb.observer && lastAwbTempBias == params->wb.tempBias && lastAwbauto == params->wb.method, + autoWB, + rm, + gm, + bm); + + if (imgsrc->isRAW() || lastAwbEqual != params->wb.equal || lastAwbObserver != params->wb.observer || lastAwbTempBias != params->wb.tempBias || lastAwbauto != params->wb.method) { + if (rm != -1.) { + autoWB.update(rm, gm, bm, params->wb.equal, params->wb.observer); + lastAwbEqual = params->wb.equal; + lastAwbObserver = params->wb.observer; + lastAwbTempBias = params->wb.tempBias; + lastAwbauto = params->wb.method; + } else { + lastAwbEqual = -1.; + lastAwbObserver = ColorTemp::DEFAULT_OBSERVER; + lastAwbTempBias = 0.0; + 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); + */ } - if (awbListener) { - if (params->wb.method == "autitcgreen") { - awbListener->WBChanged(params->wb.temperature, params->wb.green, rw, gw, bw, studgood); + int met = 0; + + if (awbListener && params->wb.enabled) { + if (params->wb.method == "autitcgreen" && imgsrc->isRAW()) {//Raw files + 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, AutoWBListener::AWBMode::TEMP_CORRELATION_RAW); + + } 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, AutoWBListener::AWBMode::TEMP_CORRELATION_RAW); + } + } else if (params->wb.method == "autitcgreen" && !imgsrc->isRAW()) {//non raw files + params->wb.temperature = tempnotisraw; + params->wb.green = greennotisraw; + currWB = ColorTemp(params->wb.temperature, params->wb.green, params->wb.equal, params->wb.method, params->wb.observer); + + 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, AutoWBListener::AWBMode::TEMP_CORRELATION_NON_RAW);//false => hide settings + + } else if (params->wb.method == "autold"){ + 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, AutoWBListener::AWBMode::RGB_GREY); } 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, AutoWBListener::AWBMode::NONE); } } @@ -632,8 +745,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 +837,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; @@ -736,7 +849,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } ipf.dehaze(orig_prev, params->dehaze); - ipf.ToneMapFattal02(orig_prev, params->fattal, 3, 0, nullptr, 0, 0, 0); + ipf.ToneMapFattal02(orig_prev, params->fattal, 3, 0, nullptr, 0, 0, 0, false); if (oprevi != orig_prev) { delete oprevi; @@ -762,12 +875,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 +906,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 +965,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 +1013,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 +1023,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 +1052,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 +1124,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 +1168,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 +1245,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 +1257,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 +1290,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 +1322,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 +1362,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 +1387,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 +1401,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 +1424,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 +1448,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 +1478,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 +1645,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 +1685,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 +1709,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 +1722,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 +1752,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 +1778,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 +1791,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) float mL0; float mC0; float background = 0.f; - int show = 0; + int show = 0; @@ -1686,15 +1811,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 +1835,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 +1881,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } - + } ipf.softLight(nprevl, params->softlight); @@ -1764,6 +1891,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 +1914,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 +1956,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 +1970,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 +2050,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 +2066,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 +2092,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 +2108,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 +2170,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 +2220,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 +2248,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 +2269,7 @@ void ImProcCoordinator::freeAll() if (spotprev && spotprev != oprevi) { delete spotprev; } + spotprev = nullptr; if (orig_prev != oprevi) { @@ -2161,7 +2304,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 +2331,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 +2491,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 +2537,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 +2550,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 +2604,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 +2630,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 +2839,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 +2895,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 +2966,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 +3016,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 +3082,9 @@ void ImProcCoordinator::requestUpdateWaveform() if (!hListener) { return; } + bool updated = updateWaveforms(); + if (updated) { notifyHistogramChanged(); } @@ -2930,7 +3095,9 @@ void ImProcCoordinator::requestUpdateHistogram() if (!hListener) { return; } + bool updated = updateLRGBHistograms(); + if (updated) { notifyHistogramChanged(); } @@ -2941,6 +3108,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 +3122,9 @@ void ImProcCoordinator::requestUpdateVectorscopeHC() if (!hListener) { return; } + bool updated = updateVectorscopeHC(); + if (updated) { notifyHistogramChanged(); } @@ -2965,7 +3135,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..e236aed17 100644 --- a/rtengine/improccoordinator.h +++ b/rtengine/improccoordinator.h @@ -74,10 +74,10 @@ protected: ImageSource* imgsrc; ColorTemp currWB; + ColorTemp currWBcust; ColorTemp autoWB; ColorTemp currWBloc; ColorTemp autoWBloc; - ColorTemp currWBitc; double lastAwbEqual; StandardObserver lastAwbObserver{ColorTemp::DEFAULT_OBSERVER}; diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc index 3f9a426cf..2e02a352c 100644 --- a/rtengine/improcfun.cc +++ b/rtengine/improcfun.cc @@ -1985,7 +1985,7 @@ void ImProcFunctions::rgbProc(Imagefloat* working, LabImage* lab, PipetteBuffer Imagefloat* editImgFloat = nullptr; PlanarWhateverData* editWhatever = nullptr; - EditUniqueID editID = pipetteBuffer ? pipetteBuffer->getEditID() : EUID_None; + EditUniqueID editID = pipetteBuffer && pipetteBuffer->bufferCreated() ? pipetteBuffer->getEditID() : EUID_None; if (editID != EUID_None) { switch (pipetteBuffer->getDataProvider()->getCurrSubscriber()->getPipetteBufferType()) { @@ -4232,9 +4232,6 @@ void ImProcFunctions::chromiLuminanceCurve(PipetteBuffer *pipetteBuffer, int pW, } - const float histLFactor = pW != 1 ? histLCurve.getSize() / 100.f : 1.f; - const float histCFactor = pW != 1 ? histCCurve.getSize() / 48000.f : 1.f; - float adjustr = 1.0f; // if(params->labCurve.avoidclip ){ @@ -4256,6 +4253,9 @@ void ImProcFunctions::chromiLuminanceCurve(PipetteBuffer *pipetteBuffer, int pW, adjustr = 1.8f; } + const float histLFactor = pW != 1 ? histLCurve.getSize() / 100.f : 1.f; + const float histCFactor = pW != 1 ? histCCurve.getSize() * adjustr / 65536.f : 1.f; + // reference to the params structure has to be done outside of the parallelization to avoid CPU cache problem const bool highlight = params->toneCurve.hrenabled; //Get the value if "highlight reconstruction" is activated const int chromaticity = params->labCurve.chromaticity; @@ -4415,11 +4415,11 @@ void ImProcFunctions::chromiLuminanceCurve(PipetteBuffer *pipetteBuffer, int pW, if (editPipette) { if (editID == EUID_Lab_aCurve) { // Lab a pipette - float chromapipa = lold->a[i][j] + (32768.f * 1.28f); - editWhatever->v(i, j) = LIM01 ((chromapipa) / (65536.f * 1.28f)); + float chromapipa = lold->a[i][j] + 32768.f; + editWhatever->v(i, j) = LIM01 ((chromapipa) / (65536.f)); } else if (editID == EUID_Lab_bCurve) { //Lab b pipette - float chromapipb = lold->b[i][j] + (32768.f * 1.28f); - editWhatever->v(i, j) = LIM01 ((chromapipb) / (65536.f * 1.28f)); + float chromapipb = lold->b[i][j] + 32768.f; + editWhatever->v(i, j) = LIM01 ((chromapipb) / (65536.f)); } } @@ -4658,7 +4658,7 @@ void ImProcFunctions::chromiLuminanceCurve(PipetteBuffer *pipetteBuffer, int pW, // I have placed C=f(C) after all C treatments to assure maximum amplitude of "C" if (editPipette && editID == EUID_Lab_CCurve) { float chromapip = sqrt(SQR(atmp) + SQR(btmp) + 0.001f); - editWhatever->v(i, j) = LIM01 ((chromapip) / (48000.f)); + editWhatever->v(i, j) = LIM01 ((chromapip) / (65536.f / adjustr)); }//Lab C=f(C) pipette if (ccut) { @@ -4725,7 +4725,7 @@ void ImProcFunctions::chromiLuminanceCurve(PipetteBuffer *pipetteBuffer, int pW, if (editPipette && editID == EUID_Lab_LCCurve) { float chromapiplc = sqrt(SQR(atmp) + SQR(btmp) + 0.001f); - editWhatever->v(i, j) = LIM01 ((chromapiplc) / (48000.f)); + editWhatever->v(i, j) = LIM01 ((chromapiplc) / (65536.f / adjustr)); }//Lab L=f(C) pipette @@ -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; @@ -5723,6 +5723,11 @@ void ImProcFunctions::rgb2lab(const Imagefloat &src, LabImage &dst, const Glib:: } void ImProcFunctions::rgb2lab(const Image8 &src, int x, int y, int w, int h, float L[], float a[], float b[], const procparams::ColorManagementParams &icm, bool consider_histogram_settings) const +{ + rgb2lab(src, x, y, w, h, L, a, b, icm, consider_histogram_settings, multiThread); +} + +void ImProcFunctions::rgb2lab(const Image8 &src, int x, int y, int w, int h, float L[], float a[], float b[], const procparams::ColorManagementParams &icm, bool consider_histogram_settings, bool multiThread) { // Adapted from ImProcFunctions::lab2rgb const int src_width = src.getWidth(); @@ -5835,6 +5840,21 @@ void ImProcFunctions::rgb2lab(const Image8 &src, int x, int y, int w, int h, flo } } +void ImProcFunctions::rgb2lab(std::uint8_t red, std::uint8_t green, std::uint8_t blue, float &L, float &a, float &b, const procparams::ColorManagementParams &icm, bool consider_histogram_settings) +{ + float l_channel[1]; + float a_channel[1]; + float b_channel[1]; + rtengine::Image8 buf(1, 1); + buf.r(0, 0) = red; + buf.g(0, 0) = green; + buf.b(0, 0) = blue; + ImProcFunctions::rgb2lab(buf, 0, 0, 1, 1, l_channel, a_channel, b_channel, icm, consider_histogram_settings, false); + L = l_channel[0]; + a = a_channel[0]; + b = b_channel[0]; +} + void ImProcFunctions::lab2rgb(const LabImage &src, Imagefloat &dst, const Glib::ustring &workingSpace) { TMatrix wiprof = ICCStore::getInstance()->workingSpaceInverseMatrix(workingSpace); diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index 51d9c8ac1..58e597dce 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -117,6 +117,7 @@ class ImProcFunctions bool multiThread; void calcVignettingParams(int oW, int oH, const procparams::VignettingParams& vignetting, double &w2, double &h2, double& maxRadius, double &v, double &b, double &mul); + static void rgb2lab(const Image8 &src, int x, int y, int w, int h, float L[], float a[], float b[], const procparams::ColorManagementParams &icm, bool consider_histogram_settings, bool multithread); void transformLuminanceOnly(Imagefloat* original, Imagefloat* transformed, int cx, int cy, int oW, int oH, int fW, int fH); void transformGeneral(bool highQuality, Imagefloat *original, Imagefloat *transformed, int cx, int cy, int sx, int sy, int oW, int oH, int fW, int fH, const LensCorrection *pLCPMap, bool useOriginalBuffer); @@ -364,6 +365,8 @@ enum class BlurType { float& meantm, float& stdtm, float& meanreti, float& stdreti, float &fab, float &highresi, float &nresi, float &highresi46, float &nresi46, float &Lhighresi, float &Lnresi, float &Lhighresi46, float &Lnresi46); + void tone_eqdehaz(ImProcFunctions *ipf, Imagefloat *rgb, int whits, int blacks, const Glib::ustring &workingProfile, double scale, bool multithread); + void addGaNoise(LabImage *lab, LabImage *dst, const float mean, const float variance, const int sk); void BlurNoise_Localold(int call, const struct local_params& lp, LabImage* original, LabImage* transformed, const LabImage* const tmp1, int cx, int cy); void InverseBlurNoise_Local(LabImage * originalmask, const struct local_params& lp, const float hueref, const float chromaref, const float lumaref, LabImage* original, LabImage* transformed, const LabImage* const tmp1, int cx, int cy, int sk); @@ -439,7 +442,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); @@ -488,8 +491,8 @@ enum class BlurType { void BadpixelsLab(LabImage * lab, double radius, int thresh, float chrom); void dehaze(Imagefloat *rgb, const procparams::DehazeParams &dehazeParams); - void dehazeloc(Imagefloat *rgb, const procparams::DehazeParams &dehazeParams); - void ToneMapFattal02(Imagefloat *rgb, const procparams::FattalToneMappingParams &fatParams, int detail_level, int Lalone, float **Lum, int WW, int HH, int algo); + void dehazeloc(Imagefloat *rgb, const procparams::DehazeParams &dehazeParams, int sk, int sp); + void ToneMapFattal02(Imagefloat *rgb, const procparams::FattalToneMappingParams &fatParams, int detail_level, int Lalone, float **Lum, int WW, int HH, int algo, bool sat); void localContrast(LabImage *lab, float **destination, const procparams::LocalContrastParams &localContrastParams, bool fftwlc, double scale); void colorToningLabGrid(LabImage *lab, int xstart, int xend, int ystart, int yend, bool MultiThread); //void shadowsHighlights(LabImage *lab); @@ -501,6 +504,7 @@ enum class BlurType { Image8* lab2rgb(LabImage* lab, int cx, int cy, int cw, int ch, const procparams::ColorManagementParams &icm, bool consider_histogram_settings = true); void rgb2lab(const Image8 &src, int x, int y, int w, int h, float L[], float a[], float b[], const procparams::ColorManagementParams &icm, bool consider_histogram_settings = true) const; + static void rgb2lab(std::uint8_t red, std::uint8_t green, std::uint8_t blue, float &L, float &a, float &b, const procparams::ColorManagementParams &icm, bool consider_histogram_settings = true); Imagefloat* lab2rgbOut(LabImage* lab, int cx, int cy, int cw, int ch, const procparams::ColorManagementParams &icm); // CieImage *ciec; void workingtrc(const Imagefloat* src, Imagefloat* dst, int cw, int ch, int mul, Glib::ustring &profile, double gampos, double slpos, int &illum, int prim, cmsHTRANSFORM &transform, bool normalizeIn = true, bool normalizeOut = true, bool keepTransForm = false) const; 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/ipdehaze.cc b/rtengine/ipdehaze.cc index 5ccec4a1e..b5403080e 100644 --- a/rtengine/ipdehaze.cc +++ b/rtengine/ipdehaze.cc @@ -454,7 +454,7 @@ void ImProcFunctions::dehaze(Imagefloat *img, const DehazeParams &dehazeParams) } } -void ImProcFunctions::dehazeloc(Imagefloat *img, const DehazeParams &dehazeParams) +void ImProcFunctions::dehazeloc(Imagefloat *img, const DehazeParams &dehazeParams, int sk, int sp) { //J.Desmis 12 2019 - this version derived from ART, is slower than the main from maximum 10% - probably use of SSE //Probably Ingo could solved this problem in some times @@ -476,6 +476,13 @@ void ImProcFunctions::dehazeloc(Imagefloat *img, const DehazeParams &dehazeParam float ambient[3]; float maxDistance = 0.f; + int whit = 0; + int blac = params->locallab.spots.at(sp).dehazeblack; + + if(blac != 0) { + ImProcFunctions::tone_eqdehaz(this, img, whit, blac, params->icm.workingProfile, sk, multiThread); + } + { array2D& R = dark; // R and dark can safely use the same buffer, which is faster and reduces memory allocations/deallocations array2D G(W, H); 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 e58c38faa..a3e9dee22 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -76,7 +76,8 @@ constexpr double czlim = rtengine::RT_SQRT1_2;// 0.70710678118654752440; constexpr float clipLoc(float x) { - return rtengine::LIM(x, 0.f, 32767.f); + //return rtengine::LIM(x, 0.f, 32767.f);//remove leads to bad behavior + return x; } constexpr float clipDE(float x) @@ -86,12 +87,12 @@ constexpr float clipDE(float x) constexpr float clipC(float x) { - return rtengine::LIM(x, -42000.f, 42000.f); + return rtengine::LIM(x, -100000.f, 100000.f);//increase LIM from 42000 to 1000000 to avoid clip and also imaginaries colors } constexpr float clipChro(float x) { - return rtengine::LIM(x, 0.f, 140.f); + return rtengine::LIM(x, 0.f, 300.f);//increase LIM from 140 to 300 to avoid clip and also imaginaries colors } constexpr double clipazbz(double x) @@ -2130,7 +2131,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 +2238,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 @@ -2312,6 +2304,34 @@ void ImProcFunctions::loccont(int bfw, int bfh, LabImage* tmp1, float rad, float } } +void ImProcFunctions::tone_eqdehaz(ImProcFunctions *ipf, Imagefloat *rgb, int whits, int blacks, const Glib::ustring &workingProfile, double scale, bool multithread) +{ + ToneEqualizerParams params; + params.enabled = true; + params.regularization = 0.f; + params.pivot = 0.f; + double blred = 0.4; + params.bands[0] = blred * blacks; + int bla = abs(blacks); + int threshblawhi = 50; + int threshblawhi2 = 85; + if(bla > threshblawhi) { + params.bands[1] = blred * sign(blacks) * (bla - threshblawhi); + } + if(bla > threshblawhi2) { + params.bands[2] = blred * sign(blacks) * (bla - threshblawhi2); + } + + params.bands[4] = whits; + int whi = abs(whits); + if(whi > threshblawhi) { + params.bands[3] = sign(whits) * (whi - threshblawhi); + } + + ipf->toneEqualizer(rgb, params, workingProfile, scale, multithread); +} + + void sigmoidla (float &valj, float thresj, float lambda) { //thres : shifts the action of sigmoid to darker tones or lights @@ -5342,6 +5362,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 @@ -6570,7 +6591,7 @@ void ImProcFunctions::maskcalccol(bool invmask, bool pde, int bfw, int bfh, int Imagefloat *tmpImagefat = nullptr; tmpImagefat = new Imagefloat(bfw, bfh); lab2rgb(*bufmaskblurcol, *tmpImagefat, params->icm.workingProfile); - ToneMapFattal02(tmpImagefat, fatParams, nlev, 0, nullptr, 0, 0, 0); + ToneMapFattal02(tmpImagefat, fatParams, nlev, 0, nullptr, 0, 0, 0, false); rgb2lab(*tmpImagefat, *bufmaskblurcol, params->icm.workingProfile); delete tmpImagefat; } @@ -8679,8 +8700,10 @@ void ImProcFunctions::transit_shapedetect2(int sp, float meantm, float stdtm, in const float dE = rsob + std::sqrt(kab * (kch * chrodelta2 + kH * huedelta2) + kL * SQR(refL - maskptr->L[y][x])); //reduction action with deltaE - const float reducdE = calcreducdE(dE, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, varsens); - + float reducdE = calcreducdE(dE, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, varsens); + if(varsens == 100.f) { + reducdE = 1.f; + } float cli = (bufexpfin->L[y][x] - bufexporig->L[y][x]); float cla = (bufexpfin->a[y][x] - bufexporig->a[y][x]); float clb = (bufexpfin->b[y][x] - bufexporig->b[y][x]); @@ -14420,7 +14443,7 @@ void ImProcFunctions::Lab_Local( dehazeParams.saturation = lp.dehazeSaturation; dehazeParams.depth = lp.depth; lab2rgb(*bufexpfin, *tmpImage.get(), params->icm.workingProfile); - dehazeloc(tmpImage.get(), dehazeParams); + dehazeloc(tmpImage.get(), dehazeParams, sk, sp); rgb2lab(*tmpImage.get(), *bufexpfin, params->icm.workingProfile); transit_shapedetect2(sp, 0.f, 0.f, call, 30, bufexporig.get(), bufexpfin.get(), nullptr, hueref, chromaref, lumaref, sobelref, 0.f, nullptr, lp, original, transformed, cx, cy, sk); @@ -17034,7 +17057,11 @@ void ImProcFunctions::Lab_Local( if(fatParams.anchor == 50.f) { alg = 1; } - ToneMapFattal02(tmpImagefat.get(), fatParams, 3, 0, nullptr, 0, 0, alg);//last parameter = 1 ==>ART algorithm + bool satu = false; + if(params->locallab.spots.at(sp).fatsatur) { + satu = true; + } + ToneMapFattal02(tmpImagefat.get(), fatParams, 3, 0, nullptr, 0, 0, alg, satu);//last parameter alg = 1 ==>ART algorithm rgb2lab(*tmpImagefat, *bufexpfin, params->icm.workingProfile); if (params->locallab.spots.at(sp).expcie && params->locallab.spots.at(sp).modecie == "dr") { bool HHcurvejz = false, CHcurvejz = false, LHcurvejz = false; @@ -17787,7 +17814,7 @@ void ImProcFunctions::Lab_Local( } if (locchCurve && CHcurve && lp.qualcurvemet != 0) {//C=f(H) curve const float rhue = xatan2f(bufcolcalcb, bufcolcalca); - const float valparam = 2.f * locchCurve[500.f * static_cast(Color::huelab_to_huehsv2(rhue))] - 0.5f; //get valp=f(H) + const float valparam = locchCurve[500.f * static_cast(Color::huelab_to_huehsv2(rhue))] - 0.5f; //get valp=f(H) float chromaChfactor = 1.0f + valparam; bufcolcalca *= chromaChfactor;//apply C=f(H) bufcolcalcb *= chromaChfactor; @@ -18245,9 +18272,9 @@ void ImProcFunctions::Lab_Local( #endif for (int y = 0; y < bfh ; y++) { for (int x = 0; x < bfw; x++) { - tmpImageorig->r(y, x) = intp(lp.opacol, screen(tmpImageorig->r(y, x), tmpImagereserv->r(y, x), maxR), tmpImageorig->r(y, x)); - tmpImageorig->g(y, x) = intp(lp.opacol, screen(tmpImageorig->g(y, x), tmpImagereserv->g(y, x), maxG), tmpImageorig->g(y, x)); - tmpImageorig->b(y, x) = intp(lp.opacol, screen(tmpImageorig->b(y, x), tmpImagereserv->b(y, x), maxB), tmpImageorig->b(y, x)); + tmpImageorig->r(y, x) = intp(lp.opacol, screen(tmpImageorig->r(y, x), tmpImagereserv->r(y, x), 1.f), tmpImageorig->r(y, x)); + tmpImageorig->g(y, x) = intp(lp.opacol, screen(tmpImageorig->g(y, x), tmpImagereserv->g(y, x), 1.f), tmpImageorig->g(y, x)); + tmpImageorig->b(y, x) = intp(lp.opacol, screen(tmpImageorig->b(y, x), tmpImagereserv->b(y, x), 1.f), tmpImageorig->b(y, x)); } } } else if (lp.mergecolMethod == 12) { //darken only @@ -18658,7 +18685,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/pdaflinesfilter.cc b/rtengine/pdaflinesfilter.cc index b5c72f7f4..60f2abcb6 100644 --- a/rtengine/pdaflinesfilter.cc +++ b/rtengine/pdaflinesfilter.cc @@ -275,7 +275,11 @@ int PDAFLinesFilter::mark(const array2D &rawData, PixelsMap &bpMap) for (int y = 1; y < H_-1; ++y) { int yy = pattern_[idx] + off; if (y == yy) { - int n = markLine(rawData, bpMap, y) + markLine(rawData, bpMap, y-1) + markLine(rawData, bpMap, y+1); + int n = 0; + n += markLine(rawData, bpMap, y); + n += (y-1 <= 0 ) ? 0 : markLine(rawData, bpMap, y-1); + n += (y+1 >= H_-1) ? 0 : markLine(rawData, bpMap, y+1); + if (n) { found += n; if (settings->verbose) { 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 a421be9b3..1b8269a2f 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,13 @@ 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 + compat_version(WBParams::CURRENT_COMPAT_VERSION) { } @@ -1408,7 +1422,7 @@ bool WBParams::isPanningRelatedChange(const WBParams& other) const enabled == other.enabled && ( ( - method == "Camera" + method == "Camera" && other.method == "Camera" ) || ( @@ -1418,6 +1432,11 @@ 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 + && compat_version == other.compat_version + ) ) ); @@ -1433,16 +1452,13 @@ 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_sampling == other.itcwb_sampling; + && itcwb_alg == other.itcwb_alg + && itcwb_prim == other.itcwb_prim + && itcwb_sampling == other.itcwb_sampling + && compat_version == other.compat_version; } @@ -1699,6 +1715,7 @@ DirPyrDenoiseParams::DirPyrDenoiseParams() : chroma(15), redchro(0), bluechro(0), + autoGain(true), gamma(1.7), dmethod("Lab"), Lmethod("SLI"), @@ -1726,6 +1743,7 @@ bool DirPyrDenoiseParams::operator ==(const DirPyrDenoiseParams& other) const && chroma == other.chroma && redchro == other.redchro && bluechro == other.bluechro + && autoGain == other.autoGain && gamma == other.gamma && dmethod == other.dmethod && Lmethod == other.Lmethod @@ -2493,25 +2511,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 */ }, @@ -2972,7 +2990,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : avoidrad(0.), transitweak(1.0), transitgrad(0.0), - hishow(false), + hishow(options.complexity != 2), activ(true), blwh(false), recurs(false), @@ -3330,6 +3348,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : gamm(0.4), fatamount(1.0), fatdetail(40.0), + fatsatur(false), fatanchor(50.0), fatlevel(1.), recothrese(1.), @@ -3815,6 +3834,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : equilret(false), loglin(true), dehazeSaturation(50.0), + dehazeblack(0.0), softradiusret(40.0), CCmaskreticurve{ static_cast(FCT_MinMaxCPoints), @@ -4809,6 +4829,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && gamm == other.gamm && fatamount == other.fatamount && fatdetail == other.fatdetail + && fatsatur == other.fatsatur && fatanchor == other.fatanchor && fatlevel == other.fatlevel && recothrese == other.recothrese @@ -5030,6 +5051,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && equilret == other.equilret && loglin == other.loglin && dehazeSaturation == other.dehazeSaturation + && dehazeblack == other.dehazeblack && softradiusret == other.softradiusret && CCmaskreticurve == other.CCmaskreticurve && LLmaskreticurve == other.LLmaskreticurve @@ -5804,21 +5826,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), @@ -5871,6 +5878,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(); @@ -5971,8 +6068,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 @@ -5999,7 +6096,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); @@ -6216,16 +6315,13 @@ 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); + saveToKeyfile(!pedited || pedited->wb.compat_version, "White Balance", "CompatibilityVersion", wb.compat_version, keyFile); // Colorappearance saveToKeyfile(!pedited || pedited->colorappearance.enabled, "Color appearance", "Enabled", colorappearance.enabled, keyFile); @@ -6302,9 +6398,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 @@ -6334,6 +6430,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->dirpyrDenoise.methodmed, "Directional Pyramid Denoising", "MethodMed", dirpyrDenoise.methodmed, keyFile); saveToKeyfile(!pedited || pedited->dirpyrDenoise.redchro, "Directional Pyramid Denoising", "Redchro", dirpyrDenoise.redchro, keyFile); saveToKeyfile(!pedited || pedited->dirpyrDenoise.bluechro, "Directional Pyramid Denoising", "Bluechro", dirpyrDenoise.bluechro, keyFile); + saveToKeyfile(!pedited || pedited->dirpyrDenoise.gain, "Directional Pyramid Denoising", "AutoGain", dirpyrDenoise.autoGain, keyFile); saveToKeyfile(!pedited || pedited->dirpyrDenoise.gamma, "Directional Pyramid Denoising", "Gamma", dirpyrDenoise.gamma, keyFile); saveToKeyfile(!pedited || pedited->dirpyrDenoise.passes, "Directional Pyramid Denoising", "Passes", dirpyrDenoise.passes, keyFile); saveToKeyfile(!pedited || pedited->dirpyrDenoise.lcurve, "Directional Pyramid Denoising", "LCurve", dirpyrDenoise.lcurve, keyFile); @@ -6619,6 +6716,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || spot_edited->gamm, "Locallab", "Gamm_" + index_str, spot.gamm, keyFile); saveToKeyfile(!pedited || spot_edited->fatamount, "Locallab", "Fatamount_" + index_str, spot.fatamount, keyFile); saveToKeyfile(!pedited || spot_edited->fatdetail, "Locallab", "Fatdetail_" + index_str, spot.fatdetail, keyFile); + saveToKeyfile(!pedited || spot_edited->fatsatur, "Locallab", "Fatsatur_" + index_str, spot.fatsatur, keyFile); saveToKeyfile(!pedited || spot_edited->fatanchor, "Locallab", "Fatanchor_" + index_str, spot.fatanchor, keyFile); saveToKeyfile(!pedited || spot_edited->fatlevel, "Locallab", "Fatlevel_" + index_str, spot.fatlevel, keyFile); saveToKeyfile(!pedited || spot_edited->recothrese, "Locallab", "Recothrese_" + index_str, spot.recothrese, keyFile); @@ -6841,6 +6939,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || spot_edited->equilret, "Locallab", "Equilret_" + index_str, spot.equilret, keyFile); saveToKeyfile(!pedited || spot_edited->loglin, "Locallab", "Loglin_" + index_str, spot.loglin, keyFile); saveToKeyfile(!pedited || spot_edited->dehazeSaturation, "Locallab", "dehazeSaturation_" + index_str, spot.dehazeSaturation, keyFile); + saveToKeyfile(!pedited || spot_edited->dehazeblack, "Locallab", "dehazeblack_" + index_str, spot.dehazeblack, keyFile); saveToKeyfile(!pedited || spot_edited->softradiusret, "Locallab", "Softradiusret_" + index_str, spot.softradiusret, keyFile); saveToKeyfile(!pedited || spot_edited->CCmaskreticurve, "Locallab", "CCmaskretiCurve_" + index_str, spot.CCmaskreticurve, keyFile); saveToKeyfile(!pedited || spot_edited->LLmaskreticurve, "Locallab", "LLmaskretiCurve_" + index_str, spot.LLmaskreticurve, keyFile); @@ -7293,6 +7392,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"}, @@ -7674,6 +7774,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); @@ -7687,7 +7788,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); @@ -7701,16 +7802,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); + } } } @@ -7746,8 +7861,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) || @@ -7769,27 +7890,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. @@ -7804,36 +7925,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; @@ -7869,33 +7990,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}, @@ -7906,12 +8026,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} @@ -7922,10 +8041,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) { @@ -7933,57 +8052,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; @@ -7992,15 +8111,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"); @@ -8014,10 +8133,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 @@ -8033,17 +8152,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")) { @@ -8064,10 +8183,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; @@ -8076,9 +8195,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) { @@ -8097,32 +8216,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; @@ -8131,18 +8250,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) { @@ -8161,10 +8280,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; @@ -8178,43 +8297,52 @@ 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"; + wb.method = "autitcgreen"; //"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 (!assignFromKeyfile(keyFile, "White Balance", "CompatibilityVersion", wb.compat_version, pedited->wb.compat_version)) { + bool compat_version_edited = true; + if (ppVersion <= 346) { // 5.8 and earlier. + wb.compat_version = 0; + } else if (ppVersion <= 349) { // 5.9. + wb.compat_version = 1; + } else { + compat_version_edited = false; + } + if (pedited) { + pedited->wb.compat_version = pedited->wb.compat_version || compat_version_edited; + } + } } 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"); @@ -8228,79 +8356,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}, @@ -8311,78 +8438,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", "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; } @@ -8410,18 +8538,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); @@ -8439,9 +8567,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"; @@ -8456,12 +8584,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}, @@ -8480,26 +8607,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")) { @@ -8523,9 +8650,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"); @@ -8553,21 +8680,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"); @@ -8578,23 +8705,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 @@ -8604,17 +8731,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); @@ -8623,103 +8750,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); @@ -8730,124 +8857,125 @@ 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", "Fatsatur_" + index_str, spot.fatsatur, spotEdited.fatsatur); + 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); @@ -8859,123 +8987,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); @@ -8987,175 +9115,176 @@ 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", "dehazeblack_" + index_str, spot.dehazeblack, spotEdited.dehazeblack); + 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)) { @@ -9168,128 +9297,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); @@ -9306,64 +9435,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); @@ -9374,54 +9503,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); @@ -9436,37 +9565,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) { @@ -9476,7 +9605,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; @@ -9504,21 +9633,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) { @@ -9537,16 +9666,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")) { @@ -9557,18 +9686,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}, @@ -9592,7 +9720,6 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) keyFile, "Color Management", "Will", - pedited, { {"def", ColorManagementParams::Illuminant::DEFAULT}, {"D41", ColorManagementParams::Illuminant::D41}, @@ -9620,7 +9747,6 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) keyFile, "Color Management", "Wprim", - pedited, { {"def", ColorManagementParams::Primaries::DEFAULT}, {"srgb", ColorManagementParams::Primaries::SRGB}, @@ -9630,6 +9756,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}, @@ -9645,26 +9772,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"); @@ -9683,7 +9810,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"; @@ -9722,73 +9849,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) { @@ -9796,67 +9923,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"); @@ -10014,11 +10141,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; @@ -10046,19 +10173,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"); @@ -10110,21 +10237,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; @@ -10132,14 +10259,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) { @@ -10147,7 +10274,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) { @@ -10171,7 +10298,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; @@ -10181,15 +10308,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; @@ -10198,23 +10325,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"); @@ -10240,25 +10367,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; @@ -10273,47 +10400,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; } @@ -10324,7 +10451,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")) { @@ -10335,7 +10462,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")); @@ -10343,66 +10470,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; @@ -10412,13 +10539,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")); @@ -10428,18 +10555,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"); @@ -10449,24 +10576,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")) { @@ -10483,34 +10610,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 @@ -10525,9 +10652,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; @@ -10542,11 +10669,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")) { @@ -10567,20 +10694,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; + } } } } @@ -10600,16 +10732,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) { @@ -10689,8 +10827,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 6be2be54c..5ffcf9c6f 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -636,6 +636,8 @@ struct WBEntry { }; struct WBParams { + static constexpr int CURRENT_COMPAT_VERSION = 2; + bool enabled; Glib::ustring method; int temperature; @@ -643,16 +645,30 @@ 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; + /** + * Used to maintain edits from previous versions of RawTherapee where + * compatibility cannot be maintained simply by converting the parameters, + * for example, when the output depends on the file type. + * + * Version 0: + * - Base version. + * Version 1 (5.9): + * - RGB Gray fixed to (1, 1, 1) RGB multipliers before temperature bias + * for non-raw files. + * - Temperature correlation fixed to temperature 5000, green 1, and equal + * 1 or equivalent for non-raw files. + * Version 2 (5.10): + * - RGB grey restored to version 0. + * - Temperature correlation equivalent to method "Camera" for non-raw + * files. + */ + int compat_version; WBParams(); @@ -776,6 +792,7 @@ struct DirPyrDenoiseParams { double chroma; double redchro; double bluechro; + bool autoGain; double gamma; Glib::ustring dmethod; Glib::ustring Lmethod; @@ -1194,6 +1211,7 @@ struct LocallabParams { double gamm; double fatamount; double fatdetail; + bool fatsatur; double fatanchor; double fatlevel; double recothrese; @@ -1407,6 +1425,7 @@ struct LocallabParams { bool equilret; bool loglin; double dehazeSaturation; + double dehazeblack; double softradiusret; std::vector CCmaskreticurve; std::vector LLmaskreticurve; @@ -1940,6 +1959,7 @@ struct ColorManagementParams { ACES_P1, WIDE_GAMUT, ACES_P0, + JDC_MAX, BRUCE_RGB, BETA_RGB, BEST_RGB, @@ -1992,31 +2012,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 { @@ -2033,6 +2044,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]; @@ -2044,7 +2065,7 @@ public: } private: - std::map pairs; + Pairs pairs; }; /** @@ -2076,6 +2097,11 @@ public: return pairs.empty(); } + iterator erase(const const_iterator& key) + { + return pairs.erase(key); + } + void clear() { pairs.clear(); @@ -2095,6 +2121,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; @@ -2613,8 +2662,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 06aa701e8..8149c0464 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -16,6 +16,7 @@ * You should have received a copy of the GNU General Public License * along with RawTherapee. If not, see . */ +#include #include #include #include @@ -43,7 +44,6 @@ #include "rt_math.h" #include "rtengine.h" #include "rtlensfun.h" - #include "../rtgui/options.h" #define BENCHMARK @@ -58,9 +58,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 +90,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 +107,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 +165,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 +370,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 +426,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 +476,7 @@ RawImageSource::RawImageSource () //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -RawImageSource::~RawImageSource () +RawImageSource::~RawImageSource() { delete idata; @@ -493,11 +493,11 @@ RawImageSource::~RawImageSource () } if (camProfile) { - cmsCloseProfile (camProfile); + cmsCloseProfile(camProfile); } if (embProfile) { - cmsCloseProfile (embProfile); + cmsCloseProfile(embProfile); } } @@ -506,7 +506,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 +523,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 +674,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 +692,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 +704,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 +715,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 +742,13 @@ 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) +{ + assert(rawData.getHeight() == H && rawData.getWidth() == W); + MyMutex::MyLock lock(getImageMutex); - tran = defTransform (tran); + + tran = defTransform(ri, tran); // compute channel multipliers double r, g, b; @@ -756,9 +760,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 +806,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 +850,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 +878,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 +892,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 +978,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 +1045,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 +1084,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 +1095,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 +1134,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 +1148,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 +1163,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 +1171,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 +1194,7 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) } else { numFrames = 6; } + #ifdef _OPENMP #pragma omp parallel #endif @@ -1180,15 +1203,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 +1230,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 +1251,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 +1269,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 +1284,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 +1297,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 +1309,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 +1324,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 +1360,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 +1380,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 +1395,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 +1405,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 +1415,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 +1470,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 +1489,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 +1502,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 +1546,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 +1556,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 +1569,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 +1588,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 +1610,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 +1633,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 +1656,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 +1690,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,28 +1708,30 @@ 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); } } - if (prepareDenoise && dirpyrdenoiseExpComp == RT_INFINITY) { + if (prepareDenoise) { LUTu aehist; 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(); @@ -1705,18 +1747,20 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le void RawImageSource::demosaic(const RAWParams &raw, bool autoContrast, double &contrastThreshold, bool cache) { + assert(rawData.getHeight() == H && rawData.getWidth() == W); + MyTime t1, t2; t1.set(); 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 +1769,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 +1802,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 +1823,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 +1838,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 +1873,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 +1888,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 +1935,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 +2076,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 +2158,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 +2203,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 +2219,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 +2274,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 +2351,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 +2546,7 @@ void RawImageSource::flush() if (rawData) { rawData(0, 0); } + if (green) { green(0, 0); } @@ -2522,16 +2574,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 +2609,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 +2662,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 +2866,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 +2905,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 +2927,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 +2941,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 +3018,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 +3027,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 +3043,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 +3062,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 +3070,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 +3156,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 +3190,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 +3291,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 +3303,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 +3325,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 +3343,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 +3449,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 +3578,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 +3587,7 @@ bool RawImageSource::findInputProfile(Glib::ustring inProfile, cmsHPROFILE embed } if (*dcpProf == nullptr) { - in = ICCStore::getInstance()->getProfile (inProfile); + in = ICCStore::getInstance()->getProfile(inProfile); } } @@ -3558,6 +3618,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 +3662,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 +3685,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 +3729,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 +3746,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 +3767,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 +3824,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,8 +3840,10 @@ 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) { + assert(rawData.getHeight() == H && rawData.getWidth() == W); + // BENCHFUN histcompr = 3; @@ -3802,7 +3863,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 +3924,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 +3991,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 +4044,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 +4070,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 +4082,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 +4115,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 +4543,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 +4552,7 @@ static void histoxyY_low(int bfhitc, int bfwitc, const array2D & xc, cons } } } + #ifdef _OPENMP #pragma omp critical #endif @@ -4503,16 +4566,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 +4591,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 +4613,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 +5137,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 +5217,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 +5228,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 +5253,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 +5271,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; + float limx = 0.05f; + float 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 +7413,8 @@ 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,8 +7485,10 @@ 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) { + assert(rawData.getHeight() == H && rawData.getWidth() == W); + // BENCHFUN constexpr double clipHigh = 64000.0; @@ -6356,29 +7680,27 @@ 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") { - //not used - redAWBMul = rm = avg_rm * refwb_red; - greenAWBMul = gm = avg_gm * refwb_green; - blueAWBMul = bm = avg_bm * refwb_blue; - } else { + if (wbpar.method != "autitcgreen") { const double reds = avg_r / std::max(1, rn) * refwb_red; const double greens = avg_g / std::max(1, gn) * refwb_green; const double blues = avg_b / std::max(1, bn) * refwb_blue; @@ -6391,6 +7713,8 @@ void RawImageSource::getAutoWBMultipliersitc(double & tempref, double & greenref void RawImageSource::getAutoWBMultipliers(double &rm, double &gm, double &bm) { + assert(rawData.getHeight() == H && rawData.getWidth() == W); + // BENCHFUN constexpr double clipHigh = 64000.0; @@ -6605,8 +7929,9 @@ 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) { + assert(rawData.getHeight() == H && rawData.getWidth() == W); int x; int y; @@ -6618,7 +7943,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 +8002,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 +8015,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) +{ + assert(rawData.getHeight() == H && rawData.getWidth() == W); + // 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 +8349,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..fb669e1c8 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 @@ -483,8 +458,15 @@ public: class AutoWBListener { public: + enum class AWBMode { + NONE, + RGB_GREY, + TEMP_CORRELATION_NON_RAW, + TEMP_CORRELATION_RAW, + }; + 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, AWBMode aWBMode) = 0; }; class FrameCountListener @@ -635,7 +617,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/rtlensfun.cc b/rtengine/rtlensfun.cc index 58f3d12a3..fc5bb0017 100644 --- a/rtengine/rtlensfun.cc +++ b/rtengine/rtlensfun.cc @@ -435,11 +435,21 @@ std::vector LFDatabase::getLenses() const } -LFCamera LFDatabase::findCamera(const Glib::ustring &make, const Glib::ustring &model) const +LFCamera LFDatabase::findCamera(const Glib::ustring &make, const Glib::ustring &model, bool autoMatch) const { LFCamera ret; if (data_ && !make.empty()) { MyMutex::MyLock lock(lfDBMutex); + if (!autoMatch) { + // Try to find exact match by name. + for (auto camera_list = data_->GetCameras(); camera_list[0]; camera_list++) { + const auto camera = camera_list[0]; + if (make == camera->Maker && model == camera->Model) { + ret.data_ = camera; + return ret; + } + } + } auto found = data_->FindCamerasExt(make.c_str(), model.c_str()); if (found) { ret.data_ = found[0]; @@ -455,6 +465,16 @@ LFLens LFDatabase::findLens(const LFCamera &camera, const Glib::ustring &name) c LFLens ret; if (data_ && !name.empty()) { MyMutex::MyLock lock(lfDBMutex); + if (!camera.data_) { + // Only the lens name provided. Try to find exact match by name. + LFLens candidate; + for (auto lens_list = data_->GetLenses(); lens_list[0]; lens_list++) { + candidate.data_ = lens_list[0]; + if (name == candidate.getLens()) { + return candidate; + } + } + } auto found = data_->FindLenses(camera.data_, nullptr, name.c_str()); for (size_t pos = 0; !found && pos < name.size(); ) { // try to split the maker from the model of the lens -- we have to @@ -541,7 +561,7 @@ std::unique_ptr LFDatabase::findModifier( return nullptr; } - const LFCamera c = findCamera(make, model); + const LFCamera c = findCamera(make, model, lensProf.lfAutoMatch()); const LFLens l = findLens( lensProf.lfAutoMatch() ? c diff --git a/rtengine/rtlensfun.h b/rtengine/rtlensfun.h index 51212c9b9..bcce77f34 100644 --- a/rtengine/rtlensfun.h +++ b/rtengine/rtlensfun.h @@ -120,7 +120,7 @@ public: std::vector getCameras() const; std::vector getLenses() const; - LFCamera findCamera(const Glib::ustring &make, const Glib::ustring &model) const; + LFCamera findCamera(const Glib::ustring &make, const Glib::ustring &model, bool autoMatch) const; LFLens findLens(const LFCamera &camera, const Glib::ustring &name) const; std::unique_ptr findModifier( diff --git a/rtengine/rtthumbnail.cc b/rtengine/rtthumbnail.cc index 11dae8018..65c03ac96 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 (unsigned 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 (unsigned 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; @@ -1146,7 +1202,19 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, eSensorT double cam_b = colorMatrix[2][0] * camwbRed + colorMatrix[2][1] * camwbGreen + colorMatrix[2][2] * camwbBlue; currWB = ColorTemp (cam_r, cam_g, cam_b, params.wb.equal, params.wb.observer); } else if (params.wb.method == "autold") { - currWB = ColorTemp (autoWBTemp, autoWBGreen, wbEqual, "Custom", wbObserver); + if (params.wb.compat_version == 1 && !isRaw) { + // RGB grey compatibility version 1 used the identity multipliers + // plus temperature bias for non-raw files. + currWB.update(1., 1., 1., params.wb.equal, params.wb.observer, params.wb.tempBias); + } else { + currWB = ColorTemp(autoWBTemp, autoWBGreen, wbEqual, "Custom", wbObserver); + } + } else if (params.wb.method == "autitcgreen") { + if (params.wb.compat_version == 1 && !isRaw) { + currWB = ColorTemp(5000., 1., 1., params.wb.method, StandardObserver::TEN_DEGREES); + } else { + // TODO: Temperature correlation AWB. + } } double rm, gm, bm; @@ -1229,7 +1297,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); @@ -1275,8 +1343,8 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, eSensorT ipf.firstAnalysis (baseImg, params, hist16); ipf.dehaze(baseImg, params.dehaze); - ipf.ToneMapFattal02(baseImg, params.fattal, 3, 0, nullptr, 0, 0, 0); - + ipf.ToneMapFattal02(baseImg, params.fattal, 3, 0, nullptr, 0, 0, 0, false); + // perform transform int origFW; int origFH; @@ -1427,7 +1495,7 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, eSensorT } } - + // luminance processing // ipf.EPDToneMap(labView,0,6); @@ -1466,6 +1534,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 +2283,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..4202ac336 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" @@ -270,16 +271,85 @@ private: // set the color temperature currWB = ColorTemp(params.wb.temperature, params.wb.green, params.wb.equal, params.wb.method, params.wb.observer); + ColorTemp currWBitc; + if (params.wb.method == "autitcgreen" && flush) { + imgsrc->getrgbloc(0, 0, fh, fw, 0, 0, fh, fw, params.wb); + } + const bool autowb = (params.wb.method == "autitcgreen" && imgsrc->isRAW() && flush); + ColorTemp autoWB; + 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 greenitc = 1.; + float temp0 = 5000.f; + bool extra = false; + bool forcewbgrey = false; if (!params.wb.enabled) { currWB = ColorTemp(); - } else if (params.wb.method == "Camera") { + } else if (params.wb.method == "Camera" || (params.wb.method == "autitcgreen" && params.wb.compat_version >= 2 && !imgsrc->isRAW() && flush)) {//Use also Camera settings for Temperature correlation and TIF/Jpg currWB = imgsrc->getWB(); - } else if (params.wb.method == "autold") { + } else if (params.wb.method == "autold") {//for Auto RGB double rm, gm, bm; - imgsrc->getAutoWBMultipliers(rm, gm, bm); + if (params.wb.compat_version == 1 && !imgsrc->isRAW()) { + // RGB grey compatibility version 1 used the identity + // multipliers plus temperature bias for non-raw files. + rm = gm = bm = 1.; + } else { + imgsrc->getAutoWBMultipliers(rm, gm, bm); + } currWB.update(rm, gm, bm, params.wb.equal, params.wb.observer, params.wb.tempBias); + + } else if (autowb) {//for auto Itcwb - flush to enable only when batch only with Raw files + //code similar to that present in improccoordinator.cc + double rm; + double gm; + double bm; + imgsrc->getAutoWBMultipliersItcGreen( + params, + forcewbgrey, + kcam, + greenitc, + extra, + temp0, + delta, + bia, + dread, + nocam, + studgood, + minchrom, + kmin, + minhist, + maxhist, + fh, + fw, + currWB, + 0, + 0., + false, + autoWB, + rm, + gm, + bm); + + currWB = autoWB; + } else if (params.wb.method == "autitcgreen" && params.wb.compat_version == 1 && !imgsrc->isRAW() && flush) { + // ITCWB compatibility version 1 used 5000 K and observer 10 degrees + // for non-raw files. + currWB = ColorTemp(5000., 1., 1., params.wb.method, StandardObserver::TEN_DEGREES); + currWB.convertObserver(params.wb.observer); + params.wb.temperature = currWB.getTemp(); + params.wb.green = currWB.getGreen(); + params.wb.equal = currWB.getEqual(); } + //end WB auto calclum = nullptr ; params.dirpyrDenoise.getCurves(noiseLCurve, noiseCCurve); @@ -372,7 +442,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 +666,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 +826,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 +851,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) { @@ -896,7 +966,7 @@ private: ipf.firstAnalysis(baseImg, params, hist16); ipf.dehaze(baseImg, params.dehaze); - ipf.ToneMapFattal02(baseImg, params.fattal, 3, 0, nullptr, 0, 0, 0); + ipf.ToneMapFattal02(baseImg, params.fattal, 3, 0, nullptr, 0, 0, 0, false); // perform transform (excepted resizing) if (ipf.needsTransform(fw, fh, imgsrc->getRotateDegree(), imgsrc->getMetaData())) { @@ -928,7 +998,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 +1017,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 +1072,7 @@ private: LocLLmaskCurve locllmas_Curve; LocHHmaskCurve lochhmas_Curve; LocHHmaskCurve lochhhmas_Curve; - + LocwavCurve loclmasCurveblwav; LocwavCurve loclmasCurvecolwav; LocwavCurve loclmasCurve_wav; @@ -1094,7 +1164,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 +1228,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 +1255,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 +1273,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 +1546,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 +1574,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 +1586,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 +1641,7 @@ private: } delete tmpImage; } - + } if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { @@ -1661,7 +1731,7 @@ private: labView->b[x][y] = 0.f; } } - + } //Colorappearance and tone-mapping associated @@ -1688,18 +1758,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 +1895,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 +1932,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(); @@ -2121,7 +2185,6 @@ IImagefloat* processImage(ProcessingJob* pjob, int& errorCode, ProgressListener* void batchProcessingThread(ProcessingJob* job, BatchProcessingListener* bpl) { - ProcessingJob* currentJob = job; while (currentJob) { 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..435f2f9a0 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,15 @@ 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::getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, const procparams::WBParams & wbpar) +{ +} + +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 +328,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..1ffb0158d 100644 --- a/rtengine/stdimagesource.h +++ b/rtengine/stdimagesource.h @@ -58,16 +58,16 @@ 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 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 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 { return wb; } 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/tmo_fattal02.cc b/rtengine/tmo_fattal02.cc index f49fe9c53..50b795f61 100644 --- a/rtengine/tmo_fattal02.cc +++ b/rtengine/tmo_fattal02.cc @@ -84,7 +84,6 @@ namespace rtengine /****************************************************************************** * RT code ******************************************************************************/ - extern MyMutex *fftwMutex; using namespace std; @@ -310,7 +309,7 @@ float calculateGradients(Array2Df* H, Array2Df* G, int k, bool multithread) // however, the impact is not visible so we ignore this here (*G)(x, y) = sqrt(gx * gx + gy * gy) / divider; - avgGrad += static_cast((*G) (x, y)); + avgGrad += (*G) (x, y); } } @@ -378,6 +377,7 @@ void calculateFiMatrix(Array2Df* FI, Array2Df* gradients[], // only apply gradients to levels>=detail_level but at least to the coarsest if ((k >= detail_level || k == nlevels - 1) && beta != 1.f) { + const float a = alfa * avgGrad[k]; //DEBUG_STR << "calculateFiMatrix: apply gradient to level " << k << endl; #ifdef _OPENMP #pragma omp parallel for shared(fi,avgGrad) if(multithread) @@ -385,8 +385,7 @@ void calculateFiMatrix(Array2Df* FI, Array2Df* gradients[], for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { - float grad = ((*gradients[k]) (x, y) < 1e-4f) ? 1e-4f : (*gradients[k]) (x, y); - float a = alfa * avgGrad[k]; + float grad = ((*gradients[k]) (x, y) < 1e-4f) ? 1e-4 : (*gradients[k]) (x, y); float value = pow((grad + noise) / a, beta - 1.0f); (*fi[k])(x, y) *= value; @@ -470,7 +469,7 @@ void tmo_fattal02(size_t width, //paramet // find max value, normalize to range 0..100 and take logarithm // float minLum = Y (0, 0); - float maxLum = Y(0, 0); + float maxLum = Y(0, 0); #ifdef _OPENMP #pragma omp parallel for reduction(max:maxLum) if(multithread) @@ -482,7 +481,7 @@ void tmo_fattal02(size_t width, Array2Df* H = new Array2Df(width, height); float temp = 100.f / maxLum; - + float eps = 1e-4f; if (algo == 1) { temp = 1.f; } @@ -491,7 +490,6 @@ void tmo_fattal02(size_t width, #pragma omp parallel if(multithread) #endif { - const float eps = 1e-4f; #ifdef __SSE2__ const vfloat epsv = F2V(eps); const vfloat tempv = F2V(temp); @@ -567,9 +565,9 @@ void tmo_fattal02(size_t width, gradients[k] = new Array2Df(pyramids[k]->getCols(), pyramids[k]->getRows()); avgGrad[k] = calculateGradients(pyramids[k], gradients[k], k, multithread); - if (k != 0) { // pyramids[0] is H. Will be deleted later + if (k != 0) // pyramids[0] is H. Will be deleted later delete pyramids[k]; - } + } @@ -615,8 +613,8 @@ void tmo_fattal02(size_t width, // sets index+1 based on the boundary assumption H(N+1)=H(N-1) unsigned int xp1 = (x + 1 >= width ? width - 2 : x + 1); // forward differences in H, so need to use between-points approx of FI - (*Gx) (x, y) = ((*H) (xp1, y) - (*H) (x, y)) * 0.5f * ((*FI) (xp1, y) + (*FI) (x, y)); - (*Gy) (x, y) = ((*H) (x, yp1) - (*H) (x, y)) * 0.5f * ((*FI) (x, yp1) + (*FI) (x, y)); + (*Gx) (x, y) = ((*H) (xp1, y) - (*H) (x, y)) * 0.5 * ((*FI) (xp1, y) + (*FI) (x, y)); + (*Gy) (x, y) = ((*H) (x, yp1) - (*H) (x, y)) * 0.5 * ((*FI) (x, yp1) + (*FI) (x, y)); } } @@ -759,7 +757,7 @@ void transform_ev2normal(Array2Df *A, Array2Df *T, bool multithread) } for (int y = 1 ; y < height - 1 ; y++) { - (*A) (0, y) *= 0.5f; + (*A) (0, y) *= 0.5; (*A)(width - 1, y) *= 0.5f; } @@ -889,7 +887,7 @@ void solve_pde_fft(Array2Df *F, Array2Df *U, Array2Df *buf, bool multithread, in if (multithread) { fftwf_init_threads(); - fftwf_plan_with_nthreads(omp_get_max_threads()); + fftwf_plan_with_nthreads(omp_get_num_procs()); } // #else @@ -924,7 +922,7 @@ void solve_pde_fft(Array2Df *F, Array2Df *U, Array2Df *buf, bool multithread, in for (int y = 0 ; y < height ; y++) { for (int x = 0 ; x < width ; x++) { - (*F_tr) (x, y) = static_cast((*F_tr) (x, y)) / (l1[y] + l2[x]); + (*F_tr) (x, y) = (*F_tr) (x, y) / (l1[y] + l2[x]); } } @@ -932,7 +930,7 @@ void solve_pde_fft(Array2Df *F, Array2Df *U, Array2Df *buf, bool multithread, in // transforms F_tr back to the normal space transform_ev2normal(F_tr, U, multithread); - +/* // the solution U as calculated will satisfy something like int U = 0 // since for any constant c, U-c is also a solution and we are mainly // working in the logspace of (0,1) data we prefer to have @@ -957,6 +955,8 @@ void solve_pde_fft(Array2Df *F, Array2Df *U, Array2Df *buf, bool multithread, in (*U)(i) -= maxVal; } } + + */ } @@ -1064,7 +1064,7 @@ inline int find_fast_dim(int dim) } // namespace -void ImProcFunctions::ToneMapFattal02(Imagefloat *rgb, const FattalToneMappingParams &fatParams, int detail_level, int Lalone, float **Lum, int WW, int HH, int algo) +void ImProcFunctions::ToneMapFattal02(Imagefloat *rgb, const FattalToneMappingParams &fatParams, int detail_level, int Lalone, float **Lum, int WW, int HH, int algo, bool sat) //algo allows to use ART algorithme algo = 0 RT, algo = 1 ART //Lalone allows to use L without RGB values in RT mode { @@ -1073,7 +1073,7 @@ void ImProcFunctions::ToneMapFattal02(Imagefloat *rgb, const FattalToneMappingPa } BENCHFUN -// const int detail_level = 3; + // const int detail_level = 3; float alpha = 1.f; @@ -1137,7 +1137,7 @@ void ImProcFunctions::ToneMapFattal02(Imagefloat *rgb, const FattalToneMappingPa Array2Df L(w2, h2); { #ifdef _OPENMP - int num_threads = multiThread ? omp_get_max_threads() : 1; + int num_threads = multiThread ? omp_get_num_procs() : 1; #else int num_threads = 1; #endif @@ -1224,16 +1224,18 @@ void ImProcFunctions::ToneMapFattal02(Imagefloat *rgb, const FattalToneMappingPa } + const bool satcontrol = sat; + #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) if(multiThread) #endif for (int y = 0; y < h; y++) { - int yy = y * hr + 1; + int yy = std::min(int(y * hr + 1), h2-1); for (int x = 0; x < w; x++) { - int xx = x * wr + 1; + int xx = std::min(int(x * wr + 1), w2-1); float Y = std::max(Yr(x, y), epsilon); float l = std::max(L(xx, yy), epsilon) * (scale / Y); @@ -1242,15 +1244,33 @@ void ImProcFunctions::ToneMapFattal02(Imagefloat *rgb, const FattalToneMappingPa float &r = rgb->r(y, x); float &g = rgb->g(y, x); float &b = rgb->b(y, x); + float s = 1.f; if(l > 1.f) { r = max(r * l - offset, r); g = max(g * l - offset, g); b = max(b * l - offset, b); + if (satcontrol) { + s = pow_F(1.f / l, 0.3f); + } } else { r *= l; g *= l; b *= l; + if (satcontrol) { + s = pow_F(l, 0.3f); + } } + + if (satcontrol && s != 1.f) { + float ll = luminance(r, g, b, ws); + float rl = r - ll; + float gl = g - ll; + float bl = b - ll; + r = ll + s * rl; + g = ll + s * gl; + b = ll + s * bl; + } + assert(std::isfinite(rgb->r(y, x))); assert(std::isfinite(rgb->g(y, x))); assert(std::isfinite(rgb->b(y, x))); 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 a7125fb9a..000000000 --- a/rtexif/rtexif.cc +++ /dev/null @@ -1,3553 +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 { - // 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; -} - - - -int ExifManager::createJPEGMarker (const TagDirectory* root, const rtengine::procparams::ExifPairs& changeList, int W, int H, unsigned char* buffer) -{ - - // write tiff header - int offs = 6; - memcpy (buffer, "Exif\0\0", 6); - ByteOrder order = INTEL; - - if (root) { - order = root->getOrder (); - } - - sset2 ((unsigned short)order, buffer + offs, order); - offs += 2; - sset2 (42, buffer + offs, order); - offs += 2; - sset4 (8, buffer + offs, order); - - 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 (); - int size = cl->write (8, buffer + 6); - - delete cl; - - return size + 6; -} - -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 7b2f8ad23..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 int createJPEGMarker (const TagDirectory* root, const rtengine::procparams::ExifPairs& changeList, int W, int H, unsigned char* buffer); - 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/adjuster.cc b/rtgui/adjuster.cc index 49a5ed21b..b94bc459f 100644 --- a/rtgui/adjuster.cc +++ b/rtgui/adjuster.cc @@ -24,6 +24,7 @@ #include "multilangmgr.h" #include "options.h" #include "rtimage.h" +#include "rtscalable.h" #include "../rtengine/rt_math.h" namespace { @@ -93,7 +94,7 @@ Adjuster::Adjuster( reset = Gtk::manage(new Gtk::Button()); - reset->add(*Gtk::manage(new RTImage("undo-small.png", "redo-small.png"))); + reset->add(*Gtk::manage(new RTImage("undo-small", Gtk::ICON_SIZE_BUTTON))); setExpandAlignProperties(reset, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); reset->set_relief(Gtk::RELIEF_NONE); reset->set_tooltip_markup(M("ADJUSTER_RESET_TO_DEFAULT")); @@ -105,7 +106,7 @@ Adjuster::Adjuster( setExpandAlignProperties(spin, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); spin->set_input_purpose(Gtk::INPUT_PURPOSE_DIGITS); - reset->set_size_request(-1, spin->get_height() > MIN_RESET_BUTTON_HEIGHT ? spin->get_height() : MIN_RESET_BUTTON_HEIGHT); + reset->set_size_request(-1, RTScalable::scalePixelSize(spin->get_height() > MIN_RESET_BUTTON_HEIGHT ? spin->get_height() : MIN_RESET_BUTTON_HEIGHT)); slider = Gtk::manage(new MyHScale()); setExpandAlignProperties(slider, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); slider->set_draw_value(false); @@ -193,7 +194,7 @@ void Adjuster::addAutoButton (const Glib::ustring &tooltip) { if (!automatic) { automatic = Gtk::manage(new Gtk::CheckButton()); - //automatic->add (*Gtk::manage (new RTImage ("gears.png"))); + //automatic->add (*Gtk::manage (new RTImage ("gears"))); automatic->set_tooltip_markup(tooltip.length() ? Glib::ustring::compose("%1\n\n%2", M("GENERAL_AUTO"), tooltip) : M("GENERAL_AUTO")); setExpandAlignProperties(automatic, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); autoChange = automatic->signal_toggled().connect( sigc::mem_fun(*this, &Adjuster::autoToggled) ); @@ -616,7 +617,7 @@ void Adjuster::setLogScale(double base, double pivot, bool anchorMiddle) logPivot = pivot; logAnchorMiddle = anchorMiddle; setSliderValue(cur); - + sliderChange.block(false); spinChange.block(false); } diff --git a/rtgui/batchqueue.cc b/rtgui/batchqueue.cc index 4e25475f0..32f6a9430 100644 --- a/rtgui/batchqueue.cc +++ b/rtgui/batchqueue.cc @@ -20,6 +20,7 @@ #include #include #include +#include "../rtengine/imagedata.h" #include "../rtengine/rt_math.h" #include "../rtengine/procparams.h" @@ -43,6 +44,74 @@ using namespace std; using namespace rtengine; +#ifdef _WIN32 +#define PATH_SEPARATOR '\\'; +#else +#define PATH_SEPARATOR '/'; +#endif + +namespace // local helper functions +{ + // Look for N or -N in templateText at position ix, meaning "index from end" and "index from start". + // For N, return Nth index from the end, and for -N return the Nth index from the start. + // N is a digit 1 through 9. The returned value is not range-checked, so it may be >=numPathElements. + // or negative. The caller performs any required range-checking. + int decodePathIndex(unsigned int& ix, Glib::ustring& templateText, size_t numPathElements) + { + int pathIndex = static_cast(numPathElements); // a value that means input was invalid + bool fromStart = false; + if (ix < templateText.size()) { + if (templateText[ix] == '-') { + fromStart = true; // minus sign means N is from the start rather than the end of the path + ix++; + } + } + if (ix < templateText.size()) { + pathIndex = templateText[ix] - '1'; + if (!fromStart) { + pathIndex = numPathElements - pathIndex - 1; + } + } + return pathIndex; + } + + // Extract the initial characters from a canonical absolute path, and append + // those to a path string. Initial characters are '/' for Unix/Linux paths and + // '\\' or '//' for UNC paths. A single backslash is also accepted, for driveless + // Windows paths. + void appendAbsolutePathPrefix(Glib::ustring& path, const Glib::ustring& absolutePath) + { + if (absolutePath[0] == '/') { + if (absolutePath.size() > 1 && absolutePath[1] == '/') { + path += "//"; // Start of a Samba UNC path + } else { + path += '/'; // Start of a Unix/Linux path + } + } else if (absolutePath[0] == '\\') { + if (absolutePath.size() > 1 && absolutePath[1] == '\\') { + path += "\\\\"; // Start of a UNC path + } else { + path += '\\'; // Start of a Windows path that does not include a drive letter + } + } + } + + // Look in templateText at index ix for quoted string containing a time format string, and + // use that string to format dateTime. Append the formatted time to path. + void appendFormattedTime(Glib::ustring& path, unsigned int& ix, const Glib::ustring& templateText, const Glib::DateTime& dateTime) + { + constexpr gunichar quoteMark('"'); + if ((ix + 1) < templateText.size() && templateText[ix] == quoteMark) { + const auto endPos = templateText.find_first_of(quoteMark, ++ix); + if (endPos != Glib::ustring::npos) { + Glib::ustring formatString(templateText, ix, endPos-ix); + path += dateTime.format(formatString); + ix = endPos; + } + } + } +} + BatchQueue::BatchQueue (FileCatalog* aFileCatalog) : processing(nullptr), fileCatalog(aFileCatalog), sequence(0), listener(nullptr) { @@ -57,16 +126,16 @@ BatchQueue::BatchQueue (FileCatalog* aFileCatalog) : processing(nullptr), fileCa pmenu.attach (*Gtk::manage(new Gtk::SeparatorMenuItem ()), 0, 1, p, p + 1); p++; - pmenu.attach (*Gtk::manage(head = new MyImageMenuItem (M("FILEBROWSER_POPUPMOVEHEAD"), "goto-start-small.png")), 0, 1, p, p + 1); + pmenu.attach (*Gtk::manage(head = new MyImageMenuItem (M("FILEBROWSER_POPUPMOVEHEAD"), "goto-start-small")), 0, 1, p, p + 1); p++; - pmenu.attach (*Gtk::manage(tail = new MyImageMenuItem (M("FILEBROWSER_POPUPMOVEEND"), "goto-end-small.png")), 0, 1, p, p + 1); + pmenu.attach (*Gtk::manage(tail = new MyImageMenuItem (M("FILEBROWSER_POPUPMOVEEND"), "goto-end-small")), 0, 1, p, p + 1); p++; pmenu.attach (*Gtk::manage(new Gtk::SeparatorMenuItem ()), 0, 1, p, p + 1); p++; - pmenu.attach (*Gtk::manage(cancel = new MyImageMenuItem (M("FILEBROWSER_POPUPCANCELJOB"), "cancel-small.png")), 0, 1, p, p + 1); + pmenu.attach (*Gtk::manage(cancel = new MyImageMenuItem (M("FILEBROWSER_POPUPCANCELJOB"), "cancel-small")), 0, 1, p, p + 1); pmenu.show_all (); @@ -253,7 +322,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 @@ -394,7 +463,7 @@ Glib::ustring BatchQueue::getTempFilenameForParams( const Glib::ustring &filenam timeval tv; gettimeofday(&tv, nullptr); char mseconds[11]; - snprintf(mseconds, sizeof(mseconds), "%d", (int)(tv.tv_usec / 1000)); + snprintf(mseconds, sizeof(mseconds), "%d", static_cast((tv.tv_usec / 1000))); time_t rawtime; struct tm *timeinfo; char stringTimestamp [80]; @@ -561,12 +630,28 @@ void BatchQueue::openLastSelectedItemInEditor() { MYREADERLOCK(l, entryRW); - if (selected.size() > 0) { + if (!selected.empty()) { openItemInEditor(selected.back()); } } } +void BatchQueue::updateDestinationPathPreview() +{ + MYWRITERLOCK(l, entryRW); + + if (!selected.empty()) { + auto& entry = *selected.at(0); + int sequence = 0; // Sequence during subsequent queue processing can't be determined here + Glib::ustring baseDestination = calcAutoFileNameBase(entry.filename, sequence); + Glib::ustring destination = Glib::ustring::compose ("%1.%2", baseDestination, options.saveFormatBatch.format); + + if (listener) { + listener->setDestinationPreviewText(destination); + } + } +} + void BatchQueue::openItemInEditor(ThumbBrowserEntryBase* item) { if (item) { @@ -811,7 +896,6 @@ rtengine::ProcessingJob* BatchQueue::imageReady(rtengine::IImagefloat* img) Glib::ustring BatchQueue::calcAutoFileNameBase (const Glib::ustring& origFileName, int sequence) { - std::vector pa; std::vector da; for (size_t i = 0; i < origFileName.size(); i++) { @@ -829,29 +913,13 @@ Glib::ustring BatchQueue::calcAutoFileNameBase (const Glib::ustring& origFileNam tok = tok + origFileName[i++]; } - da.push_back (tok); - } - - if (origFileName[0] == '/') { - pa.push_back ("/" + da[0]); - } else if (origFileName[0] == '\\') { - if (origFileName.size() > 1 && origFileName[1] == '\\') { - pa.push_back ("\\\\" + da[0]); - } else { - pa.push_back ("/" + da[0]); + if (i < origFileName.size()) { // omit the last token, which is the file name + da.push_back (tok); } - } else { - pa.push_back (da[0]); } - for (size_t i = 1; i < da.size(); i++) { - pa.push_back (pa[i - 1] + "/" + da[i]); - } - -// for (int i=0; i(da.size())) { + if (n == 0) { + appendAbsolutePathPrefix(path, origFileName); + } + for (unsigned int i = static_cast(n); i < da.size(); i++) { + path += da[i] + PATH_SEPARATOR; + } + } + // If the next template character is a separator, skip it, because path already has one ix++; + if (ix < options.savePathTemplate.size() && options.savePathTemplate[ix] != '/' && options.savePathTemplate[ix] != '\\') { + ix--; + } + } else if (options.savePathTemplate[ix] == 'p') { + // insert path elements from the start of the path up to the given index + ix++; + int n = decodePathIndex(ix, options.savePathTemplate, da.size()); + if (n >= 0) { + appendAbsolutePathPrefix(path, origFileName); + } + for (unsigned int i=0; static_cast(i) <= n && i < da.size(); i++) { + path += da[i] + PATH_SEPARATOR; + } + // If the next template character is a separator, skip it, because path already has one + ix++; + if (ix < options.savePathTemplate.size() && options.savePathTemplate[ix] != '/' && options.savePathTemplate[ix] != '\\') { + ix--; + } } else if (options.savePathTemplate[ix] == 'd') { + // insert a single directory name from the file's path ix++; - unsigned i = options.savePathTemplate[ix] - '0'; - - if (i < da.size()) { - path = path + da[da.size() - i - 1]; + int n = decodePathIndex(ix, options.savePathTemplate, da.size()); + if (n >= 0 && n < static_cast(da.size())) { + path += da[n]; } } else if (options.savePathTemplate[ix] == 'f') { - path = path + filename; + path += filename; } else if (options.savePathTemplate[ix] == 'r') { // rank from pparams char rank; rtengine::procparams::ProcParams pparams; @@ -923,11 +1017,48 @@ Glib::ustring BatchQueue::calcAutoFileNameBase (const Glib::ustring& origFileNam seqstr << sequence; path += seqstr.str (); + } else if (options.savePathTemplate[ix] == 't') { + // Insert formatted date/time value. Character after 't' defines time source + if (++ix < options.savePathTemplate.size()) { + Glib::DateTime dateTime; + switch(options.savePathTemplate[ix++]) + { + case 'E': // (approximate) time when export started + { + dateTime = Glib::DateTime::create_now_local(); + break; + } + case 'F': // time when file was last saved + { + Glib::RefPtr file = Gio::File::create_for_path(origFileName); + if (file) { + Glib::RefPtr info = file->query_info(G_FILE_ATTRIBUTE_TIME_MODIFIED); + if (info) { + dateTime = info->get_modification_date_time(); + } + } + break; + } + case 'P': // time when picture was taken + { + const auto timestamp = FramesData(origFileName).getDateTimeAsTS(); + dateTime = Glib::DateTime::create_now_local(timestamp); + break; + } + default: + { + break; + } + } + if (dateTime) { + appendFormattedTime(path, ix, options.savePathTemplate, dateTime); + } + } } } else { - path = path + options.savePathTemplate[ix]; + path += options.savePathTemplate[ix]; } ix++; @@ -1021,3 +1152,8 @@ void BatchQueue::redrawNeeded (LWButton* button) GThreadLock lock; queue_draw (); } + +void BatchQueue::selectionChanged() +{ + updateDestinationPathPreview(); +} diff --git a/rtgui/batchqueue.h b/rtgui/batchqueue.h index 5cde37748..f8f1cf255 100644 --- a/rtgui/batchqueue.h +++ b/rtgui/batchqueue.h @@ -38,6 +38,7 @@ public: virtual ~BatchQueueListener() = default; virtual void queueSizeChanged(int qsize, bool queueRunning, bool queueError, const Glib::ustring& queueErrorMessage) = 0; virtual bool canStartNext() = 0; + virtual void setDestinationPreviewText(const Glib::ustring& destinationPath) = 0; }; class FileCatalog; @@ -59,6 +60,7 @@ public: void selectAll (); void openItemInEditor(ThumbBrowserEntryBase* item); void openLastSelectedItemInEditor(); + void updateDestinationPathPreview(); void startProcessing (); @@ -79,6 +81,7 @@ public: bool keyPressed (GdkEventKey* event) override; void buttonPressed (LWButton* button, int actionCode, void* actionData) override; void redrawNeeded (LWButton* button) override; + void selectionChanged () override; void setBatchQueueListener (BatchQueueListener* l) { diff --git a/rtgui/batchqueuebuttonset.cc b/rtgui/batchqueuebuttonset.cc index 969a55079..1f4de2286 100644 --- a/rtgui/batchqueuebuttonset.cc +++ b/rtgui/batchqueuebuttonset.cc @@ -25,9 +25,9 @@ bool BatchQueueButtonSet::iconsLoaded = false; -Cairo::RefPtr BatchQueueButtonSet::cancelIcon; -Cairo::RefPtr BatchQueueButtonSet::headIcon; -Cairo::RefPtr BatchQueueButtonSet::tailIcon; +std::shared_ptr BatchQueueButtonSet::cancelIcon; +std::shared_ptr BatchQueueButtonSet::headIcon; +std::shared_ptr BatchQueueButtonSet::tailIcon; Glib::ustring BatchQueueButtonSet::moveHeadToolTip; Glib::ustring BatchQueueButtonSet::moveEndToolTip; @@ -37,9 +37,9 @@ BatchQueueButtonSet::BatchQueueButtonSet (BatchQueueEntry* myEntry) { if (!iconsLoaded) { - cancelIcon = Cairo::RefPtr(new RTSurface("cancel-small.png")); - headIcon = Cairo::RefPtr(new RTSurface("goto-start-small.png")); - tailIcon = Cairo::RefPtr(new RTSurface("goto-end-small.png")); + cancelIcon = std::shared_ptr(new RTSurface("cancel-small", Gtk::ICON_SIZE_BUTTON)); + headIcon = std::shared_ptr(new RTSurface("goto-start-small", Gtk::ICON_SIZE_BUTTON)); + tailIcon = std::shared_ptr(new RTSurface("goto-end-small", Gtk::ICON_SIZE_BUTTON)); moveHeadToolTip = M("FILEBROWSER_POPUPMOVEHEAD"); moveEndToolTip = M("FILEBROWSER_POPUPMOVEEND"); cancelJobToolTip = M("FILEBROWSER_POPUPCANCELJOB"); diff --git a/rtgui/batchqueuebuttonset.h b/rtgui/batchqueuebuttonset.h index fb45df518..2ff96c914 100644 --- a/rtgui/batchqueuebuttonset.h +++ b/rtgui/batchqueuebuttonset.h @@ -31,9 +31,9 @@ class BatchQueueButtonSet : public LWButtonSet static bool iconsLoaded; public: - static Cairo::RefPtr cancelIcon; - static Cairo::RefPtr headIcon; - static Cairo::RefPtr tailIcon; + static std::shared_ptr cancelIcon; + static std::shared_ptr headIcon; + static std::shared_ptr tailIcon; static Glib::ustring moveHeadToolTip; static Glib::ustring moveEndToolTip; diff --git a/rtgui/batchqueueentry.cc b/rtgui/batchqueueentry.cc index 7499fb63b..0948a311f 100644 --- a/rtgui/batchqueueentry.cc +++ b/rtgui/batchqueueentry.cc @@ -22,16 +22,17 @@ #include "guiutils.h" #include "threadutils.h" -#include "rtimage.h" +#include "rtsurface.h" #include "multilangmgr.h" #include "thumbbrowserbase.h" #include "thumbnail.h" +#include "rtsurface.h" #include "../rtengine/procparams.h" #include "../rtengine/rtengine.h" bool BatchQueueEntry::iconsLoaded(false); -Glib::RefPtr BatchQueueEntry::savedAsIcon; +std::shared_ptr BatchQueueEntry::savedAsIcon(std::shared_ptr(nullptr)); BatchQueueEntry::BatchQueueEntry (rtengine::ProcessingJob* pjob, const rtengine::procparams::ProcParams& pparams, Glib::ustring fname, int prevw, int prevh, Thumbnail* thm, bool overwrite) : ThumbBrowserEntryBase(fname, thm), @@ -50,7 +51,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; @@ -59,7 +60,7 @@ BatchQueueEntry::BatchQueueEntry (rtengine::ProcessingJob* pjob, const rtengine: #endif if (!iconsLoaded) { - savedAsIcon = RTImage::createPixbufFromFile ("save-small.png"); + savedAsIcon = std::shared_ptr(new RTSurface("save-small", Gtk::ICON_SIZE_SMALL_TOOLBAR)); iconsLoaded = true; } @@ -153,10 +154,10 @@ void BatchQueueEntry::removeButtonSet () buttonSet = nullptr; } -std::vector> BatchQueueEntry::getIconsOnImageArea () +std::vector> BatchQueueEntry::getIconsOnImageArea () { - std::vector > ret; + std::vector> ret; if (!outFileName.empty()) { ret.push_back (savedAsIcon); @@ -168,8 +169,8 @@ std::vector> BatchQueueEntry::getIconsOnImageArea () void BatchQueueEntry::getIconSize (int& w, int& h) const { - w = savedAsIcon->get_width (); - h = savedAsIcon->get_height (); + w = savedAsIcon->getWidth (); + h = savedAsIcon->getHeight (); } diff --git a/rtgui/batchqueueentry.h b/rtgui/batchqueueentry.h index f06b65046..5d17939fb 100644 --- a/rtgui/batchqueueentry.h +++ b/rtgui/batchqueueentry.h @@ -29,6 +29,7 @@ #include "../rtengine/noncopyable.h" class Thumbnail; +class RTSurface; namespace rtengine { @@ -61,7 +62,7 @@ class BatchQueueEntry final : public ThumbBrowserEntryBase, public BQEntryUpdate public: - static Glib::RefPtr savedAsIcon; + static std::shared_ptr savedAsIcon; rtengine::ProcessingJob* job; const std::unique_ptr params; @@ -84,7 +85,7 @@ public: void removeButtonSet (); - std::vector> getIconsOnImageArea () override; + std::vector> getIconsOnImageArea () override; void getIconSize (int& w, int& h) const override; std::tuple getToolTip (int x, int y) const override; diff --git a/rtgui/batchqueuepanel.cc b/rtgui/batchqueuepanel.cc index 8a6dd25b4..b477790fc 100644 --- a/rtgui/batchqueuepanel.cc +++ b/rtgui/batchqueuepanel.cc @@ -73,7 +73,10 @@ BatchQueuePanel::BatchQueuePanel (FileCatalog* aFileCatalog) : parent(nullptr) hb2->pack_start (*useTemplate, Gtk::PACK_SHRINK, 4); outdirTemplate = Gtk::manage (new Gtk::Entry ()); hb2->pack_start (*outdirTemplate); - odvb->pack_start (*hb2, Gtk::PACK_SHRINK, 4); + templateHelpButton = Gtk::manage (new Gtk::ToggleButton("?")); + templateHelpButton->set_tooltip_markup (M ("QUEUE_LOCATION_TEMPLATE_HELP_BUTTON_TOOLTIP")); + hb2->pack_start (*templateHelpButton, Gtk::PACK_SHRINK, 0); + odvb->pack_start (*hb2, Gtk::PACK_SHRINK, 0); outdirTemplate->set_tooltip_markup (M("QUEUE_LOCATION_TEMPLATE_TOOLTIP")); useTemplate->set_tooltip_markup (M("QUEUE_LOCATION_TEMPLATE_TOOLTIP")); Gtk::Box* hb3 = Gtk::manage (new Gtk::Box ()); @@ -89,7 +92,7 @@ BatchQueuePanel::BatchQueuePanel (FileCatalog* aFileCatalog) : parent(nullptr) hb3->pack_start (*outdirFolderButton); outdirFolderButton->signal_pressed().connect( sigc::mem_fun(*this, &BatchQueuePanel::pathFolderButtonPressed) ); outdirFolderButton->set_label(makeFolderLabel(options.savePathFolder)); - Gtk::Image* folderImg = Gtk::manage (new RTImage ("folder-closed.png")); + Gtk::Image* folderImg = Gtk::manage (new RTImage ("folder-closed", Gtk::ICON_SIZE_LARGE_TOOLBAR)); folderImg->show (); outdirFolderButton->set_image (*folderImg); outdirFolder = nullptr; @@ -108,6 +111,14 @@ BatchQueuePanel::BatchQueuePanel (FileCatalog* aFileCatalog) : parent(nullptr) #endif odvb->pack_start (*hb3, Gtk::PACK_SHRINK, 4); + destinationPreviewLabel = Gtk::manage (new Gtk::Label ()); + destinationPreviewLabel->set_tooltip_markup (M("QUEUE_DESTPREVIEW_TOOLTIP")); + destinationPreviewLabel->set_selectable (true); // so users can copy the path to the clipboard + destinationPreviewLabel->set_halign (Gtk::ALIGN_START); + auto destinationPreviewScrolledWindow = Gtk::manage(new Gtk::ScrolledWindow ()); + destinationPreviewScrolledWindow->set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); + destinationPreviewScrolledWindow->add (*destinationPreviewLabel); + odvb->pack_start (*destinationPreviewScrolledWindow, Gtk::PACK_SHRINK); Gtk::RadioButton::Group g = useTemplate->get_group(); useFolder->set_group (g); fdir->add (*odvb); @@ -122,11 +133,13 @@ BatchQueuePanel::BatchQueuePanel (FileCatalog* aFileCatalog) : parent(nullptr) outdirTemplate->set_text (options.savePathTemplate); useTemplate->set_active (options.saveUsePathTemplate); useFolder->set_active (!options.saveUsePathTemplate); + destinationPreviewLabel->set_text (M("QUEUE_DESTPREVIEW_TITLE")); // setup signal handlers outdirTemplate->signal_changed().connect (sigc::mem_fun(*this, &BatchQueuePanel::saveOptions)); useTemplate->signal_toggled().connect (sigc::mem_fun(*this, &BatchQueuePanel::saveOptions)); useFolder->signal_toggled().connect (sigc::mem_fun(*this, &BatchQueuePanel::saveOptions)); + templateHelpButton->signal_toggled().connect (sigc::mem_fun(*this, &BatchQueuePanel::templateHelpButtonToggled)); saveFormatPanel->setListener (this); // setup button bar @@ -138,8 +151,19 @@ BatchQueuePanel::BatchQueuePanel (FileCatalog* aFileCatalog) : parent(nullptr) topBox->pack_start (*fdir, Gtk::PACK_EXPAND_WIDGET, 4); topBox->pack_start (*fformat, Gtk::PACK_EXPAND_WIDGET, 4); + middleSplitPane = Gtk::manage (new Gtk::Paned(Gtk::ORIENTATION_HORIZONTAL)); + templateHelpTextView = Gtk::manage (new Gtk::TextView()); + templateHelpTextView->set_editable(false); + templateHelpTextView->set_wrap_mode(Gtk::WRAP_WORD); + scrolledTemplateHelpWindow = Gtk::manage(new Gtk::ScrolledWindow()); + scrolledTemplateHelpWindow->add(*templateHelpTextView); + middleSplitPane->pack1 (*scrolledTemplateHelpWindow); + middleSplitPane->pack2 (*batchQueue); + scrolledTemplateHelpWindow->set_visible(false); // initially hidden, templateHelpButton shows it + scrolledTemplateHelpWindow->set_no_show_all(true); + // add middle browser area - pack_start (*batchQueue); + pack_start (*middleSplitPane); // lower box with thumbnail zoom bottomBox = Gtk::manage (new Gtk::Box ()); @@ -152,13 +176,13 @@ BatchQueuePanel::BatchQueuePanel (FileCatalog* aFileCatalog) : parent(nullptr) zoomLabel->set_use_markup (true); zoomBox->pack_start (*zoomLabel, Gtk::PACK_SHRINK, 4); zoomInButton = Gtk::manage (new Gtk::Button ()); - zoomInButton->set_image (*Gtk::manage (new RTImage ("magnifier-plus.png"))); + zoomInButton->set_image (*Gtk::manage (new RTImage ("magnifier-plus", Gtk::ICON_SIZE_LARGE_TOOLBAR))); zoomInButton->signal_pressed().connect (sigc::mem_fun(*batchQueue, &BatchQueue::zoomIn)); zoomInButton->set_relief (Gtk::RELIEF_NONE); zoomInButton->set_tooltip_markup (M("FILEBROWSER_ZOOMINHINT")); zoomBox->pack_end (*zoomInButton, Gtk::PACK_SHRINK); zoomOutButton = Gtk::manage (new Gtk::Button ()); - zoomOutButton->set_image (*Gtk::manage (new RTImage ("magnifier-minus.png"))); + zoomOutButton->set_image (*Gtk::manage (new RTImage ("magnifier-minus", Gtk::ICON_SIZE_LARGE_TOOLBAR))); zoomOutButton->signal_pressed().connect (sigc::mem_fun(*batchQueue, &BatchQueue::zoomOut)); zoomOutButton->set_relief (Gtk::RELIEF_NONE); zoomOutButton->set_tooltip_markup (M("FILEBROWSER_ZOOMOUTHINT")); @@ -208,13 +232,13 @@ void BatchQueuePanel::updateTab (int qsize, int forceOrientation) Gtk::Label* l; if(!qsize ) { - grid->attach_next_to(*Gtk::manage (new RTImage ("gears.png")), Gtk::POS_TOP, 1, 1); + grid->attach_next_to(*Gtk::manage (new RTImage ("gears", Gtk::ICON_SIZE_LARGE_TOOLBAR)), Gtk::POS_TOP, 1, 1); l = Gtk::manage (new Gtk::Label (Glib::ustring(" ") + M("MAIN_FRAME_QUEUE")) ); } else if (qStartStop->get_active()) { - grid->attach_next_to(*Gtk::manage (new RTImage ("gears-play.png")), Gtk::POS_TOP, 1, 1); + grid->attach_next_to(*Gtk::manage (new RTImage ("gears-play", Gtk::ICON_SIZE_LARGE_TOOLBAR)), Gtk::POS_TOP, 1, 1); l = Gtk::manage (new Gtk::Label (Glib::ustring(" ") + M("MAIN_FRAME_QUEUE") + " [" + Glib::ustring::format( qsize ) + "]")); } else { - grid->attach_next_to(*Gtk::manage (new RTImage ("gears-pause.png")), Gtk::POS_TOP, 1, 1); + grid->attach_next_to(*Gtk::manage (new RTImage ("gears-pause", Gtk::ICON_SIZE_LARGE_TOOLBAR)), Gtk::POS_TOP, 1, 1); l = Gtk::manage (new Gtk::Label (Glib::ustring(" ") + M("MAIN_FRAME_QUEUE") + " [" + Glib::ustring::format( qsize ) + "]" )); } @@ -228,13 +252,13 @@ void BatchQueuePanel::updateTab (int qsize, int forceOrientation) } } else { if (!qsize ) { - grid->attach_next_to(*Gtk::manage (new RTImage ("gears.png")), Gtk::POS_RIGHT, 1, 1); + grid->attach_next_to(*Gtk::manage (new RTImage ("gears", Gtk::ICON_SIZE_LARGE_TOOLBAR)), Gtk::POS_RIGHT, 1, 1); grid->attach_next_to(*Gtk::manage (new Gtk::Label (M("MAIN_FRAME_QUEUE") )), Gtk::POS_RIGHT, 1, 1); } else if (qStartStop->get_active()) { - grid->attach_next_to(*Gtk::manage (new RTImage ("gears-play.png")), Gtk::POS_RIGHT, 1, 1); + grid->attach_next_to(*Gtk::manage (new RTImage ("gears-play", Gtk::ICON_SIZE_LARGE_TOOLBAR)), Gtk::POS_RIGHT, 1, 1); grid->attach_next_to(*Gtk::manage (new Gtk::Label (M("MAIN_FRAME_QUEUE") + " [" + Glib::ustring::format( qsize ) + "]" )), Gtk::POS_RIGHT, 1, 1); } else { - grid->attach_next_to(*Gtk::manage (new RTImage ("gears-pause.png")), Gtk::POS_RIGHT, 1, 1); + grid->attach_next_to(*Gtk::manage (new RTImage ("gears-pause", Gtk::ICON_SIZE_LARGE_TOOLBAR)), Gtk::POS_RIGHT, 1, 1); grid->attach_next_to(*Gtk::manage (new Gtk::Label (M("MAIN_FRAME_QUEUE") + " [" + Glib::ustring::format( qsize ) + "]" )), Gtk::POS_RIGHT, 1, 1); } @@ -313,6 +337,122 @@ void BatchQueuePanel::setGuiFromBatchState(bool queueRunning, int qsize) updateTab(qsize); } +void BatchQueuePanel::templateHelpButtonToggled() +{ + bool visible = templateHelpButton->get_active(); + auto buffer = templateHelpTextView->get_buffer(); + if (buffer->get_text().empty()) { + // Populate the help text the first time it's shown + populateTemplateHelpBuffer(buffer); + const auto fullWidth = middleSplitPane->get_width(); + middleSplitPane->set_position(fullWidth / 2); + } + scrolledTemplateHelpWindow->set_visible(visible); + templateHelpTextView->set_visible(visible); +} + +void BatchQueuePanel::populateTemplateHelpBuffer(Glib::RefPtr buffer) +{ + auto pos = buffer->begin(); + const auto insertTopicHeading = [&pos, buffer](const Glib::ustring& text) { + pos = buffer->insert_markup(pos, Glib::ustring::format("\n\n", text, "\n")); + }; + const auto insertTopicBody = [&pos, buffer](const Glib::ustring& text) { + pos = buffer->insert_markup(pos, Glib::ustring::format("\n", text, "\n")); + }; + const auto mainTitle = M("QUEUE_LOCATION_TEMPLATE_HELP_TITLE"); + pos = buffer->insert_markup(pos, Glib::ustring::format("", mainTitle, "\n")); + pos = buffer->insert_markup(pos, M("QUEUE_LOCATION_TEMPLATE_HELP_INTRO")); + + insertTopicHeading(M("QUEUE_LOCATION_TEMPLATE_HELP_EXAMPLES_TITLE")); + pos = buffer->insert_markup(pos, M("QUEUE_LOCATION_TEMPLATE_HELP_EXAMPLES_BODY")); + + insertTopicHeading(M("QUEUE_LOCATION_TEMPLATE_HELP_PATHS_TITLE")); + pos = buffer->insert_markup(pos, M("QUEUE_LOCATION_TEMPLATE_HELP_PATHS_INTRO")); + pos = buffer->insert(pos, "\n"); +#ifdef _WIN32 + pos = buffer->insert_markup(pos, M("QUEUE_LOCATION_TEMPLATE_HELP_PATHS_INTRO_WINDOWS")); + pos = buffer->insert(pos, "\n"); +#endif + pos = buffer->insert(pos, "\n"); + pos = buffer->insert_markup(pos, M("QUEUE_LOCATION_TEMPLATE_HELP_PATHS_BODY_1")); +#ifdef _WIN32 + const auto exampleFilePath = M("QUEUE_LOCATION_TEMPLATE_HELP_PATHS_EXAMPLE_WINDOWS"); +#else + const auto exampleFilePath = M("QUEUE_LOCATION_TEMPLATE_HELP_PATHS_EXAMPLE_LINUX"); +#endif + pos = buffer->insert_markup(pos, Glib::ustring::format("\n ", exampleFilePath, "\n")); + pos = buffer->insert_markup(pos, M("QUEUE_LOCATION_TEMPLATE_HELP_PATHS_BODY_2")); + // Examples are generated from exampleFilePath using the actual template processing function + const Options savedOptions = options; // to be restored after generating example results + options.saveUsePathTemplate = true; + // Since this code only ever runs once (the first time the help text is presented), no attempt is + // made to be efficient. Use a brute-force method to discover the number of elements in exampleFilePath. + int pathElementCount = 0; + for (int n=9; n>=0; n--) { + options.savePathTemplate = Glib::ustring::format("%d", n); + const auto result = BatchQueue::calcAutoFileNameBase(exampleFilePath); + if (!result.empty()) { + // The 'd' specifier returns an empty string if N exceeds the number of path elements, so + // the largest N that does not return an empty string is the number of elements in exampleFilePath. + pathElementCount = n; + break; + } + } + // Function inserts examples for a particular specifier, with every valid N value for the + // number of elements in the path. + const auto insertPathExamples = [&buffer, &pos, pathElementCount, exampleFilePath](char letter, int offset1, int mult1, int offset2, int mult2) + { + for (int n=0; ninsert_markup(pos, Glib::ustring::format("\n ", path1, " = ", path2, " = ", result1, "")); + if (result1 != result2) { + // If this error appears, it indicates a coding error in either BatchQueue::calcAutoFileNameBase + // or BatchQueuePanel::populateTemplateHelpBuffer. + pos = buffer->insert_markup(pos, Glib::ustring::format(" ", M("QUEUE_LOCATION_TEMPLATE_HELP_RESULT_MISMATCH"), " ", result2)); + } + } + }; + // Example outputs in comments below are for a 4-element path. + insertPathExamples('d', pathElementCount, -1, -1, -1); // %d4 = %d-1 = home + insertPathExamples('p', 1, 1, -pathElementCount, 1); // %p1 = %p-4 = /home/tom/photos/2010-10-31/ + insertPathExamples('P', 1, 1, -pathElementCount, 1); // %P1 = %P-4 = 2010-10-31/ + { + const Glib::ustring fspecifier("%f"); + options.savePathTemplate = fspecifier; + const auto result = BatchQueue::calcAutoFileNameBase(exampleFilePath); + pos = buffer->insert_markup(pos, Glib::ustring::format("\n ", fspecifier, " = ", result, "")); + } + + insertTopicHeading(M("QUEUE_LOCATION_TEMPLATE_HELP_RANK_TITLE")); + pos = buffer->insert_markup(pos, M("QUEUE_LOCATION_TEMPLATE_HELP_RANK_BODY")); + + insertTopicHeading(M("QUEUE_LOCATION_TEMPLATE_HELP_SEQUENCE_TITLE")); + pos = buffer->insert_markup(pos, M("QUEUE_LOCATION_TEMPLATE_HELP_SEQUENCE_BODY")); + + insertTopicHeading(M("QUEUE_LOCATION_TEMPLATE_HELP_TIMESTAMP_TITLE")); + pos = buffer->insert_markup(pos, M("QUEUE_LOCATION_TEMPLATE_HELP_TIMESTAMP_BODY")); + const Glib::ustring dateTimeFormatExamples[] = { + "%Y-%m-%d", + "%Y%m%d_%H%M%S", + "%y/%b/%-d/" + }; + const auto timezone = Glib::DateTime::create_now_local().get_timezone(); + const auto timeForExamples = Glib::DateTime::create_from_iso8601("2001-02-03T04:05:06.123456", timezone); + for (auto && fmt : dateTimeFormatExamples) { + const auto result = timeForExamples.format(fmt); + pos = buffer->insert_markup(pos, Glib::ustring::format("\n %tE\"", fmt, "\" = ", result, "")); + } + + pos = buffer->insert(pos, "\n"); + options = savedOptions; // Do not add any lines in this function below here +} + void BatchQueuePanel::addBatchQueueJobs(const std::vector& entries, bool head) { batchQueue->addEntries(entries, head); @@ -329,6 +469,7 @@ void BatchQueuePanel::saveOptions () options.savePathTemplate = outdirTemplate->get_text(); options.saveUsePathTemplate = useTemplate->get_active(); options.procQueueEnabled = qAutoStart->get_active(); + batchQueue->updateDestinationPathPreview(); } bool BatchQueuePanel::handleShortcutKey (GdkEventKey* event) @@ -358,6 +499,11 @@ bool BatchQueuePanel::canStartNext () return queueShouldRun; } +void BatchQueuePanel::setDestinationPreviewText(const Glib::ustring &destinationPath) +{ + destinationPreviewLabel->set_text(destinationPath); +} + void BatchQueuePanel::pathFolderButtonPressed () { @@ -381,9 +527,11 @@ void BatchQueuePanel::pathFolderButtonPressed () void BatchQueuePanel::pathFolderChanged () { options.savePathFolder = outdirFolder->get_filename(); + batchQueue->updateDestinationPathPreview(); } void BatchQueuePanel::formatChanged(const Glib::ustring& format) { options.saveFormatBatch = saveFormatPanel->getFormat(); + batchQueue->updateDestinationPathPreview(); } diff --git a/rtgui/batchqueuepanel.h b/rtgui/batchqueuepanel.h index db4e243e9..417d8a4cb 100644 --- a/rtgui/batchqueuepanel.h +++ b/rtgui/batchqueuepanel.h @@ -42,6 +42,7 @@ class BatchQueuePanel : public Gtk::Box, Gtk::CheckButton* qAutoStart; Gtk::Entry* outdirTemplate; + Gtk::Label* destinationPreviewLabel; MyFileChooserButton* outdirFolder; Gtk::Button* outdirFolderButton; Gtk::RadioButton* useTemplate; @@ -51,8 +52,12 @@ class BatchQueuePanel : public Gtk::Box, RTWindow* parent; BatchQueue* batchQueue; + Gtk::TextView* templateHelpTextView; + Gtk::ScrolledWindow* scrolledTemplateHelpWindow; + Gtk::ToggleButton* templateHelpButton; Gtk::Box* bottomBox; Gtk::Box* topBox; + Gtk::Paned* middleSplitPane; std::atomic queueShouldRun; @@ -72,12 +77,15 @@ public: // batchqueuelistener interface void queueSizeChanged(int qsize, bool queueRunning, bool queueError, const Glib::ustring& queueErrorMessage) override; bool canStartNext() override; + void setDestinationPreviewText(const Glib::ustring& destinationPath) override; private: void startBatchProc (); void stopBatchProc (); void startOrStopBatchProc(); void setGuiFromBatchState(bool queueRunning, int qsize); + void templateHelpButtonToggled(); + void populateTemplateHelpBuffer(Glib::RefPtr buffer); void pathFolderChanged (); void pathFolderButtonPressed (); 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/blackwhite.cc b/rtgui/blackwhite.cc index 6e618ea3b..2d3c35a54 100644 --- a/rtgui/blackwhite.cc +++ b/rtgui/blackwhite.cc @@ -189,18 +189,18 @@ BlackWhite::BlackWhite (): FoldableToolPanel(this, TOOL_NAME, M("TP_BWMIX_LABEL" //----------- RGB / ROYGCBPM Mixer ------------------------------ - imgIcon[0] = Gtk::manage (new RTImage ("circle-red-small.png")); - imgIcon[1] = Gtk::manage (new RTImage ("circle-orange-small.png")); - imgIcon[2] = Gtk::manage (new RTImage ("circle-yellow-small.png")); - imgIcon[3] = Gtk::manage (new RTImage ("circle-green-small.png")); - imgIcon[4] = Gtk::manage (new RTImage ("circle-cyan-small.png")); - imgIcon[5] = Gtk::manage (new RTImage ("circle-blue-small.png")); - imgIcon[6] = Gtk::manage (new RTImage ("circle-purple-small.png")); - imgIcon[7] = Gtk::manage (new RTImage ("circle-magenta-small.png")); + imgIcon[0] = Gtk::manage (new RTImage ("circle-red-small")); + imgIcon[1] = Gtk::manage (new RTImage ("circle-orange-small")); + imgIcon[2] = Gtk::manage (new RTImage ("circle-yellow-small")); + imgIcon[3] = Gtk::manage (new RTImage ("circle-green-small")); + imgIcon[4] = Gtk::manage (new RTImage ("circle-cyan-small")); + imgIcon[5] = Gtk::manage (new RTImage ("circle-blue-small")); + imgIcon[6] = Gtk::manage (new RTImage ("circle-purple-small")); + imgIcon[7] = Gtk::manage (new RTImage ("circle-magenta-small")); - imgIcon[8] = Gtk::manage (new RTImage ("circle-empty-red-small.png")); - imgIcon[9] = Gtk::manage (new RTImage ("circle-empty-green-small.png")); - imgIcon[10] = Gtk::manage (new RTImage ("circle-empty-blue-small.png")); + imgIcon[8] = Gtk::manage (new RTImage ("circle-empty-red-small")); + imgIcon[9] = Gtk::manage (new RTImage ("circle-empty-green-small")); + imgIcon[10] = Gtk::manage (new RTImage ("circle-empty-blue-small")); mixerVBox->pack_start (*Gtk::manage (new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL))); diff --git a/rtgui/cacheimagedata.cc b/rtgui/cacheimagedata.cc index d44ca28ec..0e9cc7f0f 100644 --- a/rtgui/cacheimagedata.cc +++ b/rtgui/cacheimagedata.cc @@ -20,12 +20,22 @@ #include #include #include +#include #include "version.h" #include #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 +66,9 @@ CacheImageData::CacheImageData() : greenAWBMul(-1.0), blueAWBMul(-1.0), rotate(0), - thumbImgType(0) + thumbImgType(0), + width(-1), + height(-1) { } @@ -106,6 +118,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 +226,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")) { @@ -250,7 +274,9 @@ int CacheImageData::save (const Glib::ustring& fname) Glib::KeyFile keyFile; try { - keyFile.load_from_file (fname); + if (Glib::file_test(fname, Glib::FILE_TEST_EXISTS)) { + keyFile.load_from_file (fname); + } } catch (Glib::Error&) {} keyFile.set_string ("General", "MD5", md5); @@ -260,6 +286,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 +326,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 +365,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/cacorrection.cc b/rtgui/cacorrection.cc index 52ed782df..b61c6e9e1 100644 --- a/rtgui/cacorrection.cc +++ b/rtgui/cacorrection.cc @@ -32,10 +32,10 @@ const Glib::ustring CACorrection::TOOL_NAME = "cacorrection"; CACorrection::CACorrection () : FoldableToolPanel(this, TOOL_NAME, M("TP_CACORRECTION_LABEL")) { - Gtk::Image* icaredL = Gtk::manage (new RTImage ("circle-red-cyan-small.png")); - Gtk::Image* icaredR = Gtk::manage (new RTImage ("circle-cyan-red-small.png")); - Gtk::Image* icablueL = Gtk::manage (new RTImage ("circle-blue-yellow-small.png")); - Gtk::Image* icablueR = Gtk::manage (new RTImage ("circle-yellow-blue-small.png")); + Gtk::Image* icaredL = Gtk::manage (new RTImage ("circle-red-cyan-small")); + Gtk::Image* icaredR = Gtk::manage (new RTImage ("circle-cyan-red-small")); + Gtk::Image* icablueL = Gtk::manage (new RTImage ("circle-blue-yellow-small")); + Gtk::Image* icablueR = Gtk::manage (new RTImage ("circle-yellow-blue-small")); red = Gtk::manage (new Adjuster (M("TP_CACORRECTION_RED"), -0.005, 0.005, 0.0001, 0, icaredL, icaredR)); red->setAdjusterListener (this); diff --git a/rtgui/chmixer.cc b/rtgui/chmixer.cc index e54ddfc5d..7cd924dd5 100644 --- a/rtgui/chmixer.cc +++ b/rtgui/chmixer.cc @@ -30,15 +30,15 @@ const Glib::ustring ChMixer::TOOL_NAME = "chmixer"; ChMixer::ChMixer (): FoldableToolPanel(this, TOOL_NAME, M("TP_CHMIXER_LABEL"), false, true) { - imgIcon[0] = Gtk::manage (new RTImage ("circle-red-small.png")); - imgIcon[1] = Gtk::manage (new RTImage ("circle-green-red-small.png")); - imgIcon[2] = Gtk::manage (new RTImage ("circle-blue-red-small.png")); - imgIcon[3] = Gtk::manage (new RTImage ("circle-red-green-small.png")); - imgIcon[4] = Gtk::manage (new RTImage ("circle-green-small.png")); - imgIcon[5] = Gtk::manage (new RTImage ("circle-blue-green-small.png")); - imgIcon[6] = Gtk::manage (new RTImage ("circle-red-blue-small.png")); - imgIcon[7] = Gtk::manage (new RTImage ("circle-green-blue-small.png")); - imgIcon[8] = Gtk::manage (new RTImage ("circle-blue-small.png")); + imgIcon[0] = Gtk::manage (new RTImage ("circle-red-small")); + imgIcon[1] = Gtk::manage (new RTImage ("circle-green-red-small")); + imgIcon[2] = Gtk::manage (new RTImage ("circle-blue-red-small")); + imgIcon[3] = Gtk::manage (new RTImage ("circle-red-green-small")); + imgIcon[4] = Gtk::manage (new RTImage ("circle-green-small")); + imgIcon[5] = Gtk::manage (new RTImage ("circle-blue-green-small")); + imgIcon[6] = Gtk::manage (new RTImage ("circle-red-blue-small")); + imgIcon[7] = Gtk::manage (new RTImage ("circle-green-blue-small")); + imgIcon[8] = Gtk::manage (new RTImage ("circle-blue-small")); Gtk::Label* rlabel = Gtk::manage (new Gtk::Label ()); rlabel->set_markup (Glib::ustring("\t") + M("TP_CHMIXER_RED") + Glib::ustring(":")); @@ -110,7 +110,7 @@ void ChMixer::read (const ProcParams* pp, const ParamsEdited* pedited) disableListener (); setEnabled(pp->chmixer.enabled); - + if (pedited) { for (int i = 0; i < 3; i++) { red[i]->setEditedState (pedited->chmixer.red[i] ? Edited : UnEdited); diff --git a/rtgui/coarsepanel.cc b/rtgui/coarsepanel.cc index c64d53017..48f8041df 100644 --- a/rtgui/coarsepanel.cc +++ b/rtgui/coarsepanel.cc @@ -31,25 +31,25 @@ CoarsePanel::CoarsePanel () : ToolPanel (), oldhflip(false), oldvflip(false) degree = 0; degreechanged = true; - Gtk::Image* rotateli = Gtk::manage (new RTImage ("rotate-left-90.png")); + Gtk::Image* rotateli = Gtk::manage (new RTImage ("rotate-left-90", Gtk::ICON_SIZE_LARGE_TOOLBAR)); rotate_left = Gtk::manage (new Gtk::Button ()); rotate_left->add (*rotateli); rotate_left->set_relief(Gtk::RELIEF_NONE); pack_start (*rotate_left); - Gtk::Image* rotateri = Gtk::manage (new RTImage ("rotate-right-90.png")); + Gtk::Image* rotateri = Gtk::manage (new RTImage ("rotate-right-90", Gtk::ICON_SIZE_LARGE_TOOLBAR)); rotate_right = Gtk::manage (new Gtk::Button ()); rotate_right->add (*rotateri); rotate_right->set_relief(Gtk::RELIEF_NONE); pack_start (*rotate_right); - Gtk::Image* fliphi = Gtk::manage (new RTImage ("flip-horizontal.png")); + Gtk::Image* fliphi = Gtk::manage (new RTImage ("flip-horizontal", Gtk::ICON_SIZE_LARGE_TOOLBAR)); hflip = Gtk::manage (new Gtk::ToggleButton ()); hflip->add (*fliphi); hflip->set_relief(Gtk::RELIEF_NONE); pack_start (*hflip); - Gtk::Image* flipvi = Gtk::manage (new RTImage ("flip-vertical.png")); + Gtk::Image* flipvi = Gtk::manage (new RTImage ("flip-vertical", Gtk::ICON_SIZE_LARGE_TOOLBAR)); vflip = Gtk::manage (new Gtk::ToggleButton ()); vflip->add (*flipvi); vflip->set_relief(Gtk::RELIEF_NONE); diff --git a/rtgui/colorappearance.cc b/rtgui/colorappearance.cc index 41f6952a7..b563cbd3b 100644 --- a/rtgui/colorappearance.cc +++ b/rtgui/colorappearance.cc @@ -235,7 +235,7 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel (this, TOOL_NAME, M ("TP genFrame->set_tooltip_markup (M ("TP_COLORAPP_GEN_TOOLTIP")); genVBox = Gtk::manage ( new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); genVBox->set_spacing (2); - + complexmethod = Gtk::manage (new MyComboBoxText ()); complexmethod->append(M("TP_WAVELET_COMPNORMAL")); complexmethod->append(M("TP_WAVELET_COMPEXPERT")); @@ -246,7 +246,7 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel (this, TOOL_NAME, M ("TP complexHBox->pack_start(*complexLabel, Gtk::PACK_SHRINK, 4); complexHBox->pack_start(*complexmethod); genVBox->pack_start (*complexHBox, Gtk::PACK_SHRINK); - + modelmethod = Gtk::manage (new MyComboBoxText ()); modelmethod->append(M("TP_COLORAPP_MOD02")); modelmethod->append(M("TP_COLORAPP_MOD16")); @@ -269,7 +269,7 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel (this, TOOL_NAME, M ("TP catHBox->pack_start(*catLabel, Gtk::PACK_SHRINK, 4); catHBox->pack_start(*catmethod); genVBox->pack_start (*catHBox, Gtk::PACK_SHRINK); - + genFrame->add (*genVBox); pack_start (*genFrame, Gtk::PACK_EXPAND_WIDGET, 4); @@ -321,7 +321,7 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel (this, TOOL_NAME, M ("TP wbmHBox = Gtk::manage (new Gtk::Box ()); - + wbmHBox->set_spacing (2); wbmHBox->set_tooltip_markup (M ("TP_COLORAPP_MODEL_TOOLTIP")); Gtk::Label* wbmLab = Gtk::manage (new Gtk::Label (M ("TP_COLORAPP_MODEL") + ":")); @@ -355,10 +355,10 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel (this, TOOL_NAME, M ("TP illumHBox->pack_start (*illum); p1VBox->pack_start (*illumHBox); - Gtk::Image* itempL = Gtk::manage (new RTImage ("circle-blue-small.png")); - Gtk::Image* itempR = Gtk::manage (new RTImage ("circle-yellow-small.png")); - Gtk::Image* igreenL = Gtk::manage (new RTImage ("circle-magenta-small.png")); - Gtk::Image* igreenR = Gtk::manage (new RTImage ("circle-green-small.png")); + Gtk::Image* itempL = Gtk::manage (new RTImage ("circle-blue-small")); + Gtk::Image* itempR = Gtk::manage (new RTImage ("circle-yellow-small")); + Gtk::Image* igreenL = Gtk::manage (new RTImage ("circle-magenta-small")); + Gtk::Image* igreenR = Gtk::manage (new RTImage ("circle-green-small")); tempsc = Gtk::manage (new Adjuster (M ("TP_WBALANCE_TEMPERATURE"), MINTEMP0, MAXTEMP0, 5, CENTERTEMP0, itempL, itempR, &wbSlider2Temp, &wbTemp2Slider)); @@ -646,10 +646,10 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel (this, TOOL_NAME, M ("TP p3VBox = Gtk::manage ( new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); p3VBox->set_spacing (2); - Gtk::Image* itempL1 = Gtk::manage (new RTImage ("circle-blue-small.png")); - Gtk::Image* itempR1 = Gtk::manage (new RTImage ("circle-yellow-small.png")); - Gtk::Image* igreenL1 = Gtk::manage (new RTImage ("circle-magenta-small.png")); - Gtk::Image* igreenR1 = Gtk::manage (new RTImage ("circle-green-small.png")); + Gtk::Image* itempL1 = Gtk::manage (new RTImage ("circle-blue-small")); + Gtk::Image* itempR1 = Gtk::manage (new RTImage ("circle-yellow-small")); + Gtk::Image* igreenL1 = Gtk::manage (new RTImage ("circle-magenta-small")); + Gtk::Image* igreenR1 = Gtk::manage (new RTImage ("circle-green-small")); adaplum = Gtk::manage (new Adjuster (M ("TP_COLORAPP_ABSOLUTELUMINANCE"), MINLA0, MAXLA0, 0.01, 16.));//, NULL, NULL, &wbSlider2la, &wbla2Slider)); adaplum->setLogScale(500, 0); @@ -659,8 +659,8 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel (this, TOOL_NAME, M ("TP adaplum->set_tooltip_markup (M ("TP_COLORAPP_VIEWING_ABSOLUTELUMINANCE_TOOLTIP")); p3VBox->pack_start (*adaplum); -// Gtk::Image* iblueredL = Gtk::manage (new RTImage ("circle-blue-small.png")); -// Gtk::Image* iblueredR = Gtk::manage (new RTImage ("circle-red-small.png")); +// Gtk::Image* iblueredL = Gtk::manage (new RTImage ("circle-blue-small")); +// Gtk::Image* iblueredR = Gtk::manage (new RTImage ("circle-red-small")); degreeout = Gtk::manage (new Adjuster (M ("TP_COLORAPP_CIECAT_DEGREEOUT"), 0., 100., 1., 90.)); @@ -672,10 +672,10 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel (this, TOOL_NAME, M ("TP degreeout->addAutoButton (M ("TP_COLORAPP_CAT02ADAPTATION_TOOLTIP")); p3VBox->pack_start (*degreeout); /* - Gtk::Image* itempL1 = Gtk::manage (new RTImage ("circle-blue-small.png")); - Gtk::Image* itempR1 = Gtk::manage (new RTImage ("circle-yellow-small.png")); - Gtk::Image* igreenL1 = Gtk::manage (new RTImage ("circle-magenta-small.png")); - Gtk::Image* igreenR1 = Gtk::manage (new RTImage ("circle-green-small.png")); + Gtk::Image* itempL1 = Gtk::manage (new RTImage ("circle-blue-small")); + Gtk::Image* itempR1 = Gtk::manage (new RTImage ("circle-yellow-small")); + Gtk::Image* igreenL1 = Gtk::manage (new RTImage ("circle-magenta-small")); + Gtk::Image* igreenR1 = Gtk::manage (new RTImage ("circle-green-small")); */ tempout = Gtk::manage (new Adjuster (M ("TP_WBALANCE_TEMPERATURE"), MINTEMP0, MAXTEMP0, 5, CENTERTEMP0, itempR1, itempL1, &wbSlider2Temp, &wbTemp2Slider)); greenout = Gtk::manage (new Adjuster (M ("TP_WBALANCE_GREEN"), MINGREEN0, MAXGREEN0, 0.001, 1.0, igreenR1, igreenL1)); @@ -746,7 +746,7 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel (this, TOOL_NAME, M ("TP //reset button neutral = Gtk::manage (new Gtk::Button (M ("TP_COLORAPP_NEUTRAL"))); setExpandAlignProperties (neutral, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); - RTImage *resetImg = Gtk::manage (new RTImage ("undo-small.png", "redo-small.png")); + RTImage* const resetImg = Gtk::manage (new RTImage ("undo-small", Gtk::ICON_SIZE_BUTTON)); setExpandAlignProperties (resetImg, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); neutral->set_image (*resetImg); neutral->set_tooltip_text (M ("TP_COLORAPP_NEUTRAL_TOOLTIP")); @@ -889,7 +889,7 @@ void ColorAppearance::read (const ProcParams* pp, const ParamsEdited* pedited) nexttemp = pp->wb.temperature; nextgreen = 1.; //pp->wb.green; - + if (pedited) { degree->setEditedState (pedited->colorappearance.degree ? Edited : UnEdited); degreeout->setEditedState (pedited->colorappearance.degreeout ? Edited : UnEdited); @@ -961,7 +961,7 @@ void ColorAppearance::read (const ProcParams* pp, const ParamsEdited* pedited) } else if (pp->colorappearance.complexmethod == "expert") { complexmethod->set_active(1); } - + modelmethod->set_active(0); if (pp->colorappearance.modelmethod == "02") { @@ -1368,11 +1368,11 @@ void ColorAppearance::updateGUIToMode(int mode) curveEditorG3->hide(); //greenout->hide(); greenout->set_sensitive(false); - + badpixsl->hide(); datacie->hide(); } else { - alHBox->show(); + alHBox->show(); wbmHBox->show(); curveEditorG->show(); curveEditorG2->show(); @@ -1411,7 +1411,7 @@ void ColorAppearance::convertParamToNormal() } void ColorAppearance::complexmethodChanged() -{ +{ if (complexmethod->get_active_row_number() == 0) { updateGUIToMode(0); convertParamToNormal(); @@ -1426,7 +1426,7 @@ void ColorAppearance::complexmethodChanged() } void ColorAppearance::modelmethodChanged() -{ +{ if (listener && (multiImage || getEnabled())) { listener->panelChanged(EvCATmodel, modelmethod->get_active_text()); @@ -1434,7 +1434,7 @@ void ColorAppearance::modelmethodChanged() } void ColorAppearance::catmethodChanged() -{ +{ if (catmethod->get_active_row_number() == 1) { disableListener(); @@ -1483,7 +1483,7 @@ void ColorAppearance::catmethodChanged() degreeout->setValue(90); ybout->setValue(18); tempout->setValue (nexttemp); - + if(tempout->getAutoValue()) { tempout->resetValue (false); tempout->setAutoValue (true); @@ -1495,7 +1495,7 @@ void ColorAppearance::catmethodChanged() greenout->setValue (nextgreen); enableListener(); - + } else if (catmethod->get_active_row_number() == 0) { disableListener(); degree->setAutoValue (true); @@ -1866,7 +1866,7 @@ void ColorAppearance::autoCamChanged (double ccam, double ccamout) void ColorAppearance::adapCamChanged (double cadap) { - + idle_register.add( [this, cadap]() -> bool { @@ -1881,7 +1881,7 @@ void ColorAppearance::adapCamChanged (double cadap) void ColorAppearance::wbCamChanged (double temp, double tin) {//reactivate this function - + idle_register.add( [this, temp, tin]() -> bool { @@ -2124,7 +2124,7 @@ void ColorAppearance::wbmodelChanged () tempsc->hide(); greensc->hide(); tempsc->setValue (5003); - greensc->setValue (1); + greensc->setValue (1); } if (wbmodel->get_active_row_number() == 2) { diff --git a/rtgui/coloredbar.cc b/rtgui/coloredbar.cc index adafcbdde..0d28c335a 100644 --- a/rtgui/coloredbar.cc +++ b/rtgui/coloredbar.cc @@ -23,77 +23,20 @@ ColoredBar::ColoredBar (eRTOrientation orient) { orientation = orient; - dirty = true; this->x = this->y = this->w = this->h = 0; } -bool ColoredBar::setDrawRectangle(int newX, int newY, int newW, int newH, bool updateBackBufferSize) +void ColoredBar::setColoredBarSize(const int newX, const int newY, const int newW, const int newH) { - return BackBuffer::setDrawRectangle(Cairo::FORMAT_ARGB32, newX, newY, newW, newH, updateBackBufferSize); + this->x = newX; + this->y = newY; + this->w = newW; + this->h = newH; } -/* - * Redraw the bar to a Cairo::ImageSurface - */ -void ColoredBar::expose(Gtk::DrawingArea &drawingArea, Cairo::RefPtr destSurface) +void ColoredBar::updateColoredBar(const Cairo::RefPtr< Cairo::Context> &cr) { - // look out if the Surface has to be redrawn - if (!surfaceCreated() || !destSurface) { - return; - } - - updateBackBuffer(drawingArea); - Gdk::Rectangle rect(x, y, w, h); - copySurface(destSurface, &rect); -} - -/* - * Redraw the bar to a Gdk::Window - */ -void ColoredBar::expose(Gtk::DrawingArea &drawingArea, Glib::RefPtr destWindow) -{ - // look out if the Surface has to be redrawn - if (!surfaceCreated() || !destWindow) { - return; - } - - updateBackBuffer(drawingArea); - Gdk::Rectangle rect(x, y, w, h); - copySurface(destWindow, &rect); -} - -void ColoredBar::expose(Gtk::DrawingArea &drawingArea, const Cairo::RefPtr< Cairo::Context> &cr) -{ - // look out if the Surface has to be redrawn - if (!surfaceCreated()) { - return; - } - - updateBackBuffer(drawingArea); - Gdk::Rectangle rect(x, y, w, h); - copySurface(cr, &rect); -} - -/* - * Redraw the bar to a Gdk::Window - */ -void ColoredBar::expose(Gtk::DrawingArea &drawingArea, BackBuffer *backBuffer) -{ - // look out if the Surface has to be redrawn - if (!surfaceCreated() || !backBuffer) { - return; - } - - updateBackBuffer(drawingArea); - Gdk::Rectangle rect(x, y, w, h); - copySurface(backBuffer, &rect); -} - -void ColoredBar::updateBackBuffer(Gtk::DrawingArea &drawingArea) -{ - if (isDirty()) { - Cairo::RefPtr cr = getContext(); - + if (w > 0 && h > 0) { // the bar has to be drawn to the Surface first if (!bgGradient.empty()) { // a gradient has been set, we use it @@ -104,20 +47,20 @@ void ColoredBar::updateBackBuffer(Gtk::DrawingArea &drawingArea) switch (orientation) { case (RTO_Left2Right): - bggradient = Cairo::LinearGradient::create (0., 0., double(w), 0.); + bggradient = Cairo::LinearGradient::create (0., 0., static_cast(w), 0.); break; case (RTO_Right2Left): - bggradient = Cairo::LinearGradient::create (double(w), 0., 0., 0.); + bggradient = Cairo::LinearGradient::create (static_cast(w), 0., 0., 0.); break; case (RTO_Bottom2Top): - bggradient = Cairo::LinearGradient::create (0., double(h), 0., 0.); + bggradient = Cairo::LinearGradient::create (0., static_cast(h), 0., 0.); break; case (RTO_Top2Bottom): default: - bggradient = Cairo::LinearGradient::create (0., 0., 0., double(h)); + bggradient = Cairo::LinearGradient::create (0., 0., 0., static_cast(h)); break; } @@ -126,13 +69,13 @@ void ColoredBar::updateBackBuffer(Gtk::DrawingArea &drawingArea) } cr->set_source (bggradient); - cr->rectangle(0, 0, w, h); + cr->rectangle(static_cast(x), static_cast(y), static_cast(w), static_cast(h)); cr->fill(); } else { // ask the ColorProvider to provide colors :) for each pixels if (colorProvider) { - surface->flush(); - + // Create surface + const auto surface = Cairo::ImageSurface::create(Cairo::FORMAT_RGB24, w, h); unsigned char *surfaceData = surface->get_data(); cr->set_antialias(Cairo::ANTIALIAS_NONE); @@ -205,25 +148,22 @@ void ColoredBar::updateBackBuffer(Gtk::DrawingArea &drawingArea) break; } - surface->mark_dirty(); + cr->set_source(surface, 0., 0.); + cr->rectangle(static_cast(x), static_cast(y), static_cast(w), static_cast(h)); + cr->fill(); } } - - // has it been updated or not, we assume that the Surface has been correctly set (we don't handle allocation error) - setDirty(false); } } void ColoredBar::setBgGradient (const std::vector &milestones) { bgGradient = milestones; - setDirty(true); } void ColoredBar::clearBgGradient () { bgGradient.clear(); - setDirty(true); } bool ColoredBar::canGetColors() diff --git a/rtgui/coloredbar.h b/rtgui/coloredbar.h index f5156129e..55ac8849e 100644 --- a/rtgui/coloredbar.h +++ b/rtgui/coloredbar.h @@ -30,11 +30,15 @@ * the bar itself, i.e. use render_background (depending on its Gtk::StyleContext) * */ -class ColoredBar final : private BackBuffer, public ColorCaller +class ColoredBar final : public ColorCaller { private: - void updateBackBuffer(Gtk::DrawingArea &drawingArea); + // ColoredBar position and size parameters + int x; + int y; + int w; + int h; protected: eRTOrientation orientation; @@ -42,12 +46,9 @@ protected: public: explicit ColoredBar (eRTOrientation orient); - bool setDrawRectangle(int newX, int newY, int newW, int newH, bool updateBackBufferSize = true); + void setColoredBarSize(const int newX, const int newY, const int newW, const int newH); // Note: updateColoredBar shall be called after to update the bar - void expose(Gtk::DrawingArea &drawingArea, Glib::RefPtr destWindow); - void expose(Gtk::DrawingArea &drawingArea, Cairo::RefPtr destSurface); - void expose(Gtk::DrawingArea &drawingArea, BackBuffer *backBuffer); - void expose(Gtk::DrawingArea &drawingArea, const Cairo::RefPtr< Cairo::Context> &cr); + void updateColoredBar(const Cairo::RefPtr< Cairo::Context> &cr); bool canGetColors(); @@ -56,8 +57,4 @@ public: // by clearing the gradient, the ColorProvider will have to provide colors on a per pixel basis if a ColorProvider // has been set, through ColorProvider::colorForValue on next ColoredBar::expose void clearBgGradient (); - - void setDirty(bool isDirty) { - BackBuffer::setDirty(isDirty); - } }; diff --git a/rtgui/colortoning.cc b/rtgui/colortoning.cc index d9928cd13..3ad1b01e4 100644 --- a/rtgui/colortoning.cc +++ b/rtgui/colortoning.cc @@ -128,8 +128,8 @@ ColorToning::ColorToning () : FoldableToolPanel(this, TOOL_NAME, M("TP_COLORTONI pack_start( *opacityCurveEditorG, Gtk::PACK_SHRINK, 2); //---------Chroma curve 1 -------------------- - iby = Gtk::manage (new RTImage ("circle-yellow-blue-small.png")); - irg = Gtk::manage (new RTImage ("circle-green-red-small.png")); + iby = Gtk::manage (new RTImage ("circle-yellow-blue-small")); + irg = Gtk::manage (new RTImage ("circle-green-red-small")); clCurveEditorG = new CurveEditorGroup (options.lastColorToningCurvesDir, M("TP_COLORTONING_CHROMAC")); clCurveEditorG->setCurveListener (this); @@ -170,7 +170,7 @@ ColorToning::ColorToning () : FoldableToolPanel(this, TOOL_NAME, M("TP_COLORTONI //--------------------- Reset curves ----------------------------- /* Each curve can reset to a different curve, so this button only save one click now... so we remove it. neutralCurves = Gtk::manage (new Gtk::Button (M("TP_COLORTONING_NEUTRALCUR"))); - RTImage *resetImgc = Gtk::manage (new RTImage ("undo-small.png", "redo-small.png")); + RTImage *resetImgc = Gtk::manage (new RTImage ("undo-small")); neutralCurves->set_image(*resetImgc); neutralCurves->set_tooltip_text (M("TP_COLORTONING_NEUTRALCUR_TIP")); neutralcurvesconn = neutralCurves->signal_pressed().connect( sigc::mem_fun(*this, &ColorToning::neutralCurves_pressed) ); @@ -250,26 +250,26 @@ ColorToning::ColorToning () : FoldableToolPanel(this, TOOL_NAME, M("TP_COLORTONI Gtk::Box* chanMixerMidBox = Gtk::manage (new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); Gtk::Box* chanMixerShadowsBox = Gtk::manage (new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); - Gtk::Image* iblueR = Gtk::manage (new RTImage ("circle-blue-small.png")); - Gtk::Image* iyelL = Gtk::manage (new RTImage ("circle-yellow-small.png")); - Gtk::Image* imagL = Gtk::manage (new RTImage ("circle-magenta-small.png")); - Gtk::Image* igreenR = Gtk::manage (new RTImage ("circle-green-small.png")); - Gtk::Image* icyanL = Gtk::manage (new RTImage ("circle-blue-small.png")); - Gtk::Image* iredR = Gtk::manage (new RTImage ("circle-red-small.png")); + Gtk::Image* iblueR = Gtk::manage (new RTImage ("circle-blue-small")); + Gtk::Image* iyelL = Gtk::manage (new RTImage ("circle-yellow-small")); + Gtk::Image* imagL = Gtk::manage (new RTImage ("circle-magenta-small")); + Gtk::Image* igreenR = Gtk::manage (new RTImage ("circle-green-small")); + Gtk::Image* icyanL = Gtk::manage (new RTImage ("circle-blue-small")); + Gtk::Image* iredR = Gtk::manage (new RTImage ("circle-red-small")); - Gtk::Image* iblueRm = Gtk::manage (new RTImage ("circle-blue-small.png")); - Gtk::Image* iyelLm = Gtk::manage (new RTImage ("circle-yellow-small.png")); - Gtk::Image* imagLm = Gtk::manage (new RTImage ("circle-magenta-small.png")); - Gtk::Image* igreenRm = Gtk::manage (new RTImage ("circle-green-small.png")); - Gtk::Image* icyanLm = Gtk::manage (new RTImage ("circle-blue-small.png")); - Gtk::Image* iredRm = Gtk::manage (new RTImage ("circle-red-small.png")); + Gtk::Image* iblueRm = Gtk::manage (new RTImage ("circle-blue-small")); + Gtk::Image* iyelLm = Gtk::manage (new RTImage ("circle-yellow-small")); + Gtk::Image* imagLm = Gtk::manage (new RTImage ("circle-magenta-small")); + Gtk::Image* igreenRm = Gtk::manage (new RTImage ("circle-green-small")); + Gtk::Image* icyanLm = Gtk::manage (new RTImage ("circle-blue-small")); + Gtk::Image* iredRm = Gtk::manage (new RTImage ("circle-red-small")); - Gtk::Image* iblueRh = Gtk::manage (new RTImage ("circle-blue-small.png")); - Gtk::Image* iyelLh = Gtk::manage (new RTImage ("circle-yellow-small.png")); - Gtk::Image* imagLh = Gtk::manage (new RTImage ("circle-magenta-small.png")); - Gtk::Image* igreenRh = Gtk::manage (new RTImage ("circle-green-small.png")); - Gtk::Image* icyanLh = Gtk::manage (new RTImage ("circle-blue-small.png")); - Gtk::Image* iredRh = Gtk::manage (new RTImage ("circle-red-small.png")); + Gtk::Image* iblueRh = Gtk::manage (new RTImage ("circle-blue-small")); + Gtk::Image* iyelLh = Gtk::manage (new RTImage ("circle-yellow-small")); + Gtk::Image* imagLh = Gtk::manage (new RTImage ("circle-magenta-small")); + Gtk::Image* igreenRh = Gtk::manage (new RTImage ("circle-green-small")); + Gtk::Image* icyanLh = Gtk::manage (new RTImage ("circle-blue-small")); + Gtk::Image* iredRh = Gtk::manage (new RTImage ("circle-red-small")); redhigh = Gtk::manage (new Adjuster ("", -100., 100., 1., 0., icyanLh, iredRh )); greenhigh = Gtk::manage (new Adjuster ("", -100., 100., 1., 0., imagLh , igreenRh)); @@ -300,7 +300,7 @@ ColorToning::ColorToning () : FoldableToolPanel(this, TOOL_NAME, M("TP_COLORTONI chanMixerHLFrame->set_label_align (0.025, 0.5); chanMixerMidFrame->set_label_align (0.025, 0.5); chanMixerShadowsFrame->set_label_align (0.025, 0.5); - + chanMixerHLFrame->add(*chanMixerHLBox); chanMixerMidFrame->add(*chanMixerMidBox); chanMixerShadowsFrame->add(*chanMixerShadowsBox); @@ -394,23 +394,23 @@ ColorToning::ColorToning () : FoldableToolPanel(this, TOOL_NAME, M("TP_COLORTONI hb->pack_start(*labRegionList, Gtk::PACK_EXPAND_WIDGET); Gtk::Box* vb = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); labRegionAdd = Gtk::manage(new Gtk::Button()); - labRegionAdd->add(*Gtk::manage(new RTImage("add-small.png"))); + labRegionAdd->add(*Gtk::manage(new RTImage("add-small", Gtk::ICON_SIZE_BUTTON))); labRegionAdd->signal_clicked().connect(sigc::mem_fun(*this, &ColorToning::labRegionAddPressed)); add_button(labRegionAdd, vb); labRegionRemove = Gtk::manage(new Gtk::Button()); - labRegionRemove->add(*Gtk::manage(new RTImage("remove-small.png"))); + labRegionRemove->add(*Gtk::manage(new RTImage("remove-small", Gtk::ICON_SIZE_BUTTON))); labRegionRemove->signal_clicked().connect(sigc::mem_fun(*this, &ColorToning::labRegionRemovePressed)); add_button(labRegionRemove, vb); labRegionUp = Gtk::manage(new Gtk::Button()); - labRegionUp->add(*Gtk::manage(new RTImage("arrow-up-small.png"))); + labRegionUp->add(*Gtk::manage(new RTImage("arrow-up-small", Gtk::ICON_SIZE_BUTTON))); labRegionUp->signal_clicked().connect(sigc::mem_fun(*this, &ColorToning::labRegionUpPressed)); add_button(labRegionUp, vb); labRegionDown = Gtk::manage(new Gtk::Button()); - labRegionDown->add(*Gtk::manage(new RTImage("arrow-down-small.png"))); + labRegionDown->add(*Gtk::manage(new RTImage("arrow-down-small", Gtk::ICON_SIZE_BUTTON))); labRegionDown->signal_clicked().connect(sigc::mem_fun(*this, &ColorToning::labRegionDownPressed)); add_button(labRegionDown, vb); labRegionCopy = Gtk::manage(new Gtk::Button()); - labRegionCopy->add(*Gtk::manage(new RTImage("arrow-right-small.png"))); + labRegionCopy->add(*Gtk::manage(new RTImage("arrow-right-small", Gtk::ICON_SIZE_BUTTON))); labRegionCopy->signal_clicked().connect(sigc::mem_fun(*this, &ColorToning::labRegionCopyPressed)); add_button(labRegionCopy, vb); hb->pack_start(*vb, Gtk::PACK_SHRINK); @@ -718,7 +718,7 @@ void ColorToning::write (ProcParams* pp, ParamsEdited* pedited) pp->colorToning.strength = strength->getIntValue(); double zerox = 0.; double zeroy = 0.; - + labgrid->getParams(pp->colorToning.labgridALow, pp->colorToning.labgridBLow, pp->colorToning.labgridAHigh, pp->colorToning.labgridBHigh, zerox, zeroy, zerox, zeroy); pp->colorToning.labgridALow *= ColorToningParams::LABGRID_CORR_MAX; pp->colorToning.labgridAHigh *= ColorToningParams::LABGRID_CORR_MAX; @@ -1571,7 +1571,7 @@ void ColorToning::labRegionShow(int idx, bool list_only) disableListener(); } rtengine::procparams::ColorToningParams::LabCorrectionRegion dflt; - auto &r = labRegionData[idx]; + auto &r = labRegionData[idx]; if (!list_only) { labRegionAB->setParams(0, 0, r.a, r.b,0, 0, 0, 0, false); labRegionSaturation->setValue(r.saturation); diff --git a/rtgui/controllines.cc b/rtgui/controllines.cc index d28ef12ca..179001812 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), @@ -92,14 +92,14 @@ ControlLineManager::ControlLineManager(): canvas_area->topLeft = Coord(0, 0); mouseOverGeometry.push_back(canvas_area.get()); - line_icon_h = Cairo::RefPtr(new RTSurface( - "bidirectional-arrow-horizontal-hicontrast.png")); - line_icon_v = Cairo::RefPtr(new RTSurface( - "bidirectional-arrow-vertical-hicontrast.png")); - line_icon_h_prelight = Cairo::RefPtr(new RTSurface( - "bidirectional-arrow-horizontal-prelight.png")); - line_icon_v_prelight = Cairo::RefPtr(new RTSurface( - "bidirectional-arrow-vertical-prelight.png")); + line_icon_h = std::shared_ptr(new RTSurface( + "bidirectional-arrow-horizontal-hicontrast", Gtk::ICON_SIZE_BUTTON)); + line_icon_v = std::shared_ptr(new RTSurface( + "bidirectional-arrow-vertical-hicontrast", Gtk::ICON_SIZE_BUTTON)); + line_icon_h_prelight = std::shared_ptr(new RTSurface( + "bidirectional-arrow-horizontal-prelight", Gtk::ICON_SIZE_BUTTON)); + line_icon_v_prelight = std::shared_ptr(new RTSurface( + "bidirectional-arrow-vertical-prelight", Gtk::ICON_SIZE_BUTTON)); } ControlLineManager::~ControlLineManager() = default; @@ -438,8 +438,8 @@ void ControlLineManager::addLine(Coord begin, Coord end, line->begin = begin; line->end = end; - const Cairo::RefPtr null_surface = - Cairo::RefPtr(nullptr); + const std::shared_ptr null_surface = + std::shared_ptr(nullptr); icon_h = std::make_shared(line_icon_h, null_surface, line_icon_h_prelight, diff --git a/rtgui/controllines.h b/rtgui/controllines.h index 9e850da1c..ba05e006c 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; @@ -60,8 +61,8 @@ protected: bool drawing_line; bool edited; std::size_t horizontalCount, verticalCount; - Cairo::RefPtr line_icon_h, line_icon_v; - Cairo::RefPtr line_icon_h_prelight, line_icon_v_prelight; + std::shared_ptr line_icon_h, line_icon_v; + std::shared_ptr line_icon_h_prelight, line_icon_v_prelight; int prev_obj; int selected_object; diff --git a/rtgui/controlspotpanel.cc b/rtgui/controlspotpanel.cc index 60fde12a6..12eea86cc 100644 --- a/rtgui/controlspotpanel.cc +++ b/rtgui/controlspotpanel.cc @@ -74,14 +74,14 @@ ControlSpotPanel::ControlSpotPanel(): struc_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_THRES"), 1.0, 12.0, 0.1, 4.0))), thresh_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_THRESDELTAE"), 0.0, 10.0, 0.1, 2.0))), iter_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_PROXI"), 0.2, 10.0, 0.1, 2.0))), - balan_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BALAN"), 0.2, 2.5, 0.1, 1.0, Gtk::manage(new RTImage("rawtherapee-logo-16.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), - balanh_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BALANH"), 0.2, 2.5, 0.1, 1.0, Gtk::manage(new RTImage("rawtherapee-logo-16.png")), Gtk::manage(new RTImage("circle-red-green-small.png"))))), - colorde_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_COLORDE"), -15, 15, 2, 5, Gtk::manage(new RTImage("circle-blue-yellow-small.png")), Gtk::manage(new RTImage("circle-gray-green-small.png"))))), + balan_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BALAN"), 0.2, 2.5, 0.1, 1.0, Gtk::manage(new RTImage("circle-multicolor-small")), Gtk::manage(new RTImage("circle-white-small"))))), + balanh_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BALANH"), 0.2, 2.5, 0.1, 1.0, Gtk::manage(new RTImage("circle-multicolor-small")), Gtk::manage(new RTImage("circle-red-green-small"))))), + colorde_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_COLORDE"), -15, 15, 2, 5, Gtk::manage(new RTImage("circle-blue-yellow-small")), Gtk::manage(new RTImage("circle-gray-green-small"))))), colorscope_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_COLORSCOPE"), 0., 100.0, 1., 30.))), avoidrad_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_AVOIDRAD"), 0., 30.0, 0.1, 0.))), scopemask_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SCOPEMASK"), 0, 100, 1, 60))), denoichmask_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DENOIMASK"), 0., 100., 0.5, 0))), - lumask_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LUMASK"), -50, 30, 1, 10, Gtk::manage(new RTImage("circle-yellow-small.png")), Gtk::manage(new RTImage("circle-gray-small.png")) ))), + lumask_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LUMASK"), -50, 30, 1, 10, Gtk::manage(new RTImage("circle-yellow-small")), Gtk::manage(new RTImage("circle-gray-small")) ))), hishow_(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_PREVSHOW")))), activ_(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ACTIVSPOT")))), @@ -124,7 +124,7 @@ ControlSpotPanel::ControlSpotPanel(): prevMethodconn_ = prevMethod_->signal_changed().connect( sigc::mem_fun( *this, &ControlSpotPanel::prevMethodChanged)); - + // ctboxprevmethod->pack_start(*prevMethod_); pack_start(*ctboxprevmethod); @@ -256,7 +256,7 @@ ControlSpotPanel::ControlSpotPanel(): sensiexclu_->setAdjusterListener(this); structexclu_->setAdjusterListener(this); structexclu_->setLogScale(10, 0); - + excluBox->pack_start(*sensiexclu_); excluBox->pack_start(*structexclu_); excluFrame->add(*excluBox); @@ -388,7 +388,7 @@ ControlSpotPanel::ControlSpotPanel(): expShapeDetect_->add(*artifBox, false); pack_start(*expShapeDetect_, false, false); ToolParamBlock* const artifBox2 = Gtk::manage(new ToolParamBlock()); - + artifBox2->pack_start(*preview_); artifBox2->pack_start(*colorscope_); pack_start(*artifBox2); @@ -464,7 +464,7 @@ ControlSpotPanel::ControlSpotPanel(): ctboxwavmethod->pack_start(*wavMethod_); specCaseBox->pack_start(*ctboxwavmethod); - + expSpecCases_->add(*specCaseBox, false); pack_start(*expSpecCases_, false, false); @@ -660,7 +660,7 @@ void ControlSpotPanel::on_button_delete() nbSpotChanged_ = true; selSpotChanged_ = true; eventType = SpotDeletion; - SpotRow* const delSpotRow = getSpot(selIndex); + const std::unique_ptr delSpotRow = getSpot(selIndex); listener->panelChanged(EvLocallabSpotDeleted, delSpotRow->name); } @@ -682,7 +682,7 @@ void ControlSpotPanel::on_button_duplicate() nbSpotChanged_ = true; selSpotChanged_ = true; eventType = SpotDuplication; - SpotRow* const duplSpotRow = getSpot(selIndex); + const std::unique_ptr duplSpotRow = getSpot(selIndex); listener->panelChanged(EvLocallabSpotCreated, M("TP_LOCALLAB_EV_DUPL") + " " + duplSpotRow->name); } @@ -779,7 +779,7 @@ bool ControlSpotPanel::on_button_visibility(GdkEventButton* event) // Raise event visibilityChanged_ = true; - SpotRow* const spotRow = getSpot(getSelectedSpot()); + const std::unique_ptr spotRow = getSpot(getSelectedSpot()); if (row[spots_.isvisible]) { listener->panelChanged(EvLocallabSpotVisibility, M("TP_LOCALLAB_EV_VIS") + " (" + spotRow->name + ")"); @@ -896,7 +896,7 @@ void ControlSpotPanel::controlspotChanged() selSpotChanged_ = true; eventType = SpotSelection; - SpotRow* const spotRow = getSpot(selIndex); + const std::unique_ptr spotRow = getSpot(selIndex); // Image area shall be regenerated if mask or deltaE preview was active when switching spot if (maskPrevActive || preview_->get_active()) { @@ -1341,7 +1341,7 @@ void ControlSpotPanel::updateParamVisibility() ctboxshape->show(); } - + } void ControlSpotPanel::adjusterChanged(Adjuster* a, double newval) @@ -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; @@ -2535,13 +2535,16 @@ int ControlSpotPanel::getEventType() return tmp; } -ControlSpotPanel::SpotRow* ControlSpotPanel::getSpot(const int index) +std::unique_ptr ControlSpotPanel::getSpot(const int index) { + // TODO: Return an std::optional after upgrading + // to C++17. + // printf("getSpot: %d\n", index); MyMutex::MyLock lock(mTreeview); - SpotRow* r = new SpotRow(); + std::unique_ptr r(new SpotRow()); int i = -1; @@ -2676,58 +2679,58 @@ void ControlSpotPanel::resetDeltaEPreview() previewConn_.block(false); } -void ControlSpotPanel::addControlSpot(SpotRow* newSpot) +void ControlSpotPanel::addControlSpot(const SpotRow &newSpot) { - // printf("addControlSpot: %d\n", newSpot->name); + // printf("addControlSpot: %d\n", newSpot.name); MyMutex::MyLock lock(mTreeview); disableParamlistener(true); Gtk::TreeModel::Row row = *(treemodel_->append()); row[spots_.mouseover] = false; - row[spots_.name] = newSpot->name; - row[spots_.isvisible] = newSpot->isvisible; + row[spots_.name] = newSpot.name; + row[spots_.isvisible] = newSpot.isvisible; row[spots_.curveid] = 0; // No associated curve - row[spots_.prevMethod] = newSpot->prevMethod; - row[spots_.shape] = newSpot->shape; - row[spots_.spotMethod] = newSpot->spotMethod; - row[spots_.sensiexclu] = newSpot->sensiexclu; - row[spots_.structexclu] = newSpot->structexclu; - row[spots_.shapeMethod] = newSpot->shapeMethod; - row[spots_.locX] = newSpot->locX; - row[spots_.locXL] = newSpot->locXL; - row[spots_.locY] = newSpot->locY; - row[spots_.locYT] = newSpot->locYT; - row[spots_.centerX] = newSpot->centerX; - row[spots_.centerY] = newSpot->centerY; - row[spots_.circrad] = newSpot->circrad; - row[spots_.qualityMethod] = newSpot->qualityMethod; - row[spots_.transit] = newSpot->transit; - row[spots_.transitweak] = newSpot->transitweak; - row[spots_.transitgrad] = newSpot->transitgrad; - row[spots_.feather] = newSpot->feather; - row[spots_.struc] = newSpot->struc; - row[spots_.thresh] = newSpot->thresh; - row[spots_.iter] = newSpot->iter; - row[spots_.balan] = newSpot->balan; - row[spots_.balanh] = newSpot->balanh; - row[spots_.colorde] = newSpot->colorde; - row[spots_.colorscope] = newSpot->colorscope; - row[spots_.avoidrad] = newSpot->avoidrad; - row[spots_.hishow] = newSpot->hishow; - row[spots_.activ] = newSpot->activ; - row[spots_.blwh] = newSpot->blwh; - row[spots_.recurs] = newSpot->recurs; - row[spots_.laplac] = newSpot->laplac; - row[spots_.deltae] = newSpot->deltae; - row[spots_.scopemask] = newSpot->scopemask; - row[spots_.denoichmask] = newSpot->denoichmask; - row[spots_.shortc] = newSpot->shortc; - row[spots_.lumask] = newSpot->lumask; - //row[spots_.savrest] = newSpot->savrest; - row[spots_.complexMethod] = newSpot->complexMethod; - row[spots_.wavMethod] = newSpot->wavMethod; - row[spots_.avoidgamutMethod] = newSpot->avoidgamutMethod; + row[spots_.prevMethod] = newSpot.prevMethod; + row[spots_.shape] = newSpot.shape; + row[spots_.spotMethod] = newSpot.spotMethod; + row[spots_.sensiexclu] = newSpot.sensiexclu; + row[spots_.structexclu] = newSpot.structexclu; + row[spots_.shapeMethod] = newSpot.shapeMethod; + row[spots_.locX] = newSpot.locX; + row[spots_.locXL] = newSpot.locXL; + row[spots_.locY] = newSpot.locY; + row[spots_.locYT] = newSpot.locYT; + row[spots_.centerX] = newSpot.centerX; + row[spots_.centerY] = newSpot.centerY; + row[spots_.circrad] = newSpot.circrad; + row[spots_.qualityMethod] = newSpot.qualityMethod; + row[spots_.transit] = newSpot.transit; + row[spots_.transitweak] = newSpot.transitweak; + row[spots_.transitgrad] = newSpot.transitgrad; + row[spots_.feather] = newSpot.feather; + row[spots_.struc] = newSpot.struc; + row[spots_.thresh] = newSpot.thresh; + row[spots_.iter] = newSpot.iter; + row[spots_.balan] = newSpot.balan; + row[spots_.balanh] = newSpot.balanh; + row[spots_.colorde] = newSpot.colorde; + row[spots_.colorscope] = newSpot.colorscope; + row[spots_.avoidrad] = newSpot.avoidrad; + row[spots_.hishow] = newSpot.hishow; + row[spots_.activ] = newSpot.activ; + row[spots_.blwh] = newSpot.blwh; + row[spots_.recurs] = newSpot.recurs; + row[spots_.laplac] = newSpot.laplac; + row[spots_.deltae] = newSpot.deltae; + row[spots_.scopemask] = newSpot.scopemask; + row[spots_.denoichmask] = newSpot.denoichmask; + row[spots_.shortc] = newSpot.shortc; + row[spots_.lumask] = newSpot.lumask; + //row[spots_.savrest] = newSpot.savrest; + row[spots_.complexMethod] = newSpot.complexMethod; + row[spots_.wavMethod] = newSpot.wavMethod; + row[spots_.avoidgamutMethod] = newSpot.avoidgamutMethod; updateParamVisibility(); disableParamlistener(false); diff --git a/rtgui/controlspotpanel.h b/rtgui/controlspotpanel.h index b1e191b0e..e9eddf4e5 100644 --- a/rtgui/controlspotpanel.h +++ b/rtgui/controlspotpanel.h @@ -21,6 +21,8 @@ #ifndef _CONTROLSPOTPANEL_H_ #define _CONTROLSPOTPANEL_H_ +#include + #include "../rtengine/coord.h" #include "editcallbacks.h" #include "threadutils.h" @@ -141,7 +143,7 @@ public: * @param index The spot index to get params * @return A SpotRow structure containing params of associated spot */ - SpotRow* getSpot(const int index); + std::unique_ptr getSpot(const int index); /** * Getter of spots number * @@ -187,7 +189,7 @@ public: * * @param newSpot A SpotRow structure containing new spot params */ - void addControlSpot(SpotRow* newSpot); + void addControlSpot(const SpotRow &newSpot); // Control spot delete function /** diff --git a/rtgui/crop.cc b/rtgui/crop.cc index 21a32b653..0bbbdbf1f 100644 --- a/rtgui/crop.cc +++ b/rtgui/crop.cc @@ -176,12 +176,12 @@ Crop::Crop(): selectCrop = Gtk::manage (new Gtk::Button (M("TP_CROP_SELECTCROP"))); setExpandAlignProperties(selectCrop, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); selectCrop->get_style_context()->add_class("independent"); - selectCrop->set_image (*Gtk::manage (new RTImage ("crop-small.png"))); + selectCrop->set_image (*Gtk::manage (new RTImage ("crop-small", Gtk::ICON_SIZE_BUTTON))); resetCrop = Gtk::manage (new Gtk::Button (M("TP_CROP_RESETCROP"))); setExpandAlignProperties(resetCrop, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); resetCrop->get_style_context()->add_class("independent"); - resetCrop->set_image (*Gtk::manage (new RTImage ("undo-small.png"))); + resetCrop->set_image (*Gtk::manage (new RTImage ("undo-small", Gtk::ICON_SIZE_BUTTON))); methodgrid->attach (*xlab, 0, 0, 1, 1); methodgrid->attach (*x, 1, 0, 1, 1); @@ -594,11 +594,11 @@ void Crop::doresetCrop () yDirty = true; wDirty = true; hDirty = true; - + // Reset ratio, ratio lock and orientation as well ratio->set_active(0); orientation->set_active(2); - fixr->set_active(true); + fixr->set_active(true); int X = 0; int Y = 0; diff --git a/rtgui/cropwindow.cc b/rtgui/cropwindow.cc index c7d7348b3..ddb38f16a 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 @@ -43,6 +43,32 @@ using namespace rtengine; +namespace { + inline double zoomLimitToFraction(Options::MaxZoom z) { + switch (z) { + case Options::MaxZoom::PERCENTS_100: + return 1.; + case Options::MaxZoom::PERCENTS_200: + return 2.; + case Options::MaxZoom::PERCENTS_300: + return 3.; + case Options::MaxZoom::PERCENTS_400: + return 4.; + case Options::MaxZoom::PERCENTS_500: + return 5.; + case Options::MaxZoom::PERCENTS_600: + return 6.; + case Options::MaxZoom::PERCENTS_700: + return 7.; + case Options::MaxZoom::PERCENTS_800: + return 8.; + case Options::MaxZoom::PERCENTS_1600: + default: + return 16.; + } + } +} + bool CropWindow::initialized = false; Glib::ustring CropWindow::zoomOuttt; @@ -62,9 +88,12 @@ CropWindow::CropWindow (ImageArea* parent, bool isLowUpdatePriority_, bool isDet initZoomSteps(); Glib::RefPtr context = parent->get_pango_context () ; - Pango::FontDescription fontd = context->get_font_description (); + Pango::FontDescription fontd = parent->get_style_context()->get_font(); fontd.set_weight (Pango::WEIGHT_BOLD); - fontd.set_size(8 * Pango::SCALE); + const int fontSize = 8; // pt + // Non-absolute size is defined in "Pango units" and shall be multiplied by + // Pango::SCALE from "pt": + fontd.set_size (fontSize * Pango::SCALE); context->set_font_description (fontd); Glib::RefPtr cllayout = parent->create_pango_layout("1000%"); @@ -80,11 +109,11 @@ CropWindow::CropWindow (ImageArea* parent, bool isLowUpdatePriority_, bool isDet closett = "Close"; initialized = true; } - bZoomOut = new LWButton(Cairo::RefPtr(new RTSurface("magnifier-minus-small.png")), 0, nullptr, LWButton::Left, LWButton::Center, &zoomOuttt); - bZoomIn = new LWButton(Cairo::RefPtr(new RTSurface("magnifier-plus-small.png")), 1, nullptr, LWButton::Left, LWButton::Center, &zoomIntt); - bZoom100 = new LWButton(Cairo::RefPtr(new RTSurface("magnifier-1to1-small.png")), 2, nullptr, LWButton::Left, LWButton::Center, &zoom100tt); - //bZoomFit = new LWButton (Cairo::RefPtr(new RTSurface("magnifier-fit.png")), 3, NULL, LWButton::Left, LWButton::Center, "Zoom Fit"); - bClose = new LWButton(Cairo::RefPtr(new RTSurface("cancel-small.png")), 4, nullptr, LWButton::Right, LWButton::Center, &closett); + bZoomOut = new LWButton(std::shared_ptr(new RTSurface("magnifier-minus-small", Gtk::ICON_SIZE_BUTTON)), 0, nullptr, LWButton::Left, LWButton::Center, &zoomOuttt); + bZoomIn = new LWButton(std::shared_ptr(new RTSurface("magnifier-plus-small", Gtk::ICON_SIZE_BUTTON)), 1, nullptr, LWButton::Left, LWButton::Center, &zoomIntt); + bZoom100 = new LWButton(std::shared_ptr(new RTSurface("magnifier-1to1-small", Gtk::ICON_SIZE_BUTTON)), 2, nullptr, LWButton::Left, LWButton::Center, &zoom100tt); + //bZoomFit = new LWButton (std::shared_ptr(new RTSurface("magnifier-fit", Gtk::ICON_SIZE_BUTTON)), 3, NULL, LWButton::Left, LWButton::Center, "Zoom Fit"); + bClose = new LWButton(std::shared_ptr(new RTSurface("cancel-small", Gtk::ICON_SIZE_BUTTON)), 4, nullptr, LWButton::Right, LWButton::Center, &closett); buttonSet.add (bZoomOut); buttonSet.add (bZoomIn); @@ -403,7 +432,7 @@ void CropWindow::buttonPress (int button, int type, int bstate, int x, int y) // Add a new Color Picker rtengine::Coord imgPos; screenCoordToImage(x, y, imgPos.x, imgPos.y); - LockableColorPicker *newPicker = new LockableColorPicker(this, &cropHandler.colorParams->outputProfile, &cropHandler.colorParams->workingProfile); + LockableColorPicker *newPicker = new LockableColorPicker(this, cropHandler.colorParams.get()); colorPickers.push_back(newPicker); hoveredPicker = newPicker; updateHoveredPicker(&imgPos); @@ -1095,10 +1124,10 @@ void CropWindow::pointerMoved (int bstate, int x, int y) printf("Using \"%s\" output\n", outputProfile.c_str()); if(outputProfile==options.rtSettings.srgb) printf("OK SRGB2"); */ - pmlistener->pointerMoved (false, cropHandler.colorParams->outputProfile, cropHandler.colorParams->workingProfile, mx, my, -1, -1, -1); + pmlistener->pointerMoved (false, *cropHandler.colorParams, mx, my, -1, -1, -1); if (pmhlistener) { - pmhlistener->pointerMoved (false, cropHandler.colorParams->outputProfile, cropHandler.colorParams->workingProfile, mx, my, -1, -1, -1); + pmhlistener->pointerMoved (false, *cropHandler.colorParams, mx, my, -1, -1, -1); } } else { @@ -1145,11 +1174,11 @@ void CropWindow::pointerMoved (int bstate, int x, int y) // Updates the Navigator // TODO: possible double color conversion if rval, gval, bval come from cropHandler.cropPixbuftrue ? see issue #4583 - pmlistener->pointerMoved (true, cropHandler.colorParams->outputProfile, cropHandler.colorParams->workingProfile, mx, my, rval, gval, bval, isRaw); + pmlistener->pointerMoved (true, *cropHandler.colorParams, mx, my, rval, gval, bval, isRaw); if (pmhlistener) { // Updates the HistogramRGBArea - pmhlistener->pointerMoved (true, cropHandler.colorParams->outputProfile, cropHandler.colorParams->workingProfile, mx, my, rval, gval, bval); + pmhlistener->pointerMoved (true, *cropHandler.colorParams, mx, my, rval, gval, bval); } } } @@ -1496,7 +1525,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; @@ -2284,13 +2313,18 @@ void CropWindow::updateHoveredPicker (rtengine::Coord *imgPos) } void CropWindow::changeZoom (int zoom, bool notify, int centerx, int centery, bool needsRedraw) { - if (zoom < 0) { zoom = 0; } else if (zoom > int(zoomSteps.size())-1) { zoom = int(zoomSteps.size())-1; } + // Limit zoom according to user preferences + double zoomLimit = zoomLimitToFraction(options.maxZoomLimit); + while(zoomSteps[zoom].zoom > zoomLimit && zoom != 0) { + --zoom; + } + cropZoom = zoom; cropLabel = zoomSteps[cropZoom].label; @@ -2449,9 +2483,12 @@ void CropWindow::drawDecoration (Cairo::RefPtr cr) int x = xpos, y = ypos; // prepare label Glib::RefPtr context = iarea->get_pango_context () ; - Pango::FontDescription fontd = context->get_font_description (); + Pango::FontDescription fontd = iarea->get_style_context()->get_font(); fontd.set_weight (Pango::WEIGHT_BOLD); - fontd.set_size(8 * Pango::SCALE); + const int fontSize = 8; // pt + // Non-absolute size is defined in "Pango units" and shall be multiplied by + // Pango::SCALE from "pt": + fontd.set_size (fontSize * Pango::SCALE); context->set_font_description (fontd); Glib::RefPtr cllayout = iarea->create_pango_layout(cropLabel); int iw, ih; @@ -2513,9 +2550,12 @@ void CropWindow::drawStraightenGuide (Cairo::RefPtr cr) } Glib::RefPtr context = iarea->get_pango_context () ; - Pango::FontDescription fontd = context->get_font_description (); + Pango::FontDescription fontd = iarea->get_style_context()->get_font(); fontd.set_weight (Pango::WEIGHT_BOLD); - fontd.set_size (8 * Pango::SCALE); + const int fontSize = 8; // pt + // Non-absolute size is defined in "Pango units" and shall be multiplied by + // Pango::SCALE from "pt": + fontd.set_size (fontSize * Pango::SCALE); context->set_font_description (fontd); Glib::RefPtr deglayout = iarea->create_pango_layout(Glib::ustring::compose ("%1 deg", Glib::ustring::format(std::setprecision(2), rot_deg))); diff --git a/rtgui/cursormanager.cc b/rtgui/cursormanager.cc index e915150aa..ae56b1361 100644 --- a/rtgui/cursormanager.cc +++ b/rtgui/cursormanager.cc @@ -17,8 +17,7 @@ * along with RawTherapee. If not, see . */ #include "cursormanager.h" - -#include "rtimage.h" +#include "rtsurface.h" CursorManager mainWindowCursorManager; CursorManager editWindowCursorManager; @@ -35,74 +34,50 @@ void CursorManager::init (Glib::RefPtr mainWindow) #endif - Glib::RefPtr add = RTImage::createPixbufFromFile("crosshair-small.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"); - Glib::RefPtr crosshair = RTImage::createPixbufFromFile("crosshair-hicontrast.png"); - Glib::RefPtr empty = RTImage::createPixbufFromFile("empty.png"); - Glib::RefPtr handClosed = RTImage::createPixbufFromFile("hand-closed-hicontrast.png"); - Glib::RefPtr handOpen = RTImage::createPixbufFromFile("hand-open-hicontrast.png"); - Glib::RefPtr moveBL = RTImage::createPixbufFromFile("node-move-sw-ne-hicontrast.png"); - Glib::RefPtr moveBR = RTImage::createPixbufFromFile("node-move-nw-se-hicontrast.png"); - Glib::RefPtr moveL = RTImage::createPixbufFromFile("node-move-x-hicontrast.png"); - Glib::RefPtr moveR = RTImage::createPixbufFromFile("node-move-x-hicontrast.png"); - Glib::RefPtr moveTL = RTImage::createPixbufFromFile("node-move-nw-se-hicontrast.png"); - Glib::RefPtr moveTR = RTImage::createPixbufFromFile("node-move-sw-ne-hicontrast.png"); - Glib::RefPtr moveX = RTImage::createPixbufFromFile("node-move-x-hicontrast.png"); - Glib::RefPtr moveXY = RTImage::createPixbufFromFile("node-move-xy-hicontrast.png"); - Glib::RefPtr moveY = RTImage::createPixbufFromFile("node-move-y-hicontrast.png"); - Glib::RefPtr rotate = RTImage::createPixbufFromFile("rotate-aroundnode-hicontrast.png"); - Glib::RefPtr wait = RTImage::createPixbufFromFile("gears.png"); // Currently unused, create *-hicontrast once used. + auto createCursor = [this] (const Glib::ustring &name, const Gdk::CursorType &fb_cursor, + const double offX = 0., const double offY = 0.) -> Glib::RefPtr + { + // Notes: + // - Gdk Cursor Theme is not supported on some OS (ex : MacOS). + // Cursor is retrieved from theme thanks to an RTSurface + // - By default, cursor hotspot is located at middle of surface. + // Use (offX, offY) between -1 and 0.99 to move cursor hotspot + auto cursor_surf = RTSurface(name, Gtk::ICON_SIZE_MENU); + auto cursor = Gdk::Cursor::create(this->display, + cursor_surf.get(), + std::min(std::max(cursor_surf.getWidth() / 2 * (1. + offX), 0.), static_cast(cursor_surf.getWidth())), + std::min(std::max(cursor_surf.getHeight() / 2 * (1. + offY), 0.), static_cast(cursor_surf.getHeight()))); - double s = RTScalable::getTweakedDPI() / RTScalable::baseDPI; // RTScalable::getDPI() might be preferable, however it imply a lot of work to support this option + if (!cursor) { + cursor = Gdk::Cursor::create(this->display, fb_cursor); + } - cAdd = add ? Gdk::Cursor::create(display, add, (int)(8.*s), (int)(8.*s)) : Gdk::Cursor::create(display, Gdk::PLUS); - cAddPicker = colPickAdd ? Gdk::Cursor::create(display, colPickAdd, (int)(4.*s), (int)(21.*s)) : Gdk::Cursor::create(display, Gdk::PLUS); - cCropDraw = cropDraw ? Gdk::Cursor::create(display, cropDraw, (int)(3.*s), (int)(3.*s)) : Gdk::Cursor::create(display, Gdk::DIAMOND_CROSS); - cCrosshair = crosshair ? Gdk::Cursor::create(display, crosshair, (int)(12.*s), (int)(12.*s)) : Gdk::Cursor::create(display, Gdk::CROSSHAIR); - cEmpty = empty ? Gdk::Cursor::create(display, empty, 12, 12) /* PNG: do not scale */ : Gdk::Cursor::create(display, Gdk::BLANK_CURSOR); - cHandClosed = handClosed ? Gdk::Cursor::create(display, handClosed, (int)(12.*s), (int)(12.*s)) : Gdk::Cursor::create(display, Gdk::HAND1); - cHandOpen = handOpen ? Gdk::Cursor::create(display, handOpen, (int)(12.*s), (int)(12.*s)) : Gdk::Cursor::create(display, Gdk::HAND2); - cMoveBL = moveBL ? Gdk::Cursor::create(display, moveBL, (int)(12.*s), (int)(12.*s)) : Gdk::Cursor::create(display, Gdk::BOTTOM_LEFT_CORNER); - cMoveBR = moveBR ? Gdk::Cursor::create(display, moveBR, (int)(12.*s), (int)(12.*s)) : Gdk::Cursor::create(display, Gdk::BOTTOM_RIGHT_CORNER); - cMoveL = moveL ? Gdk::Cursor::create(display, moveL, (int)(12.*s), (int)(12.*s)) : Gdk::Cursor::create(display, Gdk::SB_LEFT_ARROW); - cMoveR = moveR ? Gdk::Cursor::create(display, moveR, (int)(12.*s), (int)(12.*s)) : Gdk::Cursor::create(display, Gdk::SB_RIGHT_ARROW); - cMoveTL = moveTL ? Gdk::Cursor::create(display, moveTL, (int)(12.*s), (int)(12.*s)) : Gdk::Cursor::create(display, Gdk::TOP_LEFT_CORNER); - cMoveTR = moveTR ? Gdk::Cursor::create(display, moveTR, (int)(12.*s), (int)(12.*s)) : Gdk::Cursor::create(display, Gdk::TOP_RIGHT_CORNER); - cMoveX = moveX ? Gdk::Cursor::create(display, moveX, (int)(12.*s), (int)(12.*s)) : Gdk::Cursor::create(display, Gdk::SB_H_DOUBLE_ARROW); - cMoveXY = moveXY ? Gdk::Cursor::create(display, moveXY, (int)(12.*s), (int)(12.*s)) : Gdk::Cursor::create(display, Gdk::FLEUR); - cMoveY = moveY ? Gdk::Cursor::create(display, moveY, (int)(12.*s), (int)(12.*s)) : Gdk::Cursor::create(display, Gdk::SB_V_DOUBLE_ARROW); - cRotate = rotate ? Gdk::Cursor::create(display, rotate, (int)(12.*s), (int)(12.*s)) : Gdk::Cursor::create(display, Gdk::EXCHANGE); - cWB = colPick ? Gdk::Cursor::create(display, colPick, (int)(4.*s), (int)(21.*s)) : Gdk::Cursor::create(display, Gdk::TARGET); - cWait = wait ? Gdk::Cursor::create(display, wait, (int)(12.*s), (int)(12.*s)) : Gdk::Cursor::create(display, Gdk::CLOCK); + return cursor; + }; + + cAdd = createCursor("crosshair-hicontrast", Gdk::PLUS); + cAddPicker = createCursor("color-picker-add-hicontrast", Gdk::PLUS, -0.666, 0.75); + cCropDraw = createCursor("crop-point-hicontrast", Gdk::DIAMOND_CROSS, -0.75, 0.75); + cCrosshair = createCursor("crosshair-hicontrast", Gdk::CROSSHAIR); + cEmpty = createCursor("empty", Gdk::BLANK_CURSOR); + cHandClosed = createCursor("hand-closed-hicontrast", Gdk::HAND1); + cHandOpen = createCursor("hand-open-hicontrast", Gdk::HAND2); + cMoveBL = createCursor("node-move-sw-ne-hicontrast", Gdk::BOTTOM_LEFT_CORNER); + cMoveBR = createCursor("node-move-nw-se-hicontrast", Gdk::BOTTOM_RIGHT_CORNER); + cMoveL = createCursor("node-move-x-hicontrast", Gdk::SB_LEFT_ARROW); + cMoveR = createCursor("node-move-x-hicontrast", Gdk::SB_RIGHT_ARROW); + cMoveTL = createCursor("node-move-nw-se-hicontrast", Gdk::TOP_LEFT_CORNER); + cMoveTR = createCursor("node-move-sw-ne-hicontrast", Gdk::TOP_RIGHT_CORNER); + cMoveX = createCursor("node-move-x-hicontrast", Gdk::SB_H_DOUBLE_ARROW); + cMoveXY = createCursor("node-move-xy-hicontrast", Gdk::FLEUR); + cMoveY = createCursor("node-move-y-hicontrast", Gdk::SB_V_DOUBLE_ARROW); + cRotate = createCursor("rotate-aroundnode-hicontrast", Gdk::EXCHANGE); + cWB = createCursor("color-picker-hicontrast", Gdk::TARGET, -0.666, 0.75); + cWait = createCursor("gears", Gdk::CLOCK); window = mainWindow; } -void CursorManager::cleanup() -{ - cAdd.reset(); - cAddPicker.reset(); - cCropDraw.reset(); - cCrosshair.reset(); - cHandClosed.reset(); - cHandOpen.reset(); - cEmpty.reset(); - cMoveBL.reset(); - cMoveBR.reset(); - cMoveL.reset(); - cMoveR.reset(); - cMoveTL.reset(); - cMoveTR.reset(); - cMoveX.reset(); - cMoveY.reset(); - cMoveXY.reset(); - cRotate.reset(); - cWB.reset(); - cWait.reset(); -} - /* Set the cursor of the given window */ void CursorManager::setCursor (Glib::RefPtr window, CursorShape shape) { diff --git a/rtgui/cursormanager.h b/rtgui/cursormanager.h index 38f198e32..8b506bb1d 100644 --- a/rtgui/cursormanager.h +++ b/rtgui/cursormanager.h @@ -81,7 +81,6 @@ private: public: void init (Glib::RefPtr mainWindow); - void cleanup (); static void setWidgetCursor (Glib::RefPtr window, CursorShape shape); static void setCursorOfMainWindow (Glib::RefPtr window, CursorShape shape); }; diff --git a/rtgui/curveeditor.cc b/rtgui/curveeditor.cc index 67cea5174..efe2ef200 100644 --- a/rtgui/curveeditor.cc +++ b/rtgui/curveeditor.cc @@ -75,11 +75,11 @@ bool CurveEditor::reset() DiagonalCurveEditor::DiagonalCurveEditor (Glib::ustring text, CurveEditorGroup* ceGroup, CurveEditorSubGroup* ceSubGroup) : CurveEditor::CurveEditor(text, static_cast(ceGroup), ceSubGroup) { - curveType->addEntry("curve-linear-small.png", M("CURVEEDITOR_LINEAR")); // 0 Linear - curveType->addEntry("curve-spline-small.png", M("CURVEEDITOR_CUSTOM")); // 1 Spline - curveType->addEntry("curve-catmullrom-small.png", M("CURVEEDITOR_CATMULLROM")); // 4 CatmullRom - curveType->addEntry("curve-parametric-small.png", M("CURVEEDITOR_PARAMETRIC")); // 2 Parametric - curveType->addEntry("curve-nurbs-small.png", M("CURVEEDITOR_NURBS")); // 3 NURBS + curveType->addEntry("curve-linear-small", M("CURVEEDITOR_LINEAR")); // 0 Linear + curveType->addEntry("curve-spline-small", M("CURVEEDITOR_CUSTOM")); // 1 Spline + curveType->addEntry("curve-catmullrom-small", M("CURVEEDITOR_CATMULLROM")); // 4 CatmullRom + curveType->addEntry("curve-parametric-small", M("CURVEEDITOR_PARAMETRIC")); // 2 Parametric + curveType->addEntry("curve-nurbs-small", M("CURVEEDITOR_NURBS")); // 3 NURBS static_cast(curveType)->setPosIndexMap({ 0, 1, 4, 2, 3 }); curveType->setSelected(DCT_Linear); @@ -199,8 +199,8 @@ FlatCurveEditor::FlatCurveEditor (Glib::ustring text, CurveEditorGroup* ceGroup, identityValue = 0.5; // Order set in the same order than "enum FlatCurveType". Shouldn't change, for compatibility reason - curveType->addEntry("curve-flat-small.png", M("CURVEEDITOR_LINEAR")); // 0 Linear - curveType->addEntry("curve-controlpoints-small.png", M("CURVEEDITOR_MINMAXCPOINTS")); // 1 Min/Max ControlPoints + curveType->addEntry("curve-flat-small", M("CURVEEDITOR_LINEAR")); // 0 Linear + curveType->addEntry("curve-controlpoints-small", M("CURVEEDITOR_MINMAXCPOINTS")); // 1 Min/Max ControlPoints curveType->setSelected(FCT_Linear); curveType->show(); } diff --git a/rtgui/curveeditorgroup.cc b/rtgui/curveeditorgroup.cc index d099e1a99..5ce3765a2 100644 --- a/rtgui/curveeditorgroup.cc +++ b/rtgui/curveeditorgroup.cc @@ -28,6 +28,7 @@ #include "rtimage.h" #include "options.h" #include "pathutils.h" +#include "rtscalable.h" CurveEditorGroup::CurveEditorGroup (Glib::ustring& curveDir, Glib::ustring groupLabel, int blank) : curveDir(curveDir), line(0), curve_reset(nullptr), displayedCurve(nullptr), flatSubGroup(nullptr), diagonalSubGroup(nullptr), cl(nullptr), numberOfPackedCurve(0) @@ -39,9 +40,9 @@ CurveEditorGroup::CurveEditorGroup (Glib::ustring& curveDir, Glib::ustring group } else if(blank == 1){ curveGroupLabel = Gtk::manage (new Gtk::Label (groupLabel, Gtk::ALIGN_START)); } - + setExpandAlignProperties(curveGroupLabel, false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - set_row_spacing(RTScalable::getScale()); + set_row_spacing(RTScalable::scalePixelSize(1)); } CurveEditorGroup::~CurveEditorGroup() @@ -129,7 +130,7 @@ void CurveEditorGroup::newLine() if (curveEditors.size() > numberOfPackedCurve) { Gtk::Grid* currLine = Gtk::manage (new Gtk::Grid ()); setExpandAlignProperties(currLine, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); - currLine->set_column_spacing(RTScalable::getScale()); + currLine->set_column_spacing(RTScalable::scalePixelSize(1)); bool isHeader = false; int x = 0; @@ -162,7 +163,7 @@ void CurveEditorGroup::newLine() if (isHeader) { curve_reset = Gtk::manage (new Gtk::Button ()); setExpandAlignProperties(curve_reset, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_FILL); - curve_reset->add (*Gtk::manage (new RTImage ("undo-small.png", "redo-small.png"))); + curve_reset->add (*Gtk::manage (new RTImage ("undo-small", Gtk::ICON_SIZE_BUTTON))); curve_reset->set_relief (Gtk::RELIEF_NONE); curve_reset->set_tooltip_text (M("CURVEEDITOR_TOOLTIPLINEAR")); curve_reset->signal_clicked().connect( sigc::mem_fun(*this, &CurveEditorGroup::curveResetPressed) ); @@ -381,7 +382,7 @@ void CurveEditorGroup::setTooltip( Glib::ustring ttip) void CurveEditorGroup::setBatchMode (bool batchMode) { for (std::vector::iterator i = curveEditors.begin(); i != curveEditors.end(); ++i) { - (*i)->curveType->addEntry("template-24.png", M("GENERAL_UNCHANGED")); + (*i)->curveType->addEntry("template-24", M("GENERAL_UNCHANGED")); (*i)->curveType->show(); } } @@ -441,7 +442,7 @@ void CurveEditorSubGroup::initButton (Gtk::Button &button, const Glib::ustring & vAlign = options.curvebboxpos == 0 || options.curvebboxpos == 2 ? Gtk::ALIGN_FILL : Gtk::ALIGN_END; } - button.add (*Gtk::manage (new RTImage (iconName))); + button.add (*Gtk::manage (new RTImage(iconName, Gtk::ICON_SIZE_LARGE_TOOLBAR))); button.get_style_context()->add_class(GTK_STYLE_CLASS_FLAT); if (!tooltip.empty()) { button.set_tooltip_text(M(tooltip)); diff --git a/rtgui/darkframe.cc b/rtgui/darkframe.cc index 83c7fe81c..648f96718 100644 --- a/rtgui/darkframe.cc +++ b/rtgui/darkframe.cc @@ -40,7 +40,7 @@ DarkFrame::DarkFrame () : FoldableToolPanel(this, TOOL_NAME, M("TP_DARKFRAME_LAB bindCurrentFolder (*darkFrameFile, options.lastDarkframeDir); dfLabel = Gtk::manage(new Gtk::Label(M("GENERAL_FILE"))); btnReset = Gtk::manage(new Gtk::Button()); - btnReset->set_image (*Gtk::manage(new RTImage ("cancel-small.png"))); + btnReset->set_image (*Gtk::manage(new RTImage ("cancel-small", Gtk::ICON_SIZE_BUTTON))); hbdf->pack_start(*dfLabel, Gtk::PACK_SHRINK, 0); hbdf->pack_start(*darkFrameFile); hbdf->pack_start(*btnReset, Gtk::PACK_SHRINK, 0); diff --git a/rtgui/diagonalcurveeditorsubgroup.cc b/rtgui/diagonalcurveeditorsubgroup.cc index f4fc8449e..88d9a14c5 100644 --- a/rtgui/diagonalcurveeditorsubgroup.cc +++ b/rtgui/diagonalcurveeditorsubgroup.cc @@ -85,18 +85,18 @@ DiagonalCurveEditorSubGroup::DiagonalCurveEditorSubGroup (CurveEditorGroup* prt, } editPointCustom = Gtk::manage (new Gtk::ToggleButton ()); - initButton(*editPointCustom, Glib::ustring("edit-point.png"), Gtk::ALIGN_START, false, "CURVEEDITOR_EDITPOINT_HINT"); + initButton(*editPointCustom, Glib::ustring("edit-point"), Gtk::ALIGN_START, false, "CURVEEDITOR_EDITPOINT_HINT"); editCustom = Gtk::manage (new Gtk::ToggleButton()); - initButton(*editCustom, Glib::ustring("crosshair-node-curve.png"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP"); + initButton(*editCustom, Glib::ustring("crosshair-node-curve"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP"); editCustom->hide(); copyCustom = Gtk::manage (new Gtk::Button ()); - initButton(*copyCustom, Glib::ustring("copy.png"), Gtk::ALIGN_END, true); + initButton(*copyCustom, Glib::ustring("copy"), Gtk::ALIGN_END, true); pasteCustom = Gtk::manage (new Gtk::Button ()); - initButton(*pasteCustom, Glib::ustring("paste.png"), Gtk::ALIGN_END, false); + initButton(*pasteCustom, Glib::ustring("paste"), Gtk::ALIGN_END, false); loadCustom = Gtk::manage (new Gtk::Button ()); - initButton(*loadCustom, Glib::ustring("folder-open.png"), Gtk::ALIGN_END, false); + initButton(*loadCustom, Glib::ustring("folder-open"), Gtk::ALIGN_END, false); saveCustom = Gtk::manage (new Gtk::Button ()); - initButton(*saveCustom, Glib::ustring("save.png"), Gtk::ALIGN_END, false); + initButton(*saveCustom, Glib::ustring("save"), Gtk::ALIGN_END, false); custombbox->attach_next_to(*editPointCustom, sideStart, 1, 1); custombbox->attach_next_to(*editCustom, sideStart, 1, 1); @@ -177,18 +177,18 @@ DiagonalCurveEditorSubGroup::DiagonalCurveEditorSubGroup (CurveEditorGroup* prt, } editPointNURBS = Gtk::manage (new Gtk::ToggleButton ()); - initButton(*editPointNURBS, Glib::ustring("edit-point.png"), Gtk::ALIGN_START, false, "CURVEEDITOR_EDITPOINT_HINT"); + initButton(*editPointNURBS, Glib::ustring("edit-point"), Gtk::ALIGN_START, false, "CURVEEDITOR_EDITPOINT_HINT"); editNURBS = Gtk::manage (new Gtk::ToggleButton()); - initButton(*editNURBS, Glib::ustring("crosshair-node-curve.png"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP"); + initButton(*editNURBS, Glib::ustring("crosshair-node-curve"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP"); editNURBS->hide(); copyNURBS = Gtk::manage (new Gtk::Button ()); - initButton(*copyNURBS, Glib::ustring("copy.png"), Gtk::ALIGN_END, true); + initButton(*copyNURBS, Glib::ustring("copy"), Gtk::ALIGN_END, true); pasteNURBS = Gtk::manage (new Gtk::Button ()); - initButton(*pasteNURBS, Glib::ustring("paste.png"), Gtk::ALIGN_END, false); + initButton(*pasteNURBS, Glib::ustring("paste"), Gtk::ALIGN_END, false); loadNURBS = Gtk::manage (new Gtk::Button ()); - initButton(*loadNURBS, Glib::ustring("folder-open.png"), Gtk::ALIGN_END, false); + initButton(*loadNURBS, Glib::ustring("folder-open"), Gtk::ALIGN_END, false); saveNURBS = Gtk::manage (new Gtk::Button ()); - initButton(*saveNURBS, Glib::ustring("save.png"), Gtk::ALIGN_END, false); + initButton(*saveNURBS, Glib::ustring("save"), Gtk::ALIGN_END, false); NURBSbbox->attach_next_to(*editPointNURBS, sideStart, 1, 1); NURBSbbox->attach_next_to(*editNURBS, sideStart, 1, 1); @@ -273,16 +273,16 @@ DiagonalCurveEditorSubGroup::DiagonalCurveEditorSubGroup (CurveEditorGroup* prt, paramCurveBox->attach_next_to(*shcSelector, *paramCurve, Gtk::POS_BOTTOM, 1, 1); editParam = Gtk::manage (new Gtk::ToggleButton()); - initButton(*editParam, Glib::ustring("crosshair-node-curve.png"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP"); + initButton(*editParam, Glib::ustring("crosshair-node-curve"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP"); editParam->hide(); copyParam = Gtk::manage (new Gtk::Button ()); - initButton(*copyParam, Glib::ustring("copy.png"), Gtk::ALIGN_END, true); + initButton(*copyParam, Glib::ustring("copy"), Gtk::ALIGN_END, true); pasteParam = Gtk::manage (new Gtk::Button ()); - initButton(*pasteParam, Glib::ustring("paste.png"), Gtk::ALIGN_END, false); + initButton(*pasteParam, Glib::ustring("paste"), Gtk::ALIGN_END, false); loadParam = Gtk::manage (new Gtk::Button ()); - initButton(*loadParam, Glib::ustring("folder-open.png"), Gtk::ALIGN_END, false); + initButton(*loadParam, Glib::ustring("folder-open"), Gtk::ALIGN_END, false); saveParam = Gtk::manage (new Gtk::Button ()); - initButton(*saveParam, Glib::ustring("save.png"), Gtk::ALIGN_END, false); + initButton(*saveParam, Glib::ustring("save"), Gtk::ALIGN_END, false); parambbox->attach_next_to(*editParam, sideStart, 1, 1); parambbox->attach_next_to(*copyParam, sideEnd, 1, 1); @@ -428,7 +428,6 @@ void DiagonalCurveEditorSubGroup::editModeSwitchedOff () prevState = editCustomConn.block(true); editCustom->set_active(false); customCurve->pipetteMouseOver(nullptr, nullptr, 0); - customCurve->setDirty(true); if (!prevState) { editCustomConn.block(false); @@ -437,7 +436,6 @@ void DiagonalCurveEditorSubGroup::editModeSwitchedOff () prevState = editNURBSConn.block(true); editNURBS->set_active(false); NURBSCurve->pipetteMouseOver(nullptr, nullptr, 0); - NURBSCurve->setDirty(true); if (!prevState) { editNURBSConn.block(false); @@ -446,7 +444,6 @@ void DiagonalCurveEditorSubGroup::editModeSwitchedOff () prevState = editParamConn.block(true); editParam->set_active(false); paramCurve->pipetteMouseOver(nullptr, nullptr, 0); - paramCurve->setDirty(true); if (!prevState) { editParamConn.block(false); @@ -461,12 +458,10 @@ void DiagonalCurveEditorSubGroup::pipetteMouseOver(EditDataProvider *provider, i case (DCT_Spline): case (DCT_CatumullRom): customCurve->pipetteMouseOver(curveEditor, provider, modifierKey); - customCurve->setDirty(true); break; case (DCT_Parametric): { paramCurve->pipetteMouseOver(curveEditor, provider, modifierKey); - paramCurve->setDirty(true); float pipetteVal = 0.f; editedAdjuster = nullptr; int n = 0; @@ -517,7 +512,6 @@ void DiagonalCurveEditorSubGroup::pipetteMouseOver(EditDataProvider *provider, i case (DCT_NURBS): NURBSCurve->pipetteMouseOver(curveEditor, provider, modifierKey); - NURBSCurve->setDirty(true); break; default: // (DCT_Linear, DCT_Unchanged) @@ -753,7 +747,6 @@ void DiagonalCurveEditorSubGroup::switchGUI() dCurve->paramCurveEd.at(3) ); - double s = (double)RTScalable::getScale(); highlights->setValue (dCurve->paramCurveEd.at(4)); highlights->setLabel(label[3]); lights->setValue (dCurve->paramCurveEd.at(5)); @@ -765,8 +758,8 @@ void DiagonalCurveEditorSubGroup::switchGUI() shcSelector->coloredBar.setColorProvider(barColorProvider, dCurve->getBottomBarCallerId()); shcSelector->coloredBar.setBgGradient(bgGradient); shcSelector->setMargins( - (int)( ((leftBar ? (double)CBAR_WIDTH + 2. + (double)CBAR_MARGIN + RADIUS : RADIUS) - 1.5) * s ), - (int)((RADIUS - 1.5) * s) + (int)( (leftBar ? (double)CBAR_WIDTH + 2. + (double)CBAR_MARGIN + RADIUS : RADIUS) - 1.5 ), + (int)( RADIUS - 1.5 ) ); paramCurve->setColoredBar(leftBar, nullptr); paramCurve->queue_resize_no_redraw(); @@ -895,11 +888,9 @@ void DiagonalCurveEditorSubGroup::loadPressed () if (p[0] == (double)(DCT_Spline) || p[0] == (double)(DCT_CatumullRom)) { customCurve->setPoints (p); - customCurve->queue_draw (); customCurve->notifyListener (); } else if (p[0] == (double)(DCT_NURBS)) { NURBSCurve->setPoints (p); - NURBSCurve->queue_draw (); NURBSCurve->notifyListener (); } else if (p[0] == (double)(DCT_Parametric)) { shcSelector->setPositions ( p[1], p[2], p[3] ); @@ -908,7 +899,6 @@ void DiagonalCurveEditorSubGroup::loadPressed () darks->setValue (p[6]); shadows->setValue (p[7]); paramCurve->setPoints (p); - paramCurve->queue_draw (); paramCurve->notifyListener (); } } @@ -966,7 +956,6 @@ void DiagonalCurveEditorSubGroup::pastePressed () case DCT_Spline: // custom case DCT_CatumullRom: customCurve->setPoints (curve); - customCurve->queue_draw (); customCurve->notifyListener (); break; @@ -981,13 +970,11 @@ void DiagonalCurveEditorSubGroup::pastePressed () darks->setValue (curve[6]); shadows->setValue (curve[7]); paramCurve->setPoints (curve); - paramCurve->queue_draw (); paramCurve->notifyListener (); break; case DCT_NURBS: // NURBS NURBSCurve->setPoints (curve); - NURBSCurve->queue_draw (); NURBSCurve->notifyListener (); break; diff --git a/rtgui/dirbrowser.cc b/rtgui/dirbrowser.cc index 2be1e3f3a..6ebbb26b4 100644 --- a/rtgui/dirbrowser.cc +++ b/rtgui/dirbrowser.cc @@ -28,7 +28,7 @@ #endif #include "guiutils.h" -#include "rtimage.h" +#include "rtsurface.h" #include "multilangmgr.h" #include "options.h" @@ -86,8 +86,17 @@ std::vector listSubDirs (const Glib::RefPtr& dir, bool DirBrowser::DirBrowser () : dirTreeModel(), dtColumns(), tvc(M("DIRBROWSER_FOLDERS")), + + openfolder("folder-open-small"), + closedfolder("folder-closed-small"), + icdrom("device-optical"), + ifloppy("device-floppy"), + ihdd("device-hdd"), + inetwork("device-network"), + iremovable("device-usb"), + expandSuccess(false) -#ifdef WIN32 +#ifdef _WIN32 , volumes(0) #endif { @@ -120,15 +129,6 @@ DirBrowser::~DirBrowser() void DirBrowser::fillDirTree () { - - openfolder = RTImage::createPixbufFromFile ("folder-open-small.png"); - closedfolder = RTImage::createPixbufFromFile ("folder-closed-small.png"); - icdrom = RTImage::createPixbufFromFile ("device-optical.png"); - ifloppy = RTImage::createPixbufFromFile ("device-floppy.png"); - ihdd = RTImage::createPixbufFromFile ("device-hdd.png"); - iremovable = RTImage::createPixbufFromFile ("device-usb.png"); - inetwork = RTImage::createPixbufFromFile ("device-network.png"); - //Create the Tree model: dirTreeModel = Gtk::TreeStore::create(dtColumns); dirtree->set_model (dirTreeModel); @@ -136,10 +136,9 @@ void DirBrowser::fillDirTree () fillRoot (); Gtk::CellRendererPixbuf* render_pb = Gtk::manage ( new Gtk::CellRendererPixbuf () ); + render_pb->property_stock_size() = Gtk::ICON_SIZE_SMALL_TOOLBAR; tvc.pack_start (*render_pb, false); - tvc.add_attribute(*render_pb, "pixbuf-expander-closed", dtColumns.icon2); - tvc.add_attribute(*render_pb, "pixbuf", dtColumns.icon2); - tvc.add_attribute(*render_pb, "pixbuf-expander-open", dtColumns.icon1); + tvc.add_attribute(*render_pb, "icon-name", dtColumns.icon_name); tvc.pack_start (crt); tvc.add_attribute(crt, "text", dtColumns.filename); @@ -156,11 +155,12 @@ void DirBrowser::fillDirTree () render_pb->property_ypad() = 0; dirtree->signal_row_expanded().connect(sigc::mem_fun(*this, &DirBrowser::row_expanded)); + dirtree->signal_row_collapsed().connect(sigc::mem_fun(*this, &DirBrowser::row_collapsed)); dirtree->signal_row_activated().connect(sigc::mem_fun(*this, &DirBrowser::row_activated)); dirTreeModel->signal_sort_column_changed().connect(sigc::mem_fun(*this, &DirBrowser::on_sort_column_changed)); } -#ifdef WIN32 +#ifdef _WIN32 void DirBrowser::addRoot (char letter) { @@ -175,22 +175,17 @@ void DirBrowser::addRoot (char letter) int type = GetDriveType (volume); if (type == DRIVE_CDROM) { - root->set_value (0, icdrom); - root->set_value (1, icdrom); + root->set_value (dtColumns.icon_name, icdrom); } else if (type == DRIVE_REMOVABLE) { if (letter - 'A' < 2) { - root->set_value (0, ifloppy); - root->set_value (1, ifloppy); + root->set_value (dtColumns.icon_name, ifloppy); } else { - root->set_value (0, iremovable); - root->set_value (1, iremovable); + root->set_value (dtColumns.icon_name, iremovable); } } else if (type == DRIVE_REMOTE) { - root->set_value (0, inetwork); - root->set_value (1, inetwork); + root->set_value (dtColumns.icon_name, inetwork); } else if (type == DRIVE_FIXED) { - root->set_value (0, ihdd); - root->set_value (1, ihdd); + root->set_value (dtColumns.icon_name, ihdd); } Gtk::TreeModel::iterator child = dirTreeModel->append (root->children()); @@ -251,7 +246,7 @@ int updateVolumesUI (void* br) void DirBrowser::fillRoot () { -#ifdef WIN32 +#ifdef _WIN32 volumes = GetLogicalDrives (); for (int i = 0; i < 32; i++) @@ -319,11 +314,24 @@ void DirBrowser::row_expanded (const Gtk::TreeModel::iterator& iter, const Gtk:: expandSuccess = true; + // Update row icon (only if row icon is not a volume one or is empty) + if (iter->get_value(dtColumns.icon_name) == closedfolder || iter->get_value(dtColumns.icon_name) == "") { + iter->set_value(dtColumns.icon_name, openfolder); + } + Glib::RefPtr monitor = dir->monitor_directory (); iter->set_value (dtColumns.monitor, monitor); monitor->signal_changed().connect (sigc::bind(sigc::mem_fun(*this, &DirBrowser::file_changed), iter, dir->get_parse_name())); } +void DirBrowser::row_collapsed (const Gtk::TreeModel::iterator& iter, const Gtk::TreeModel::Path& path) +{ + // Update row icon (only if row icon is not a volume one) + if (iter->get_value(dtColumns.icon_name) == openfolder) { + iter->set_value(dtColumns.icon_name, closedfolder); + } +} + void DirBrowser::updateDir (const Gtk::TreeModel::iterator& iter) { @@ -366,8 +374,7 @@ void DirBrowser::addDir (const Gtk::TreeModel::iterator& iter, const Glib::ustri Gtk::TreeModel::iterator child = dirTreeModel->append(iter->children()); child->set_value (dtColumns.filename, dirname); - child->set_value (dtColumns.icon1, openfolder); - child->set_value (dtColumns.icon2, closedfolder); + child->set_value (dtColumns.icon_name, closedfolder); Glib::ustring fullname = Glib::build_filename (iter->get_value (dtColumns.dirname), dirname); child->set_value (dtColumns.dirname, fullname); Gtk::TreeModel::iterator fooRow = dirTreeModel->append(child->children()); @@ -393,10 +400,12 @@ Gtk::TreePath DirBrowser::expandToDir (const Glib::ustring& absDirPath) char* dcpy = strdup (absDirPath.c_str()); char* dir = strtok (dcpy, "/\\"); +#ifdef _WIN32 int count = 0; +#endif expandSuccess = true; -#ifndef WIN32 +#ifndef _WIN32 Gtk::TreeModel::iterator j = dirTreeModel->get_iter (path); path.up (); path.push_back (0); @@ -406,7 +415,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 +428,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 @@ -436,8 +445,9 @@ Gtk::TreePath DirBrowser::expandToDir (const Glib::ustring& absDirPath) ++ix; ++i; } - +#ifdef _WIN32 count++; +#endif dir = strtok(nullptr, "/\\"); } diff --git a/rtgui/dirbrowser.h b/rtgui/dirbrowser.h index 0254d6eb5..f5c05e30d 100644 --- a/rtgui/dirbrowser.h +++ b/rtgui/dirbrowser.h @@ -35,15 +35,13 @@ private: struct DirTreeColumns : public Gtk::TreeModelColumnRecord { public: Gtk::TreeModelColumn filename; - Gtk::TreeModelColumn > icon1; - Gtk::TreeModelColumn > icon2; + Gtk::TreeModelColumn icon_name; Gtk::TreeModelColumn dirname; Gtk::TreeModelColumn > monitor; DirTreeColumns() { - add(icon1); - add(icon2); + add(icon_name); add(filename); add(dirname); add(monitor); @@ -53,7 +51,6 @@ private: DirTreeColumns dtColumns; Gtk::TreeViewColumn tvc; Gtk::CellRendererText crt; - Gtk::CellRendererPixbuf crb; Gtk::TreeView *dirtree; @@ -62,17 +59,17 @@ private: void fillRoot (); - Glib::RefPtr openfolder; - Glib::RefPtr closedfolder; - Glib::RefPtr icdrom; - Glib::RefPtr ifloppy; - Glib::RefPtr ihdd; - Glib::RefPtr inetwork; - Glib::RefPtr iremovable; + Glib::ustring openfolder; + Glib::ustring closedfolder; + Glib::ustring icdrom; + Glib::ustring ifloppy; + Glib::ustring ihdd; + Glib::ustring inetwork; + Glib::ustring iremovable; bool expandSuccess; -#ifdef WIN32 +#ifdef _WIN32 unsigned int volumes; public: void updateVolumes (); @@ -94,6 +91,7 @@ public: void fillDirTree (); void on_sort_column_changed() const; void row_expanded (const Gtk::TreeModel::iterator& iter, const Gtk::TreeModel::Path& path); + void row_collapsed (const Gtk::TreeModel::iterator& iter, const Gtk::TreeModel::Path& path); void row_activated (const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column); void file_changed (const Glib::RefPtr& file, const Glib::RefPtr& other_file, Gio::FileMonitorEvent event_type, const Gtk::TreeModel::iterator& iter, const Glib::ustring& dirName); void open (const Glib::ustring& dirName, const Glib::ustring& fileName = ""); // goes to dir "dirName" and selects file "fileName" diff --git a/rtgui/dirpyrdenoise.cc b/rtgui/dirpyrdenoise.cc index f2b780eba..4e487b184 100644 --- a/rtgui/dirpyrdenoise.cc +++ b/rtgui/dirpyrdenoise.cc @@ -26,9 +26,11 @@ #include "editbuffer.h" #include "guiutils.h" #include "options.h" +#include "eventmapper.h" #include "../rtengine/color.h" #include "../rtengine/procparams.h" +#include "../rtengine/refreshmap.h" using namespace rtengine; using namespace rtengine::procparams; @@ -37,6 +39,9 @@ const Glib::ustring DirPyrDenoise::TOOL_NAME = "dirpyrdenoise"; DirPyrDenoise::DirPyrDenoise () : FoldableToolPanel(this, TOOL_NAME, M("TP_DIRPYRDENOISE_LABEL"), true, true), lastmedian(false) { + const auto procEventMapper = ProcEventMapper::getInstance(); + EvDPDNGain = procEventMapper->newEvent(ALLNORAW, "HISTORY_MSG_DIRPYRDENOISE_GAIN"); + std::vector milestones; CurveListener::setMulti(true); nextnresid = 0.; @@ -229,6 +234,11 @@ DirPyrDenoise::DirPyrDenoise () : FoldableToolPanel(this, TOOL_NAME, M("TP_DIRPY pack_start( *hb11, Gtk::PACK_SHRINK, 1); smethodconn = smethod->signal_changed().connect ( sigc::mem_fun(*this, &DirPyrDenoise::smethodChanged) ); + autoGain = Gtk::manage(new CheckBox(M("TP_DIRPYRDENOISE_MAIN_AUTO_GAIN"), multiImage)); + autoGain->set_tooltip_text(M("TP_DIRPYRDENOISE_MAIN_AUTO_GAIN_TOOLTIP")); + autoGain->setCheckBoxListener(this); + pack_start(*autoGain, Gtk::PACK_SHRINK, 0); + gamma = Gtk::manage (new Adjuster (M("TP_DIRPYRDENOISE_MAIN_GAMMA"), 1.0, 3.0, 0.01, 1.7)); gamma->set_tooltip_text (M("TP_DIRPYRDENOISE_MAIN_GAMMA_TOOLTIP")); gamma->setAdjusterListener (this); @@ -570,6 +580,7 @@ void DirPyrDenoise::read (const ProcParams* pp, const ParamsEdited* pedited) redchro->setEditedState (pedited->dirpyrDenoise.redchro ? Edited : UnEdited); bluechro->setEditedState (pedited->dirpyrDenoise.bluechro ? Edited : UnEdited); + autoGain->set_inconsistent(!pedited->dirpyrDenoise.gain); gamma->setEditedState (pedited->dirpyrDenoise.gamma ? Edited : UnEdited); passes->setEditedState (pedited->dirpyrDenoise.passes ? Edited : UnEdited); set_inconsistent (multiImage && !pedited->dirpyrDenoise.enabled); @@ -593,6 +604,7 @@ void DirPyrDenoise::read (const ProcParams* pp, const ParamsEdited* pedited) redchro->setValue (pp->dirpyrDenoise.redchro); bluechro->setValue (pp->dirpyrDenoise.bluechro); + autoGain->setValue(pp->dirpyrDenoise.autoGain); gamma->setValue (pp->dirpyrDenoise.gamma); passes->setValue (pp->dirpyrDenoise.passes); lshape->setCurve (pp->dirpyrDenoise.lcurve); @@ -631,6 +643,7 @@ void DirPyrDenoise::write (ProcParams* pp, ParamsEdited* pedited) pp->dirpyrDenoise.chroma = chroma->getValue (); pp->dirpyrDenoise.redchro = redchro->getValue (); pp->dirpyrDenoise.bluechro = bluechro->getValue (); + pp->dirpyrDenoise.autoGain = autoGain->get_active(); pp->dirpyrDenoise.gamma = gamma->getValue (); pp->dirpyrDenoise.passes = passes->getValue (); pp->dirpyrDenoise.enabled = getEnabled(); @@ -653,6 +666,7 @@ void DirPyrDenoise::write (ProcParams* pp, ParamsEdited* pedited) pedited->dirpyrDenoise.chroma = chroma->getEditedState (); pedited->dirpyrDenoise.redchro = redchro->getEditedState (); pedited->dirpyrDenoise.bluechro = bluechro->getEditedState (); + pedited->dirpyrDenoise.gain = !autoGain->get_inconsistent(); pedited->dirpyrDenoise.gamma = gamma->getEditedState (); pedited->dirpyrDenoise.passes = passes->getEditedState (); pedited->dirpyrDenoise.enabled = !get_inconsistent(); @@ -992,6 +1006,13 @@ void DirPyrDenoise::adjusterChanged(Adjuster* a, double newval) } } +void DirPyrDenoise::checkBoxToggled(CheckBox* c, CheckValue newval) +{ + if (c == autoGain) { + listener->panelChanged(EvDPDNGain, c->getValueAsStr()); + } +} + void DirPyrDenoise::enabledChanged () { diff --git a/rtgui/dirpyrdenoise.h b/rtgui/dirpyrdenoise.h index dadd96988..6e4e250d4 100644 --- a/rtgui/dirpyrdenoise.h +++ b/rtgui/dirpyrdenoise.h @@ -21,6 +21,7 @@ #include #include "adjuster.h" +#include "checkbox.h" #include "colorprovider.h" #include "curvelistener.h" #include "guiutils.h" @@ -34,6 +35,7 @@ class EditDataProvider; class DirPyrDenoise final : public ToolParamBlock, public AdjusterListener, + public CheckBoxListener, public FoldableToolPanel, public rtengine::AutoChromaListener, public CurveListener, @@ -54,6 +56,7 @@ public: void autoOpenCurve () override; void adjusterChanged (Adjuster* a, double newval) override; + void checkBoxToggled(CheckBox* c, CheckValue newval) override; void enabledChanged () override; void medianChanged (); void chromaChanged (double autchroma, double autred, double autblue) override; @@ -83,6 +86,7 @@ public: Glib::ustring getSettingString (); private: + rtengine::ProcEvent EvDPDNGain; CurveEditorGroup* NoiscurveEditorG; CurveEditorGroup* CCcurveEditorG; Adjuster* luma; @@ -90,6 +94,7 @@ private: Adjuster* chroma; Adjuster* redchro; Adjuster* bluechro; + CheckBox* autoGain; Adjuster* gamma; Adjuster* passes; FlatCurveEditor* lshape; diff --git a/rtgui/distortion.cc b/rtgui/distortion.cc index a5138eb99..083c2f03a 100644 --- a/rtgui/distortion.cc +++ b/rtgui/distortion.cc @@ -34,7 +34,7 @@ Distortion::Distortion (): FoldableToolPanel(this, TOOL_NAME, M("TP_DISTORTION_L rlistener = nullptr; autoDistor = Gtk::manage (new Gtk::Button (M("GENERAL_AUTO"))); - autoDistor->set_image (*Gtk::manage (new RTImage ("distortion-auto-small.png"))); + autoDistor->set_image (*Gtk::manage (new RTImage ("distortion-auto-small", Gtk::ICON_SIZE_BUTTON))); autoDistor->get_style_context()->add_class("independent"); autoDistor->set_alignment(0.5f, 0.5f); autoDistor->set_tooltip_text (M("TP_DISTORTION_AUTO_TOOLTIP")); @@ -42,14 +42,14 @@ Distortion::Distortion (): FoldableToolPanel(this, TOOL_NAME, M("TP_DISTORTION_L autoDistor->show(); pack_start (*autoDistor); - Gtk::Image* idistL = Gtk::manage (new RTImage ("distortion-pincushion-small.png")); - Gtk::Image* idistR = Gtk::manage (new RTImage ("distortion-barrel-small.png")); + Gtk::Image* idistL = Gtk::manage (new RTImage ("distortion-pincushion-small")); + Gtk::Image* idistR = Gtk::manage (new RTImage ("distortion-barrel-small")); distor = Gtk::manage (new Adjuster (M("TP_DISTORTION_AMOUNT"), -0.5, 0.5, 0.001, 0, idistL, idistR)); distor->setAdjusterListener (this); distor->setLogScale(2, 0); - + distor->show(); pack_start (*distor); } diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index 420717b7e..b03dab5e8 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 = @@ -418,9 +418,9 @@ private: void prepareIntentBox () { // same order as the enum - intentBox.addEntry ("intent-perceptual.png", M ("PREFERENCES_INTENT_PERCEPTUAL")); - intentBox.addEntry ("intent-relative.png", M ("PREFERENCES_INTENT_RELATIVE")); - intentBox.addEntry ("intent-absolute.png", M ("PREFERENCES_INTENT_ABSOLUTE")); + intentBox.addEntry ("intent-perceptual", M ("PREFERENCES_INTENT_PERCEPTUAL")); + intentBox.addEntry ("intent-relative", M ("PREFERENCES_INTENT_RELATIVE")); + intentBox.addEntry ("intent-absolute", M ("PREFERENCES_INTENT_ABSOLUTE")); setExpandAlignProperties (intentBox.buttonGroup, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_FILL); intentBox.setSelected (1); @@ -429,7 +429,7 @@ private: void prepareSoftProofingBox () { - Gtk::Image *softProofImage = Gtk::manage (new RTImage ("gamut-softproof.png")); + Gtk::Image *softProofImage = Gtk::manage (new RTImage ("gamut-softproof", Gtk::ICON_SIZE_LARGE_TOOLBAR)); softProofImage->set_padding (0, 0); softProof.add (*softProofImage); softProof.set_relief (Gtk::RELIEF_NONE); @@ -438,7 +438,7 @@ private: softProof.set_active (false); softProof.show (); - Gtk::Image *spGamutCheckImage = Gtk::manage (new RTImage ("gamut-warning.png")); + Gtk::Image *spGamutCheckImage = Gtk::manage (new RTImage ("gamut-warning", Gtk::ICON_SIZE_LARGE_TOOLBAR)); spGamutCheckImage->set_padding (0, 0); spGamutCheck.add (*spGamutCheckImage); spGamutCheck.set_relief (Gtk::RELIEF_NONE); @@ -721,7 +721,8 @@ EditorPanel::EditorPanel (FilePanel* filePanel) firstProcessingDone = false; // construct toolpanelcoordinator - tpc = new ToolPanelCoordinator (); + tpc = new ToolPanelCoordinator(); + tpc->setProgressListener(this); // build GUI @@ -743,7 +744,7 @@ EditorPanel::EditorPanel (FilePanel* filePanel) //leftsubpaned->pack_start (*ppframe, Gtk::PACK_SHRINK, 4); navigator = Gtk::manage(new Navigator()); - navigator->previewWindow->set_size_request(-1, 150 * RTScalable::getScale()); + navigator->previewWindow->set_size_request(-1, RTScalable::scalePixelSize(150)); leftsubpaned->pack1(*navigator, false, false); history = Gtk::manage(new History()); @@ -759,19 +760,19 @@ EditorPanel::EditorPanel (FilePanel* filePanel) Gtk::Box* editbox = Gtk::manage (new Gtk::Box (Gtk::ORIENTATION_VERTICAL)); info = Gtk::manage (new Gtk::ToggleButton ()); - Gtk::Image* infoimg = Gtk::manage (new RTImage ("info.png")); + Gtk::Image* infoimg = Gtk::manage (new RTImage ("info", Gtk::ICON_SIZE_LARGE_TOOLBAR)); info->add (*infoimg); info->set_relief (Gtk::RELIEF_NONE); info->set_tooltip_markup (M ("MAIN_TOOLTIP_QINFO")); beforeAfter = Gtk::manage (new Gtk::ToggleButton ()); - Gtk::Image* beforeAfterIcon = Gtk::manage (new RTImage ("beforeafter.png")); + Gtk::Image* beforeAfterIcon = Gtk::manage (new RTImage ("beforeafter", Gtk::ICON_SIZE_LARGE_TOOLBAR)); beforeAfter->add (*beforeAfterIcon); beforeAfter->set_relief (Gtk::RELIEF_NONE); beforeAfter->set_tooltip_markup (M ("MAIN_TOOLTIP_TOGGLE")); - iBeforeLockON = new RTImage ("padlock-locked-small.png"); - iBeforeLockOFF = new RTImage ("padlock-unlocked-small.png"); + iBeforeLockON = new RTImage ("padlock-locked-small", Gtk::ICON_SIZE_LARGE_TOOLBAR); + iBeforeLockOFF = new RTImage ("padlock-unlocked-small", Gtk::ICON_SIZE_LARGE_TOOLBAR); Gtk::Separator* vsept = Gtk::manage (new Gtk::Separator(Gtk::ORIENTATION_VERTICAL)); Gtk::Separator* vsepz = Gtk::manage (new Gtk::Separator(Gtk::ORIENTATION_VERTICAL)); @@ -780,8 +781,8 @@ EditorPanel::EditorPanel (FilePanel* filePanel) hidehp = Gtk::manage (new Gtk::ToggleButton ()); - iHistoryShow = new RTImage ("panel-to-right.png"); - iHistoryHide = new RTImage ("panel-to-left.png"); + iHistoryShow = new RTImage ("panel-to-right", Gtk::ICON_SIZE_LARGE_TOOLBAR); + iHistoryHide = new RTImage ("panel-to-left", Gtk::ICON_SIZE_LARGE_TOOLBAR); hidehp->set_relief (Gtk::RELIEF_NONE); hidehp->set_active (options.showHistory); @@ -797,8 +798,8 @@ EditorPanel::EditorPanel (FilePanel* filePanel) if (!simpleEditor && filePanel) { tbTopPanel_1 = new Gtk::ToggleButton (); - iTopPanel_1_Show = new RTImage ("panel-to-bottom.png"); - iTopPanel_1_Hide = new RTImage ("panel-to-top.png"); + iTopPanel_1_Show = new RTImage ("panel-to-bottom", Gtk::ICON_SIZE_LARGE_TOOLBAR); + iTopPanel_1_Hide = new RTImage ("panel-to-top", Gtk::ICON_SIZE_LARGE_TOOLBAR); tbTopPanel_1->set_relief (Gtk::RELIEF_NONE); tbTopPanel_1->set_active (true); tbTopPanel_1->set_tooltip_markup (M ("MAIN_TOOLTIP_SHOWHIDETP1")); @@ -815,7 +816,7 @@ EditorPanel::EditorPanel (FilePanel* filePanel) // Histogram profile toggle controls toggleHistogramProfile = Gtk::manage (new Gtk::ToggleButton ()); - Gtk::Image* histProfImg = Gtk::manage (new RTImage ("gamut-hist.png")); + Gtk::Image* histProfImg = Gtk::manage (new RTImage ("gamut-hist", Gtk::ICON_SIZE_LARGE_TOOLBAR)); toggleHistogramProfile->add (*histProfImg); toggleHistogramProfile->set_relief (Gtk::RELIEF_NONE); toggleHistogramProfile->set_active (options.rtSettings.HistogramWorking); @@ -888,14 +889,14 @@ EditorPanel::EditorPanel (FilePanel* filePanel) iops->set_row_spacing (2); iops->set_column_spacing (2); - Gtk::Image *saveButtonImage = Gtk::manage (new RTImage ("save.png")); + Gtk::Image *saveButtonImage = Gtk::manage (new RTImage ("save", Gtk::ICON_SIZE_LARGE_TOOLBAR)); saveimgas = Gtk::manage (new Gtk::Button ()); saveimgas->set_relief(Gtk::RELIEF_NONE); saveimgas->add (*saveButtonImage); saveimgas->set_tooltip_markup (M ("MAIN_BUTTON_SAVE_TOOLTIP")); setExpandAlignProperties (saveimgas, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_FILL); - Gtk::Image *queueButtonImage = Gtk::manage (new RTImage ("gears.png")); + Gtk::Image *queueButtonImage = Gtk::manage (new RTImage ("gears", Gtk::ICON_SIZE_LARGE_TOOLBAR)); queueimg = Gtk::manage (new Gtk::Button ()); queueimg->set_relief(Gtk::RELIEF_NONE); queueimg->add (*queueButtonImage); @@ -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"); setExpandAlignProperties(send_to_external->buttonGroup, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_FILL); updateExternalEditorWidget( options.externalEditorIndex >= 0 ? options.externalEditorIndex : options.externalEditors.size(), @@ -919,8 +921,8 @@ EditorPanel::EditorPanel (FilePanel* filePanel) // tbRightPanel_1 tbRightPanel_1 = Gtk::manage(new Gtk::ToggleButton()); - iRightPanel_1_Show = new RTImage ("panel-to-left.png"); - iRightPanel_1_Hide = new RTImage ("panel-to-right.png"); + iRightPanel_1_Show = new RTImage ("panel-to-left", Gtk::ICON_SIZE_LARGE_TOOLBAR); + iRightPanel_1_Hide = new RTImage ("panel-to-right", Gtk::ICON_SIZE_LARGE_TOOLBAR); tbRightPanel_1->set_relief (Gtk::RELIEF_NONE); tbRightPanel_1->set_active (true); tbRightPanel_1->set_tooltip_markup (M ("MAIN_TOOLTIP_SHOWHIDERP1")); @@ -929,8 +931,8 @@ EditorPanel::EditorPanel (FilePanel* filePanel) // ShowHideSidePanels tbShowHideSidePanels = Gtk::manage(new Gtk::ToggleButton()); - iShowHideSidePanels = new RTImage ("crossed-arrows-out.png"); - iShowHideSidePanels_exit = new RTImage ("crossed-arrows-in.png"); + iShowHideSidePanels = new RTImage ("crossed-arrows-out", Gtk::ICON_SIZE_LARGE_TOOLBAR); + iShowHideSidePanels_exit = new RTImage ("crossed-arrows-in", Gtk::ICON_SIZE_LARGE_TOOLBAR); tbShowHideSidePanels->set_relief (Gtk::RELIEF_NONE); tbShowHideSidePanels->set_active (false); tbShowHideSidePanels->set_tooltip_markup (M ("MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP")); @@ -941,7 +943,7 @@ EditorPanel::EditorPanel (FilePanel* filePanel) if (!simpleEditor && !options.tabbedUI) { // Navigation buttons - Gtk::Image *navPrevImage = Gtk::manage (new RTImage ("arrow2-left.png")); + Gtk::Image *navPrevImage = Gtk::manage (new RTImage ("arrow2-left", Gtk::ICON_SIZE_LARGE_TOOLBAR)); navPrevImage->set_padding (0, 0); navPrev = Gtk::manage (new Gtk::Button ()); navPrev->add (*navPrevImage); @@ -949,7 +951,7 @@ EditorPanel::EditorPanel (FilePanel* filePanel) navPrev->set_tooltip_markup (M ("MAIN_BUTTON_NAVPREV_TOOLTIP")); setExpandAlignProperties (navPrev, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_FILL); - Gtk::Image *navNextImage = Gtk::manage (new RTImage ("arrow2-right.png")); + Gtk::Image *navNextImage = Gtk::manage (new RTImage ("arrow2-right", Gtk::ICON_SIZE_LARGE_TOOLBAR)); navNextImage->set_padding (0, 0); navNext = Gtk::manage (new Gtk::Button ()); navNext->add (*navNextImage); @@ -957,7 +959,7 @@ EditorPanel::EditorPanel (FilePanel* filePanel) navNext->set_tooltip_markup (M ("MAIN_BUTTON_NAVNEXT_TOOLTIP")); setExpandAlignProperties (navNext, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_FILL); - Gtk::Image *navSyncImage = Gtk::manage (new RTImage ("arrow-updown.png")); + Gtk::Image *navSyncImage = Gtk::manage (new RTImage ("arrow-updown", Gtk::ICON_SIZE_LARGE_TOOLBAR)); navSyncImage->set_padding (0, 0); navSync = Gtk::manage (new Gtk::Button ()); navSync->add (*navSyncImage); @@ -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(); @@ -2778,10 +2792,14 @@ void EditorPanel::updateExternalEditorWidget(int selectedIndex, const std::vecto send_to_external->insertEntry(i, gioIcon, name, &send_to_external_radio_group); } else { - send_to_external->insertEntry(i, "palette-brush.png", name, &send_to_external_radio_group); + send_to_external->insertEntry(i, "palette-brush", name, &send_to_external_radio_group); } } - send_to_external->addEntry("palette-brush.png", M("GENERAL_OTHER"), &send_to_external_radio_group); + +#ifndef __APPLE__ + send_to_external->addEntry("palette-brush", 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..0b765caef 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() ); @@ -989,11 +989,11 @@ void OPIcon::drivenPointToRectangle(const rtengine::Coord &pos, bottomRight.y = topLeft.y + H - 1; } -OPIcon::OPIcon(const Cairo::RefPtr &normal, - const Cairo::RefPtr &active, - const Cairo::RefPtr &prelight, - const Cairo::RefPtr &dragged, - const Cairo::RefPtr &insensitive, +OPIcon::OPIcon(const std::shared_ptr &normal, + const std::shared_ptr &active, + const std::shared_ptr &prelight, + const std::shared_ptr &dragged, + const std::shared_ptr&insensitive, DrivenPoint drivenPoint) : drivenPoint(drivenPoint) { @@ -1022,48 +1022,48 @@ OPIcon::OPIcon(Glib::ustring normalImage, Glib::ustring activeImage, Glib::ustri Glib::ustring draggedImage, Glib::ustring insensitiveImage, DrivenPoint drivenPoint) : drivenPoint(drivenPoint) { if (!normalImage.empty()) { - normalImg = Cairo::RefPtr(new RTSurface(normalImage)); + normalImg = std::shared_ptr(new RTSurface(normalImage, Gtk::ICON_SIZE_MENU)); } if (!prelightImage.empty()) { - prelightImg = Cairo::RefPtr(new RTSurface(prelightImage)); + prelightImg = std::shared_ptr(new RTSurface(prelightImage, Gtk::ICON_SIZE_MENU)); } if (!activeImage.empty()) { - activeImg = Cairo::RefPtr(new RTSurface(activeImage)); + activeImg = std::shared_ptr(new RTSurface(activeImage, Gtk::ICON_SIZE_MENU)); } if (!draggedImage.empty()) { - draggedImg = Cairo::RefPtr(new RTSurface(draggedImage)); + draggedImg = std::shared_ptr(new RTSurface(draggedImage, Gtk::ICON_SIZE_MENU)); } if (!insensitiveImage.empty()) { - insensitiveImg = Cairo::RefPtr(new RTSurface(insensitiveImage)); + insensitiveImg = std::shared_ptr(new RTSurface(insensitiveImage, Gtk::ICON_SIZE_MENU)); } } -const Cairo::RefPtr OPIcon::getNormalImg() +const std::shared_ptr OPIcon::getNormalImg() { return normalImg; } -const Cairo::RefPtr OPIcon::getPrelightImg() +const std::shared_ptr OPIcon::getPrelightImg() { return prelightImg; } -const Cairo::RefPtr OPIcon::getActiveImg() +const std::shared_ptr OPIcon::getActiveImg() { return activeImg; } -const Cairo::RefPtr OPIcon::getDraggedImg() +const std::shared_ptr OPIcon::getDraggedImg() { return draggedImg; } -const Cairo::RefPtr OPIcon::getInsensitiveImg() +const std::shared_ptr OPIcon::getInsensitiveImg() { return insensitiveImg; } -void OPIcon::drawImage(Cairo::RefPtr &img, +void OPIcon::drawImage(std::shared_ptr &img, Cairo::RefPtr &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem) { @@ -1089,7 +1089,7 @@ void OPIcon::drawImage(Cairo::RefPtr &img, cr->fill(); } -void OPIcon::drawMOImage(Cairo::RefPtr &img, Cairo::RefPtr &cr, +void OPIcon::drawMOImage(std::shared_ptr &img, Cairo::RefPtr &cr, unsigned short id, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem) { // test of F_HOVERABLE has already been done diff --git a/rtgui/editwidgets.h b/rtgui/editwidgets.h index fd539c355..b22ba175e 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); @@ -354,34 +354,32 @@ class OPIcon : public Geometry // OP stands for "On Preview" { private: - Cairo::RefPtr normalImg; - Cairo::RefPtr prelightImg; - Cairo::RefPtr activeImg; - Cairo::RefPtr draggedImg; - Cairo::RefPtr insensitiveImg; + std::shared_ptr normalImg; + std::shared_ptr prelightImg; + std::shared_ptr activeImg; + std::shared_ptr draggedImg; + std::shared_ptr insensitiveImg; - static void updateImages(); - void changeImage(Glib::ustring &newImage); - void drawImage (Cairo::RefPtr &img, Cairo::RefPtr &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem); - void drawMOImage (Cairo::RefPtr &img, Cairo::RefPtr &cr, unsigned short id, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem); + void drawImage (std::shared_ptr &img, Cairo::RefPtr &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem); + void drawMOImage (std::shared_ptr &img, Cairo::RefPtr &cr, unsigned short id, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem); void drivenPointToRectangle(const rtengine::Coord &pos, rtengine::Coord &topLeft, rtengine::Coord &bottomRight, int W, int H); public: DrivenPoint drivenPoint; rtengine::Coord position; - OPIcon (const Cairo::RefPtr &normal, - const Cairo::RefPtr &active, - const Cairo::RefPtr &prelight = {}, - const Cairo::RefPtr &dragged = {}, - const Cairo::RefPtr &insensitive = {}, + OPIcon (const std::shared_ptr &normal, + const std::shared_ptr &active, + const std::shared_ptr &prelight = nullptr, + const std::shared_ptr &dragged = nullptr, + const std::shared_ptr &insensitive = nullptr, DrivenPoint drivenPoint = DP_CENTERCENTER); OPIcon (Glib::ustring normalImage, Glib::ustring activeImage, Glib::ustring prelightImage = "", Glib::ustring draggedImage = "", Glib::ustring insensitiveImage = "", DrivenPoint drivenPoint = DP_CENTERCENTER); - const Cairo::RefPtr getNormalImg(); - const Cairo::RefPtr getPrelightImg(); - const Cairo::RefPtr getActiveImg(); - const Cairo::RefPtr getDraggedImg(); - const Cairo::RefPtr getInsensitiveImg(); + const std::shared_ptr getNormalImg(); + const std::shared_ptr getPrelightImg(); + const std::shared_ptr getActiveImg(); + const std::shared_ptr getDraggedImg(); + const std::shared_ptr getInsensitiveImg(); void drawOuterGeometry (Cairo::RefPtr &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem) override; void drawInnerGeometry (Cairo::RefPtr &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem) override; void drawToMOChannel (Cairo::RefPtr &cr, unsigned short id, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem) override; @@ -546,7 +544,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..d2ea0f8a2 100644 --- a/rtgui/editwindow.cc +++ b/rtgui/editwindow.cc @@ -57,15 +57,16 @@ EditWindow* EditWindow::getInstance(RTWindow* p) } EditWindow::EditWindow (RTWindow* p) - : resolution(RTScalable::baseDPI) - , parent(p) + : parent(p) , isFullscreen(false) , isClosed(true) , isMinimized(false) { + // For UNIX system, set app icon +#ifndef _WIN32 + set_default_icon_name("rawtherapee"); +#endif - updateResolution(); - setAppIcon(); set_title_decorated(""); set_modal(false); set_resizable(true); @@ -165,56 +166,8 @@ void EditWindow::on_realize () editWindowCursorManager.init (get_window()); } -bool EditWindow::updateResolution() -{ - int scale = get_scale_factor(); - double res = get_screen()->get_resolution(); - if (scale == 2) { - // from Windows' behavior : if scale==2, resolution = 192. (Gtk shows 96 dpi !?), there's no higher value - res = RTScalable::baseHiDPI; - } - bool retVal = res != resolution; - resolution = res; - return retVal; -} - -void EditWindow::setAppIcon() -{ - Glib::ustring fName; - bool downsize = false; - // findIconAbsolutePath won't be able to select the image based on resolution with the - // storage of the images, we're doing the selection here - if (resolution == RTScalable::baseDPI) { - fName = "rawtherapee-logo-24.png"; - } else { - fName = "rawtherapee-logo-48.png"; - if (resolution < RTScalable::baseHiDPI) { - downsize = true; - } - } - Glib::ustring icon_path = Glib::build_filename (argv0, "images", fName); - const Glib::RefPtr pixbuf = Gdk::Pixbuf::create_from_file(icon_path); - if (!pixbuf) { - return; - } - if (downsize) { - int size = int((48. * resolution) / RTScalable::baseHiDPI); - pixbuf->scale_simple(size, size, Gdk::InterpType::INTERP_BILINEAR); - } - - try { - set_default_icon(pixbuf); - } catch(Glib::Exception& ex) { - printf ("%s\n", ex.what().c_str()); - } -} - bool EditWindow::on_configure_event(GdkEventConfigure* event) { - if (updateResolution()) { - setAppIcon(); - } - if (!options.meowMaximized && !isFullscreen && !isMinimized) { get_position(options.meowX, options.meowY); get_size(options.meowWidth, options.meowHeight); @@ -254,11 +207,11 @@ void EditWindow::addEditorPanel (EditorPanel* ep, const std::string &name) // construct closeable tab for the image Gtk::Box* hb = Gtk::manage (new Gtk::Box ()); - hb->pack_start (*Gtk::manage (new RTImage ("aperture.png"))); + hb->pack_start (*Gtk::manage (new RTImage ("aperture"))); hb->pack_start (*Gtk::manage (new Gtk::Label (Glib::path_get_basename (name)))); hb->set_tooltip_markup (name); Gtk::Button* closeb = Gtk::manage (new Gtk::Button ()); - closeb->set_image (*Gtk::manage(new RTImage ("cancel-small.png"))); + closeb->set_image (*Gtk::manage(new RTImage ("cancel-small", Gtk::ICON_SIZE_BUTTON))); closeb->set_relief (Gtk::RELIEF_NONE); closeb->set_focus_on_click (false); @@ -488,6 +441,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..b06f7690f 100644 --- a/rtgui/editwindow.h +++ b/rtgui/editwindow.h @@ -24,6 +24,7 @@ #include "guiutils.h" class EditorPanel; +struct ExternalEditor; class RTWindow; class EditWindow : @@ -31,7 +32,6 @@ class EditWindow : { private: - double resolution; RTWindow* parent; RTImage appIcon; @@ -46,8 +46,6 @@ private: bool isMinimized; sigc::connection onConfEventConn; void toggleFullscreen (); - bool updateResolution(); - void setAppIcon(); IdleRegister idle_register; @@ -66,6 +64,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..88a081c01 100644 --- a/rtgui/exifpanel.cc +++ b/rtgui/exifpanel.cc @@ -16,26 +16,38 @@ * 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), + //keepicon("tick-small"), + editicon("edit-small"), + open_icon_("expander-open-small"), + closed_icon_("expander-closed-small"), + 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 +55,54 @@ 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"); + 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::CellRendererPixbuf* render_pb = Gtk::manage (new Gtk::CellRendererPixbuf()); + render_pb->property_stock_size() = Gtk::ICON_SIZE_SMALL_TOOLBAR; 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, "icon-name", 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 &icon) -> Gtk::Button * + { + Gtk::Button *b = Gtk::manage(new Gtk::Button()); + b->set_image(*Gtk::manage(new RTImage(icon, Gtk::ICON_SIZE_BUTTON))); + 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"); + activate_none_ = addbtn("EXIFPANEL_ACTIVATE_NONE_HINT", "box"); + add = addbtn("EXIFPANEL_ADDEDIT", "edit"); + reset = addbtn("EXIFPANEL_RESETHINT", "undo"); + resetAll = addbtn("EXIFPANEL_RESETALLHINT", "undo-all"); - 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..9097b882f 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,71 +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 icon; + // Gtk::TreeModelColumn> expander_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 editicon; + + //Glib::ustring keepicon; + Glib::ustring editicon; + Glib::ustring open_icon_; + Glib::ustring 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 (); @@ -111,8 +135,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/exportpanel.cc b/rtgui/exportpanel.cc index f6c8a79f0..573055650 100644 --- a/rtgui/exportpanel.cc +++ b/rtgui/exportpanel.cc @@ -21,13 +21,14 @@ #include "multilangmgr.h" #include "options.h" #include "rtimage.h" +#include "rtsurface.h" #include "../rtengine/procparams.h" using namespace rtengine; using namespace rtengine::procparams; -ExportPanel::ExportPanel () : listener (nullptr) +ExportPanel::ExportPanel () : listener (nullptr), ornamentSurface(new RTSurface("ornament1.svg")) { set_orientation(Gtk::ORIENTATION_VERTICAL); @@ -185,14 +186,14 @@ ExportPanel::ExportPanel () : listener (nullptr) // Buttons btnFastExport = Gtk::manage ( new Gtk::Button () ); btnFastExport->set_tooltip_text (M ("EXPORT_PUTTOQUEUEFAST")); - btnFastExport->set_image (*Gtk::manage (new RTImage ("gears.png"))); + btnFastExport->set_image (*Gtk::manage (new RTImage ("gears"))); pack_start (*btnFastExport, Gtk::PACK_SHRINK, 4); // add panel ending Gtk::Box* vboxpe = Gtk::manage (new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); Gtk::Separator* hseptpe = Gtk::manage (new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL)); - Gtk::Image* peImg = Gtk::manage (new RTImage ("ornament1.png")); + Gtk::Image* peImg = Gtk::manage (new Gtk::Image (ornamentSurface->get())); vboxpe->pack_start (*hseptpe, Gtk::PACK_SHRINK, 4); vboxpe->pack_start (*peImg); pack_start (*vboxpe, Gtk::PACK_SHRINK, 0); diff --git a/rtgui/exportpanel.h b/rtgui/exportpanel.h index 18c4bda49..45fd75e3c 100644 --- a/rtgui/exportpanel.h +++ b/rtgui/exportpanel.h @@ -23,6 +23,7 @@ #include "guiutils.h" +class RTSurface; class ExportPanelListener { public: @@ -103,6 +104,8 @@ protected: ExportPanelListener* listener; + std::shared_ptr ornamentSurface; + void bypassALL_Toggled(); void use_fast_pipeline_toggled(); void SaveSettingsAsDefault(); diff --git a/rtgui/externaleditorpreferences.cc b/rtgui/externaleditorpreferences.cc index 5d9b45c5d..612356b8b 100644 --- a/rtgui/externaleditorpreferences.cc +++ b/rtgui/externaleditorpreferences.cc @@ -25,7 +25,6 @@ #include "externaleditorpreferences.h" #include "multilangmgr.h" -#include "rtimage.h" ExternalEditorPreferences::ExternalEditorPreferences(): @@ -37,7 +36,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()) { @@ -53,17 +54,22 @@ ExternalEditorPreferences::ExternalEditorPreferences(): list_scroll_area.add(*list_view); // Toolbar buttons. - auto add_image = Gtk::manage(new RTImage("add-small.png")); - auto remove_image = Gtk::manage(new RTImage("remove-small.png")); button_add = Gtk::manage(new Gtk::Button()); 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_add->set_image_from_icon_name("add-small"); + button_remove->set_image_from_icon_name("remove-small"); + 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 +83,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); @@ -96,8 +104,8 @@ ExternalEditorPreferences::getEditors() const auto children = list_model->children(); for (auto rowIter = children.begin(); rowIter != children.end(); rowIter++) { - const Gio::Icon *const icon = rowIter->get_value(model_columns.icon).get(); - const auto &icon_serialized = icon == nullptr ? "" : icon->serialize().print(); + const auto icon = rowIter->get_value(model_columns.icon); + const auto &icon_serialized = !icon ? "" : icon->serialize().print(); editors.emplace_back( rowIter->get_value(model_columns.name), rowIter->get_value(model_columns.command), @@ -156,6 +164,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 +255,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 +311,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 +376,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/fattaltonemap.cc b/rtgui/fattaltonemap.cc index d4ed90612..23a3a4ddf 100644 --- a/rtgui/fattaltonemap.cc +++ b/rtgui/fattaltonemap.cc @@ -1,5 +1,5 @@ /** -*- C++ -*- - * + * * This file is part of RawTherapee. * * Copyright (c) 2017 Alberto Griggio @@ -41,8 +41,8 @@ FattalToneMapping::FattalToneMapping(): FoldableToolPanel(this, TOOL_NAME, M("TP amount = Gtk::manage(new Adjuster (M("TP_TM_FATTAL_AMOUNT"), 1., 100., 1., 30.)); threshold = Gtk::manage(new Adjuster (M("TP_TM_FATTAL_THRESHOLD"), -100., 300., 1., 0.0)); threshold->setLogScale(10, 0); - Gtk::Image *al = Gtk::manage(new RTImage("circle-black-small.png")); - Gtk::Image *ar = Gtk::manage(new RTImage("circle-white-small.png")); + Gtk::Image *al = Gtk::manage(new RTImage("circle-black-small")); + Gtk::Image *ar = Gtk::manage(new RTImage("circle-white-small")); anchor = Gtk::manage(new Adjuster(M("TP_TM_FATTAL_ANCHOR"), 1, 100, 1, 50, al, ar)); amount->setAdjusterListener(this); diff --git a/rtgui/favoritbrowser.cc b/rtgui/favoritbrowser.cc index 0481847cb..2b16aadcc 100644 --- a/rtgui/favoritbrowser.cc +++ b/rtgui/favoritbrowser.cc @@ -16,7 +16,8 @@ * You should have received a copy of the GNU General Public License * along with RawTherapee. If not, see . */ -#include +#include "favoritbrowser.h" + #include "multilangmgr.h" #include "rtimage.h" @@ -57,7 +58,7 @@ FavoritBrowser::FavoritBrowser () : listener (NULL) add->set_vexpand(false); add->set_halign(Gtk::ALIGN_FILL); add->set_valign(Gtk::ALIGN_START); - add->set_image (*Gtk::manage (new RTImage ("add-small.png"))); + add->set_image (*Gtk::manage (new RTImage ("add-small", Gtk::ICON_SIZE_BUTTON))); add->get_style_context()->add_class("Left"); del = Gtk::manage (new Gtk::Button ()); del->set_tooltip_text(M("MAIN_FRAME_PLACES_DEL")); @@ -65,7 +66,7 @@ FavoritBrowser::FavoritBrowser () : listener (NULL) del->set_vexpand(false); del->set_halign(Gtk::ALIGN_FILL); del->set_valign(Gtk::ALIGN_START); - del->set_image (*Gtk::manage (new RTImage ("remove-small.png"))); + del->set_image (*Gtk::manage (new RTImage ("remove-small", Gtk::ICON_SIZE_BUTTON))); del->get_style_context()->add_class("Right"); Gtk::Box* buttonBox = Gtk::manage (new Gtk::Box ()); buttonBox->pack_start (*add); diff --git a/rtgui/filebrowser.cc b/rtgui/filebrowser.cc index ac4a27dec..26f0d5cd6 100644 --- a/rtgui/filebrowser.cc +++ b/rtgui/filebrowser.cc @@ -157,7 +157,7 @@ FileBrowser::FileBrowser () : pmenu->attach (*Gtk::manage(inspect = new Gtk::MenuItem (M("FILEBROWSER_POPUPINSPECT"))), 0, 1, p, p + 1); p++; } - pmenu->attach (*Gtk::manage(develop = new MyImageMenuItem (M("FILEBROWSER_POPUPPROCESS"), "gears.png")), 0, 1, p, p + 1); + pmenu->attach (*Gtk::manage(develop = new MyImageMenuItem (M("FILEBROWSER_POPUPPROCESS"), "gears")), 0, 1, p, p + 1); p++; pmenu->attach (*Gtk::manage(developfast = new Gtk::MenuItem (M("FILEBROWSER_POPUPPROCESSFAST"))), 0, 1, p, p + 1); p++; @@ -244,8 +244,8 @@ FileBrowser::FileBrowser () : // Thumbnail context menu // Similar image arrays in filecatalog.cc - std::array clabelActiveIcons = {"circle-empty-gray-small.png", "circle-red-small.png", "circle-yellow-small.png", "circle-green-small.png", "circle-blue-small.png", "circle-purple-small.png"}; - std::array clabelInactiveIcons = {"circle-empty-darkgray-small.png", "circle-empty-red-small.png", "circle-empty-yellow-small.png", "circle-empty-green-small.png", "circle-empty-blue-small.png", "circle-empty-purple-small.png"}; + std::array clabelActiveIcons = {"circle-empty-gray-small", "circle-red-small", "circle-yellow-small", "circle-green-small", "circle-blue-small", "circle-purple-small"}; + std::array clabelInactiveIcons = {"circle-empty-darkgray-small", "circle-empty-red-small", "circle-empty-yellow-small", "circle-empty-green-small", "circle-empty-blue-small", "circle-empty-purple-small"}; if (options.menuGroupLabel) { pmenu->attach (*Gtk::manage(menuLabel = new Gtk::MenuItem (M("FILEBROWSER_POPUPCOLORLABEL"))), 0, 1, p, p + 1); @@ -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..23b66b3cc 100644 --- a/rtgui/filebrowserentry.cc +++ b/rtgui/filebrowserentry.cc @@ -25,7 +25,7 @@ #include "cursormanager.h" #include "guiutils.h" #include "inspector.h" -#include "rtimage.h" +#include "rtsurface.h" #include "threadutils.h" #include "thumbbrowserbase.h" #include "thumbnail.h" @@ -37,12 +37,11 @@ //extern Glib::Threads::Thread* mainThread; -bool FileBrowserEntry::iconsLoaded(false); -Glib::RefPtr FileBrowserEntry::editedIcon; -Glib::RefPtr FileBrowserEntry::recentlySavedIcon; -Glib::RefPtr FileBrowserEntry::enqueuedIcon; -Glib::RefPtr FileBrowserEntry::hdr; -Glib::RefPtr FileBrowserEntry::ps; +std::shared_ptr FileBrowserEntry::editedIcon(std::shared_ptr(nullptr)); +std::shared_ptr FileBrowserEntry::recentlySavedIcon(std::shared_ptr(nullptr)); +std::shared_ptr FileBrowserEntry::enqueuedIcon(std::shared_ptr(nullptr)); +std::shared_ptr FileBrowserEntry::hdr(std::shared_ptr(nullptr)); +std::shared_ptr FileBrowserEntry::ps(std::shared_ptr(nullptr)); FileBrowserEntry::FileBrowserEntry (Thumbnail* thm, const Glib::ustring& fname) : ThumbBrowserEntryBase (fname, thm), wasInside(false), iatlistener(nullptr), press_x(0), press_y(0), action_x(0), action_y(0), rot_deg(0.0), landscape(true), cropParams(new rtengine::procparams::CropParams), cropgl(nullptr), state(SNormal), crop_custom_ratio(0.f) @@ -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 = std::shared_ptr(new RTSurface("tick-small", Gtk::ICON_SIZE_SMALL_TOOLBAR)); + recentlySavedIcon = std::shared_ptr(new RTSurface("save-small", Gtk::ICON_SIZE_SMALL_TOOLBAR)); + enqueuedIcon = std::shared_ptr(new RTSurface("gears-small", Gtk::ICON_SIZE_SMALL_TOOLBAR)); + hdr = std::shared_ptr(new RTSurface("filetype-hdr", Gtk::ICON_SIZE_SMALL_TOOLBAR)); + ps = std::shared_ptr(new RTSurface("filetype-ps", Gtk::ICON_SIZE_SMALL_TOOLBAR)); +} + +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 () @@ -123,13 +127,13 @@ void FileBrowserEntry::calcThumbnailSize () } } -std::vector> FileBrowserEntry::getIconsOnImageArea () +std::vector> FileBrowserEntry::getIconsOnImageArea () { if (!thumbnail) { return {}; } - std::vector> ret; + std::vector> ret; if (thumbnail->hasProcParams() && editedIcon) { ret.push_back(editedIcon); @@ -146,13 +150,13 @@ std::vector> FileBrowserEntry::getIconsOnImageArea () return ret; } -std::vector> FileBrowserEntry::getSpecificityIconsOnImageArea () +std::vector> FileBrowserEntry::getSpecificityIconsOnImageArea () { if (!thumbnail) { return {}; } - std::vector> ret; + std::vector> ret; if (thumbnail->isHDR() && hdr) { ret.push_back (hdr); @@ -193,8 +197,8 @@ void FileBrowserEntry::customBackBufferUpdate (Cairo::RefPtr c) void FileBrowserEntry::getIconSize (int& w, int& h) const { - w = editedIcon->get_width (); - h = editedIcon->get_height (); + w = editedIcon->getWidth (); + h = editedIcon->getHeight (); } FileThumbnailButtonSet* FileBrowserEntry::getThumbButtonSet () @@ -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); } } @@ -785,9 +789,12 @@ void FileBrowserEntry::drawStraightenGuide (Cairo::RefPtr cr) } Glib::RefPtr context = parent->getDrawingArea()->get_pango_context () ; - Pango::FontDescription fontd = context->get_font_description (); + Pango::FontDescription fontd = parent->getDrawingArea()->get_style_context()->get_font(); fontd.set_weight (Pango::WEIGHT_BOLD); - fontd.set_size (8 * Pango::SCALE); + const int fontSize = 8; // pt + // Non-absolute size is defined in "Pango units" and shall be multiplied by + // Pango::SCALE from "pt": + fontd.set_size (fontSize * Pango::SCALE); context->set_font_description (fontd); Glib::RefPtr deglayout = parent->getDrawingArea()->create_pango_layout(Glib::ustring::compose ("%1 deg", Glib::ustring::format(std::setprecision(2), rot_deg))); diff --git a/rtgui/filebrowserentry.h b/rtgui/filebrowserentry.h index 67b953514..1b1c4e73c 100644 --- a/rtgui/filebrowserentry.h +++ b/rtgui/filebrowserentry.h @@ -35,6 +35,7 @@ class FileBrowserEntry; class Thumbnail; +class RTSurface; struct FileBrowserEntryIdleHelper { FileBrowserEntry* fbentry; @@ -50,7 +51,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,17 +69,19 @@ 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: - static Glib::RefPtr editedIcon; - static Glib::RefPtr recentlySavedIcon; - static Glib::RefPtr enqueuedIcon; - static Glib::RefPtr hdr; - static Glib::RefPtr ps; + static std::shared_ptr editedIcon; + static std::shared_ptr recentlySavedIcon; + static std::shared_ptr enqueuedIcon; + static std::shared_ptr hdr; + static std::shared_ptr ps; FileBrowserEntry (Thumbnail* thm, const Glib::ustring& fname); ~FileBrowserEntry () override; + static void init (); void draw (Cairo::RefPtr cc) override; void setImageAreaToolListener (ImageAreaToolListener* l) @@ -93,12 +95,12 @@ public: void refreshQuickThumbnailImage () override; void calcThumbnailSize () override; - std::vector> getIconsOnImageArea () override; - std::vector> getSpecificityIconsOnImageArea () override; + std::vector> getIconsOnImageArea () override; + std::vector> getSpecificityIconsOnImageArea () override; 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 058236733..2bd16edf5 100644 --- a/rtgui/filecatalog.cc +++ b/rtgui/filecatalog.cc @@ -85,7 +85,7 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : trashButtonBox = Gtk::manage( new Gtk::Box(Gtk::ORIENTATION_VERTICAL) ); Gtk::Button* emptyT = Gtk::manage( new Gtk::Button ()); emptyT->set_tooltip_markup (M("FILEBROWSER_EMPTYTRASHHINT")); - emptyT->set_image (*Gtk::manage(new RTImage ("trash-delete.png"))); + emptyT->set_image (*Gtk::manage(new RTImage ("trash-delete", Gtk::ICON_SIZE_LARGE_TOOLBAR))); emptyT->signal_pressed().connect (sigc::mem_fun(*this, &FileCatalog::emptyTrash)); trashButtonBox->pack_start (*emptyT, Gtk::PACK_SHRINK, 4); emptyT->show (); @@ -95,8 +95,8 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : hbToolBar1 = Gtk::manage(new Gtk::Box ()); //setup BrowsePath - iRefreshWhite = new RTImage("refresh-small.png"); - iRefreshRed = new RTImage("refresh-red-small.png"); + iRefreshWhite = new RTImage("refresh-small", Gtk::ICON_SIZE_BUTTON); + iRefreshRed = new RTImage("refresh-red-small", Gtk::ICON_SIZE_BUTTON); BrowsePath = Gtk::manage(new Gtk::Entry ()); BrowsePath->set_width_chars (50); @@ -115,7 +115,7 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : BrowsePath->signal_key_press_event().connect(sigc::mem_fun(*this, &FileCatalog::BrowsePath_key_pressed)); //setup Query - iQueryClear = new RTImage("cancel-small.png"); + iQueryClear = new RTImage("cancel-small", Gtk::ICON_SIZE_BUTTON); Gtk::Label* labelQuery = Gtk::manage(new Gtk::Label(M("FILEBROWSER_QUERYLABEL"))); Query = Gtk::manage(new Gtk::Entry ()); // cannot use Gtk::manage here as FileCatalog::getFilter will fail on Query->get_text() Query->set_text(""); @@ -153,8 +153,8 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : pack_start (*stb, Gtk::PACK_SHRINK); tbLeftPanel_1 = new Gtk::ToggleButton (); - iLeftPanel_1_Show = new RTImage("panel-to-right.png"); - iLeftPanel_1_Hide = new RTImage("panel-to-left.png"); + iLeftPanel_1_Show = new RTImage("panel-to-right", Gtk::ICON_SIZE_LARGE_TOOLBAR); + iLeftPanel_1_Hide = new RTImage("panel-to-left", Gtk::ICON_SIZE_LARGE_TOOLBAR); tbLeftPanel_1->set_relief(Gtk::RELIEF_NONE); tbLeftPanel_1->set_active (true); @@ -166,11 +166,11 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : vSepiLeftPanel = new Gtk::Separator(Gtk::ORIENTATION_VERTICAL); buttonBar->pack_start (*vSepiLeftPanel, Gtk::PACK_SHRINK); - iFilterClear = new RTImage ("filter-clear.png"); - igFilterClear = new RTImage ("filter.png"); + iFilterClear = new RTImage ("filter-clear", Gtk::ICON_SIZE_LARGE_TOOLBAR); + igFilterClear = new RTImage ("filter", Gtk::ICON_SIZE_LARGE_TOOLBAR); bFilterClear = Gtk::manage(new Gtk::ToggleButton ()); bFilterClear->set_active (true); - bFilterClear->set_image(*iFilterClear);// (*Gtk::manage(new RTImage ("filter-clear.png"))); + bFilterClear->set_image(*iFilterClear); bFilterClear->set_relief (Gtk::RELIEF_NONE); bFilterClear->set_tooltip_markup (M("FILEBROWSER_SHOWDIRHINT")); bFilterClear->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event), false); @@ -184,8 +184,8 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : fltrLabelbox = Gtk::manage (new Gtk::Box()); fltrLabelbox->get_style_context()->add_class("smallbuttonbox"); - iUnRanked = new RTImage ("star-gold-hollow-small.png"); - igUnRanked = new RTImage ("star-hollow-small.png"); + iUnRanked = new RTImage ("star-gold-hollow-small", Gtk::ICON_SIZE_BUTTON); + igUnRanked = new RTImage ("star-hollow-small", Gtk::ICON_SIZE_BUTTON); bUnRanked = Gtk::manage( new Gtk::ToggleButton () ); bUnRanked->get_style_context()->add_class("smallbutton"); bUnRanked->set_active (false); @@ -197,8 +197,8 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : bUnRanked->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event), false); for (int i = 0; i < 5; i++) { - iranked[i] = new RTImage ("star-gold-small.png"); - igranked[i] = new RTImage ("star-small.png"); + iranked[i] = new RTImage ("star-gold-small", Gtk::ICON_SIZE_BUTTON); + igranked[i] = new RTImage ("star-small", Gtk::ICON_SIZE_BUTTON); iranked[i]->show (); igranked[i]->show (); bRank[i] = Gtk::manage( new Gtk::ToggleButton () ); @@ -212,11 +212,11 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : // Toolbar // Similar image arrays in filebrowser.cc - std::array clabelActiveIcons = {"circle-gray-small.png", "circle-red-small.png", "circle-yellow-small.png", "circle-green-small.png", "circle-blue-small.png", "circle-purple-small.png"}; - std::array clabelInactiveIcons = {"circle-empty-gray-small.png", "circle-empty-red-small.png", "circle-empty-yellow-small.png", "circle-empty-green-small.png", "circle-empty-blue-small.png", "circle-empty-purple-small.png"}; + std::array clabelActiveIcons = {"circle-gray-small", "circle-red-small", "circle-yellow-small", "circle-green-small", "circle-blue-small", "circle-purple-small"}; + std::array clabelInactiveIcons = {"circle-empty-gray-small", "circle-empty-red-small", "circle-empty-yellow-small", "circle-empty-green-small", "circle-empty-blue-small", "circle-empty-purple-small"}; - iUnCLabeled = new RTImage(clabelActiveIcons[0]); - igUnCLabeled = new RTImage(clabelInactiveIcons[0]); + iUnCLabeled = new RTImage(clabelActiveIcons[0], Gtk::ICON_SIZE_BUTTON); + igUnCLabeled = new RTImage(clabelInactiveIcons[0], Gtk::ICON_SIZE_BUTTON); bUnCLabeled = Gtk::manage(new Gtk::ToggleButton()); bUnCLabeled->get_style_context()->add_class("smallbutton"); bUnCLabeled->set_active(false); @@ -228,8 +228,8 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : bUnCLabeled->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event), false); for (int i = 0; i < 5; i++) { - iCLabeled[i] = new RTImage(clabelActiveIcons[i+1]); - igCLabeled[i] = new RTImage(clabelInactiveIcons[i+1]); + iCLabeled[i] = new RTImage(clabelActiveIcons[i+1], Gtk::ICON_SIZE_BUTTON); + igCLabeled[i] = new RTImage(clabelInactiveIcons[i+1], Gtk::ICON_SIZE_BUTTON); iCLabeled[i]->show(); igCLabeled[i]->show(); bCLabel[i] = Gtk::manage(new Gtk::ToggleButton()); @@ -269,10 +269,10 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : // TODO The "g" variant was the more transparent variant of the icon, used // when the button was not toggled. Simplify this, change to ordinary // togglebutton, use CSS for opacity change. - iEdited[0] = new RTImage ("tick-hollow-small.png"); - igEdited[0] = new RTImage ("tick-hollow-small.png"); - iEdited[1] = new RTImage ("tick-small.png"); - igEdited[1] = new RTImage ("tick-small.png"); + iEdited[0] = new RTImage ("tick-hollow-small", Gtk::ICON_SIZE_BUTTON); + igEdited[0] = new RTImage ("tick-hollow-small", Gtk::ICON_SIZE_BUTTON); + iEdited[1] = new RTImage ("tick-small", Gtk::ICON_SIZE_BUTTON); + igEdited[1] = new RTImage ("tick-small", Gtk::ICON_SIZE_BUTTON); for (int i = 0; i < 2; i++) { iEdited[i]->show (); @@ -294,10 +294,10 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : // TODO The "g" variant was the more transparent variant of the icon, used // when the button was not toggled. Simplify this, change to ordinary // togglebutton, use CSS for opacity change. - iRecentlySaved[0] = new RTImage ("saved-no-small.png"); - igRecentlySaved[0] = new RTImage ("saved-no-small.png"); - iRecentlySaved[1] = new RTImage ("saved-yes-small.png"); - igRecentlySaved[1] = new RTImage ("saved-yes-small.png"); + iRecentlySaved[0] = new RTImage ("saved-no-small", Gtk::ICON_SIZE_BUTTON); + igRecentlySaved[0] = new RTImage ("saved-no-small", Gtk::ICON_SIZE_BUTTON); + iRecentlySaved[1] = new RTImage ("saved-yes-small", Gtk::ICON_SIZE_BUTTON); + igRecentlySaved[1] = new RTImage ("saved-yes-small", Gtk::ICON_SIZE_BUTTON); for (int i = 0; i < 2; i++) { iRecentlySaved[i]->show (); @@ -322,8 +322,8 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : buttonBar->pack_start (*Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_VERTICAL)), Gtk::PACK_SHRINK); // Trash - iTrashShowEmpty = new RTImage("trash-empty-show.png") ; - iTrashShowFull = new RTImage("trash-full-show.png") ; + iTrashShowEmpty = new RTImage("trash-empty-show", Gtk::ICON_SIZE_LARGE_TOOLBAR) ; + iTrashShowFull = new RTImage("trash-full-show", Gtk::ICON_SIZE_LARGE_TOOLBAR) ; bTrash = Gtk::manage( new Gtk::ToggleButton () ); bTrash->set_image (*iTrashShowEmpty); @@ -332,8 +332,8 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : bCateg[17] = bTrash->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bTrash, true)); bTrash->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event), false); - iNotTrash = new RTImage("trash-hide-deleted.png") ; - iOriginal = new RTImage("filter-original.png"); + iNotTrash = new RTImage("trash-hide-deleted", Gtk::ICON_SIZE_LARGE_TOOLBAR) ; + iOriginal = new RTImage("filter-original", Gtk::ICON_SIZE_LARGE_TOOLBAR); bNotTrash = Gtk::manage( new Gtk::ToggleButton () ); bNotTrash->set_image (*iNotTrash); @@ -410,7 +410,7 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : categoryButtons[19] = bOriginal; exifInfo = Gtk::manage(new Gtk::ToggleButton ()); - exifInfo->set_image (*Gtk::manage(new RTImage ("info.png"))); + exifInfo->set_image (*Gtk::manage(new RTImage ("info", Gtk::ICON_SIZE_LARGE_TOOLBAR))); exifInfo->set_relief (Gtk::RELIEF_NONE); exifInfo->set_tooltip_markup (M("FILEBROWSER_SHOWEXIFINFO")); exifInfo->set_active( options.showFileNames ); @@ -420,13 +420,13 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : // thumbnail zoom Gtk::Box* zoomBox = Gtk::manage( new Gtk::Box () ); zoomInButton = Gtk::manage( new Gtk::Button () ); - zoomInButton->set_image (*Gtk::manage(new RTImage ("magnifier-plus.png"))); + zoomInButton->set_image (*Gtk::manage(new RTImage ("magnifier-plus", Gtk::ICON_SIZE_LARGE_TOOLBAR))); zoomInButton->signal_pressed().connect (sigc::mem_fun(*this, &FileCatalog::zoomIn)); zoomInButton->set_relief (Gtk::RELIEF_NONE); zoomInButton->set_tooltip_markup (M("FILEBROWSER_ZOOMINHINT")); zoomBox->pack_end (*zoomInButton, Gtk::PACK_SHRINK); zoomOutButton = Gtk::manage( new Gtk::Button () ); - zoomOutButton->set_image (*Gtk::manage(new RTImage ("magnifier-minus.png"))); + zoomOutButton->set_image (*Gtk::manage(new RTImage ("magnifier-minus", Gtk::ICON_SIZE_LARGE_TOOLBAR))); zoomOutButton->signal_pressed().connect (sigc::mem_fun(*this, &FileCatalog::zoomOut)); zoomOutButton->set_relief (Gtk::RELIEF_NONE); zoomOutButton->set_tooltip_markup (M("FILEBROWSER_ZOOMOUTHINT")); @@ -435,17 +435,14 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : buttonBar->pack_start (*zoomBox, Gtk::PACK_SHRINK); buttonBar->pack_start (*Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_VERTICAL)), Gtk::PACK_SHRINK); - //iRightArrow = new RTImage("right.png"); - //iRightArrow_red = new RTImage("right_red.png"); - // if it IS a single row toolbar if (options.FileBrowserToolbarSingleRow) { buttonBar->pack_start (*hbToolBar1, Gtk::PACK_EXPAND_WIDGET, 0); } tbRightPanel_1 = new Gtk::ToggleButton (); - iRightPanel_1_Show = new RTImage("panel-to-left.png"); - iRightPanel_1_Hide = new RTImage("panel-to-right.png"); + iRightPanel_1_Show = new RTImage("panel-to-left", Gtk::ICON_SIZE_LARGE_TOOLBAR); + iRightPanel_1_Hide = new RTImage("panel-to-right", Gtk::ICON_SIZE_LARGE_TOOLBAR); tbRightPanel_1->set_relief(Gtk::RELIEF_NONE); tbRightPanel_1->set_active (true); @@ -538,7 +535,7 @@ void FileCatalog::on_realize() { Gtk::Box::on_realize(); - Pango::FontDescription fontd = get_pango_context()->get_font_description (); + Pango::FontDescription fontd = get_style_context()->get_font(); fileBrowser->get_pango_context()->set_font_description (fontd); // batchQueue->get_pango_context()->set_font_description (fontd); } @@ -776,7 +773,8 @@ void FileCatalog::_refreshProgressBar () // create tab label once Gtk::Notebook *nb = (Gtk::Notebook *)(filepanel->get_parent()); Gtk::Grid* grid = Gtk::manage(new Gtk::Grid()); - progressImage = Gtk::manage(new RTImage("folder-closed.png")); + setExpandAlignProperties (grid, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); + progressImage = Gtk::manage(new RTImage("folder-closed", Gtk::ICON_SIZE_LARGE_TOOLBAR)); progressLabel = Gtk::manage(new Gtk::Label(M("MAIN_FRAME_FILEBROWSER"))); grid->attach_next_to(*progressImage, options.mainNBVertical ? Gtk::POS_TOP : Gtk::POS_RIGHT, 1, 1); grid->attach_next_to(*progressLabel, options.mainNBVertical ? Gtk::POS_TOP : Gtk::POS_RIGHT, 1, 1); @@ -790,14 +788,14 @@ void FileCatalog::_refreshProgressBar () } } if (!previewsToLoad) { - progressImage->changeImage("folder-closed.png"); + progressImage->set_from_icon_name("folder-closed", Gtk::ICON_SIZE_LARGE_TOOLBAR); int filteredCount = min(fileBrowser->getNumFiltered(), previewsLoaded); progressLabel->set_text(M("MAIN_FRAME_FILEBROWSER") + (filteredCount != previewsLoaded ? " [" + Glib::ustring::format(filteredCount) + "/" : " (") + Glib::ustring::format(previewsLoaded) + (filteredCount != previewsLoaded ? "]" : ")")); } else { - progressImage->changeImage("magnifier.png"); + progressImage->set_from_icon_name("magnifier", Gtk::ICON_SIZE_LARGE_TOOLBAR); progressLabel->set_text(M("MAIN_FRAME_FILEBROWSER") + " [" + Glib::ustring::format(previewsLoaded) + "/" + Glib::ustring::format(previewsToLoad) + "]" ); @@ -1397,11 +1395,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; @@ -2324,7 +2322,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); @@ -2412,7 +2410,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/filethumbnailbuttonset.cc b/rtgui/filethumbnailbuttonset.cc index bb64675a1..cb288b0c0 100644 --- a/rtgui/filethumbnailbuttonset.cc +++ b/rtgui/filethumbnailbuttonset.cc @@ -18,20 +18,20 @@ */ #include "filethumbnailbuttonset.h" -#include "rtimage.h" +#include "rtsurface.h" #include "multilangmgr.h" #include "lwbutton.h" #include "rtsurface.h" bool FileThumbnailButtonSet::iconsLoaded = false; -Cairo::RefPtr FileThumbnailButtonSet::rankIcon; -Cairo::RefPtr FileThumbnailButtonSet::gRankIcon; -Cairo::RefPtr FileThumbnailButtonSet::unRankIcon; -Cairo::RefPtr FileThumbnailButtonSet::trashIcon; -Cairo::RefPtr FileThumbnailButtonSet::unTrashIcon; -Cairo::RefPtr FileThumbnailButtonSet::processIcon; -std::array, 6> FileThumbnailButtonSet::colorLabelIcon; +std::shared_ptr FileThumbnailButtonSet::rankIcon = std::shared_ptr(nullptr); +std::shared_ptr FileThumbnailButtonSet::gRankIcon = std::shared_ptr(nullptr); +std::shared_ptr FileThumbnailButtonSet::unRankIcon = std::shared_ptr(nullptr); +std::shared_ptr FileThumbnailButtonSet::trashIcon = std::shared_ptr(nullptr); +std::shared_ptr FileThumbnailButtonSet::unTrashIcon = std::shared_ptr(nullptr); +std::shared_ptr FileThumbnailButtonSet::processIcon = std::shared_ptr(nullptr); +std::array, 6> FileThumbnailButtonSet::colorLabelIcon; Glib::ustring FileThumbnailButtonSet::processToolTip; Glib::ustring FileThumbnailButtonSet::unrankToolTip; @@ -44,18 +44,18 @@ FileThumbnailButtonSet::FileThumbnailButtonSet (FileBrowserEntry* myEntry) { if (!iconsLoaded) { - unRankIcon = Cairo::RefPtr(new RTSurface("star-hollow-narrow.png")); - rankIcon = Cairo::RefPtr(new RTSurface("star-gold-narrow.png")); - gRankIcon = Cairo::RefPtr(new RTSurface("star-narrow.png")); - trashIcon = Cairo::RefPtr(new RTSurface("trash-small.png")); - unTrashIcon = Cairo::RefPtr(new RTSurface("trash-remove-small.png")); - processIcon = Cairo::RefPtr(new RTSurface("gears-small.png")); - colorLabelIcon[0] = Cairo::RefPtr(new RTSurface("circle-empty-gray-small.png")); - colorLabelIcon[1] = Cairo::RefPtr(new RTSurface("circle-red-small.png")); - colorLabelIcon[2] = Cairo::RefPtr(new RTSurface("circle-yellow-small.png")); - colorLabelIcon[3] = Cairo::RefPtr(new RTSurface("circle-green-small.png")); - colorLabelIcon[4] = Cairo::RefPtr(new RTSurface("circle-blue-small.png")); - colorLabelIcon[5] = Cairo::RefPtr(new RTSurface("circle-purple-small.png")); + unRankIcon = std::shared_ptr(new RTSurface("star-hollow-narrow", Gtk::ICON_SIZE_BUTTON)); + rankIcon = std::shared_ptr(new RTSurface("star-gold-narrow", Gtk::ICON_SIZE_BUTTON)); + gRankIcon = std::shared_ptr(new RTSurface("star-narrow", Gtk::ICON_SIZE_BUTTON)); + trashIcon = std::shared_ptr(new RTSurface("trash-small", Gtk::ICON_SIZE_BUTTON)); + unTrashIcon = std::shared_ptr(new RTSurface("trash-remove-small", Gtk::ICON_SIZE_BUTTON)); + processIcon = std::shared_ptr(new RTSurface("gears-small", Gtk::ICON_SIZE_BUTTON)); + colorLabelIcon[0] = std::shared_ptr(new RTSurface("circle-empty-gray-small", Gtk::ICON_SIZE_BUTTON)); + colorLabelIcon[1] = std::shared_ptr(new RTSurface("circle-red-small", Gtk::ICON_SIZE_BUTTON)); + colorLabelIcon[2] = std::shared_ptr(new RTSurface("circle-yellow-small", Gtk::ICON_SIZE_BUTTON)); + colorLabelIcon[3] = std::shared_ptr(new RTSurface("circle-green-small", Gtk::ICON_SIZE_BUTTON)); + colorLabelIcon[4] = std::shared_ptr(new RTSurface("circle-blue-small", Gtk::ICON_SIZE_BUTTON)); + colorLabelIcon[5] = std::shared_ptr(new RTSurface("circle-purple-small", Gtk::ICON_SIZE_BUTTON)); processToolTip = M("FILEBROWSER_POPUPPROCESS"); unrankToolTip = M("FILEBROWSER_UNRANK_TOOLTIP"); diff --git a/rtgui/filethumbnailbuttonset.h b/rtgui/filethumbnailbuttonset.h index 868d3b58a..af6d1321d 100644 --- a/rtgui/filethumbnailbuttonset.h +++ b/rtgui/filethumbnailbuttonset.h @@ -34,14 +34,14 @@ class FileThumbnailButtonSet : static bool iconsLoaded; public: - static Cairo::RefPtr rankIcon; - static Cairo::RefPtr gRankIcon; - static Cairo::RefPtr unRankIcon; - static Cairo::RefPtr trashIcon; - static Cairo::RefPtr unTrashIcon; - static Cairo::RefPtr processIcon; + static std::shared_ptr rankIcon; + static std::shared_ptr gRankIcon; + static std::shared_ptr unRankIcon; + static std::shared_ptr trashIcon; + static std::shared_ptr unTrashIcon; + static std::shared_ptr processIcon; - static std::array, 6> colorLabelIcon; + static std::array, 6> colorLabelIcon; static Glib::ustring processToolTip; static Glib::ustring unrankToolTip; diff --git a/rtgui/filmnegative.cc b/rtgui/filmnegative.cc index 4f1ae9311..8d894bece 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 + greenBalance(createBalanceAdjuster(this, M("TP_FILMNEGATIVE_GREENBALANCE"), -3.0, 3.0, 0.0, "circle-magenta-small", "circle-green-small")), // green balance + blueBalance(createBalanceAdjuster(this, M("TP_FILMNEGATIVE_BLUEBALANCE"), -3.0, 3.0, 0.0, "circle-blue-small", "circle-yellow-small")) // 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(); @@ -527,18 +500,18 @@ void FilmNegative::filmRefValuesChanged(const RGB &refInput, const RGB &refOutpu [this, refInput, refOutput]() -> bool { refInputValues = refInput; paramsUpgraded = true; - + disableListener(); - + refInputLabel->set_markup( Glib::ustring::compose(M("TP_FILMNEGATIVE_REF_LABEL"), fmt(refInputValues))); - + writeOutputSliders(refOutput); - + outputLevel->show(); blueBalance->show(); greenBalance->show(); - + enableListener(); return false; } @@ -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/filterpanel.cc b/rtgui/filterpanel.cc index c407b88d7..186dd68ce 100644 --- a/rtgui/filterpanel.cc +++ b/rtgui/filterpanel.cc @@ -19,11 +19,11 @@ #include "filterpanel.h" #include "multilangmgr.h" #include "../rtengine/rtengine.h" -#include "rtimage.h" +#include "rtsurface.h" using namespace rtengine; -FilterPanel::FilterPanel () : listener (nullptr) +FilterPanel::FilterPanel () : listener (nullptr), ornamentSurface(new RTSurface("ornament1.svg")) { set_orientation(Gtk::ORIENTATION_VERTICAL); @@ -138,7 +138,7 @@ FilterPanel::FilterPanel () : listener (nullptr) // add panel ending Gtk::Box* vboxpe = Gtk::manage (new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); Gtk::Separator* hseptpe = Gtk::manage (new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL)); - Gtk::Image* peImg = Gtk::manage (new RTImage("ornament1.png")); + Gtk::Image* peImg = Gtk::manage (new Gtk::Image(ornamentSurface->get())); vboxpe->pack_start(*hseptpe, Gtk::PACK_SHRINK, 4); vboxpe->pack_start(*peImg); pack_start(*vboxpe, Gtk::PACK_SHRINK, 0); diff --git a/rtgui/filterpanel.h b/rtgui/filterpanel.h index 77c2d063e..32592bbd0 100644 --- a/rtgui/filterpanel.h +++ b/rtgui/filterpanel.h @@ -22,6 +22,8 @@ #include "exiffiltersettings.h" +class RTSurface; + class FilterPanelListener { public: @@ -61,6 +63,8 @@ protected: ExifFilterSettings curefs; FilterPanelListener* listener; + std::unique_ptr ornamentSurface; + public: FilterPanel (); diff --git a/rtgui/flatcurveeditorsubgroup.cc b/rtgui/flatcurveeditorsubgroup.cc index 1cc3f5c14..0cf522c55 100644 --- a/rtgui/flatcurveeditorsubgroup.cc +++ b/rtgui/flatcurveeditorsubgroup.cc @@ -54,7 +54,7 @@ FlatCurveEditorSubGroup::FlatCurveEditorSubGroup (CurveEditorGroup* prt, Glib::u CPointsCurve = Gtk::manage (new MyFlatCurve ()); CPointsCurve->setType (FCT_MinMaxCPoints); - + Gtk::Grid* CPointsCurveBox = Gtk::manage (new Gtk::Grid ()); CPointsCurveBox->get_style_context()->add_class("curve-curvebox"); CPointsCurveBox->add(*CPointsCurve); @@ -81,17 +81,17 @@ FlatCurveEditorSubGroup::FlatCurveEditorSubGroup (CurveEditorGroup* prt, Glib::u } editCPoints = Gtk::manage (new Gtk::ToggleButton()); - initButton(*editCPoints, Glib::ustring("crosshair-node-curve.png"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP"); + initButton(*editCPoints, Glib::ustring("crosshair-node-curve"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP"); editPointCPoints = Gtk::manage (new Gtk::ToggleButton ()); - initButton(*editPointCPoints, Glib::ustring("edit-point.png"), Gtk::ALIGN_START, false, "CURVEEDITOR_EDITPOINT_HINT"); + initButton(*editPointCPoints, Glib::ustring("edit-point"), Gtk::ALIGN_START, false, "CURVEEDITOR_EDITPOINT_HINT"); copyCPoints = Gtk::manage (new Gtk::Button ()); - initButton(*copyCPoints, Glib::ustring("copy.png"), Gtk::ALIGN_END, true); + initButton(*copyCPoints, Glib::ustring("copy"), Gtk::ALIGN_END, true); pasteCPoints = Gtk::manage (new Gtk::Button ()); - initButton(*pasteCPoints, Glib::ustring("paste.png"), Gtk::ALIGN_END, false); + initButton(*pasteCPoints, Glib::ustring("paste"), Gtk::ALIGN_END, false); loadCPoints = Gtk::manage (new Gtk::Button ()); - initButton(*loadCPoints, Glib::ustring("folder-open.png"), Gtk::ALIGN_END, false); + initButton(*loadCPoints, Glib::ustring("folder-open"), Gtk::ALIGN_END, false); saveCPoints = Gtk::manage (new Gtk::Button ()); - initButton(*saveCPoints, Glib::ustring("save.png"), Gtk::ALIGN_END, false); + initButton(*saveCPoints, Glib::ustring("save"), Gtk::ALIGN_END, false); CPointsbbox->attach_next_to(*editPointCPoints, sideStart, 1, 1); CPointsbbox->attach_next_to(*editCPoints, sideStart, 1, 1); @@ -206,7 +206,6 @@ void FlatCurveEditorSubGroup::editModeSwitchedOff () bool prevState = editCPointsConn.block(true); editCPoints->set_active(false); CPointsCurve->pipetteMouseOver(nullptr, nullptr, 0); - CPointsCurve->setDirty(true); if (!prevState) { editCPointsConn.block(false); @@ -220,7 +219,6 @@ void FlatCurveEditorSubGroup::pipetteMouseOver(EditDataProvider *provider, int m switch((FlatCurveType)(curveEditor->curveType->getSelected())) { case (FCT_MinMaxCPoints): CPointsCurve->pipetteMouseOver(curveEditor, provider, modifierKey); - CPointsCurve->setDirty(true); break; default: // (DCT_Linear, DCT_Unchanged) @@ -238,7 +236,6 @@ bool FlatCurveEditorSubGroup::pipetteButton1Pressed(EditDataProvider *provider, switch((FlatCurveType)(curveEditor->curveType->getSelected())) { case (FCT_MinMaxCPoints): isDragging = CPointsCurve->pipetteButton1Pressed(provider, modifierKey); - CPointsCurve->setDirty(true); break; default: // (DCT_Linear, DCT_Unchanged) @@ -256,7 +253,6 @@ void FlatCurveEditorSubGroup::pipetteButton1Released(EditDataProvider *provider) switch((FlatCurveType)(curveEditor->curveType->getSelected())) { case (FCT_MinMaxCPoints): CPointsCurve->pipetteButton1Released(provider); - CPointsCurve->setDirty(true); break; default: // (DCT_Linear, DCT_Unchanged) @@ -272,7 +268,6 @@ void FlatCurveEditorSubGroup::pipetteDrag(EditDataProvider *provider, int modifi switch((FlatCurveType)(curveEditor->curveType->getSelected())) { case (FCT_MinMaxCPoints): CPointsCurve->pipetteDrag(provider, modifierKey); - CPointsCurve->setDirty(true); break; default: // (DCT_Linear, DCT_Unchanged) @@ -441,7 +436,6 @@ void FlatCurveEditorSubGroup::loadPressed () if (p[0] == (double)(FCT_MinMaxCPoints)) { CPointsCurve->setPoints (p); - CPointsCurve->queue_draw (); CPointsCurve->notifyListener (); } } @@ -481,7 +475,6 @@ void FlatCurveEditorSubGroup::pastePressed () switch (type) { case FCT_MinMaxCPoints: // min/max control points CPointsCurve->setPoints (curve); - CPointsCurve->queue_draw (); CPointsCurve->notifyListener (); break; diff --git a/rtgui/flatfield.cc b/rtgui/flatfield.cc index 21cdb4315..74f313080 100644 --- a/rtgui/flatfield.cc +++ b/rtgui/flatfield.cc @@ -43,7 +43,7 @@ FlatField::FlatField () : FoldableToolPanel(this, TOOL_NAME, M("TP_FLATFIELD_LAB bindCurrentFolder (*flatFieldFile, options.lastFlatfieldDir); ffLabel = Gtk::manage(new Gtk::Label(M("GENERAL_FILE"))); flatFieldFileReset = Gtk::manage(new Gtk::Button()); - flatFieldFileReset->set_image (*Gtk::manage(new RTImage ("cancel-small.png"))); + flatFieldFileReset->set_image (*Gtk::manage(new RTImage ("cancel-small", Gtk::ICON_SIZE_BUTTON))); hbff->pack_start(*ffLabel, Gtk::PACK_SHRINK); hbff->pack_start(*flatFieldFile); hbff->pack_start(*flatFieldFileReset, Gtk::PACK_SHRINK); @@ -445,7 +445,7 @@ void FlatField::setGainMap(bool enabled) { flatFieldFromMetaData->set_sensitive(enabled); if (!enabled) { idle_register.add( - [this, enabled]() -> bool + [this]() -> bool { disableListener(); flatFieldFromMetaData->setValue(false); diff --git a/rtgui/gradient.cc b/rtgui/gradient.cc index 26be51975..98d5eb8d6 100644 --- a/rtgui/gradient.cc +++ b/rtgui/gradient.cc @@ -33,7 +33,7 @@ Gradient::Gradient () : FoldableToolPanel(this, TOOL_NAME, M("TP_GRADIENT_LABEL" editHBox = Gtk::manage (new Gtk::Box()); edit = Gtk::manage (new Gtk::ToggleButton()); edit->get_style_context()->add_class("independent"); - edit->add (*Gtk::manage (new RTImage ("crosshair-adjust.png"))); + edit->add (*Gtk::manage (new RTImage ("crosshair-adjust", Gtk::ICON_SIZE_BUTTON))); edit->set_tooltip_text(M("EDIT_OBJECT_TOOLTIP")); editConn = edit->signal_toggled().connect( sigc::mem_fun(*this, &Gradient::editToggled) ); editHBox->pack_start(*edit, Gtk::PACK_SHRINK, 0); @@ -166,8 +166,8 @@ void Gradient::updateGeometry(const int centerX, const int centerY, const double int imW=0; int imH=0; - - + + if (fullWidth != -1 && fullHeight != -1) { imW = fullWidth; imH = fullHeight; diff --git a/rtgui/guiutils.cc b/rtgui/guiutils.cc index 18b82fe36..974cd36ec 100644 --- a/rtgui/guiutils.cc +++ b/rtgui/guiutils.cc @@ -23,6 +23,7 @@ #include "../rtengine/utils.h" #include "../rtengine/procparams.h" #include "rtimage.h" +#include "rtscalable.h" #include "multilangmgr.h" #include @@ -31,12 +32,6 @@ using namespace std; -Glib::RefPtr MyExpander::inconsistentImage; -Glib::RefPtr MyExpander::enabledImage; -Glib::RefPtr MyExpander::disabledImage; -Glib::RefPtr MyExpander::openedImage; -Glib::RefPtr MyExpander::closedImage; - IdleRegister::~IdleRegister() { destroy(); @@ -82,59 +77,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) { @@ -184,13 +126,14 @@ Gtk::Border getPadding(const Glib::RefPtr style) return padding; } - int s = (double)RTScalable::getScale(); padding = style->get_padding(); - if (s > 1) { - padding.set_left(padding.get_left() * s); - padding.set_right(padding.get_right() * s); - padding.set_top(padding.get_top() * s); - padding.set_bottom(padding.get_bottom() * s); + + if (RTScalable::getGlobalScale() > 1.0) { + // Scale pixel border size based on DPI and Scale + padding.set_left(RTScalable::scalePixelSize(padding.get_left())); + padding.set_right(RTScalable::scalePixelSize(padding.get_right())); + padding.set_top(RTScalable::scalePixelSize(padding.get_top())); + padding.set_bottom(RTScalable::scalePixelSize(padding.get_bottom())); } return padding; @@ -589,27 +532,12 @@ void ExpanderBox::hideBox() Gtk::EventBox::hide(); } -void MyExpander::init() -{ - if (!inconsistentImage) { // if one is null, all are null - inconsistentImage = Glib::RefPtr(new RTImage("power-inconsistent-small.png")); - enabledImage = Glib::RefPtr(new RTImage("power-on-small.png")); - disabledImage = Glib::RefPtr(new RTImage("power-off-small.png")); - openedImage = Glib::RefPtr(new RTImage("expander-open-small.png")); - closedImage = Glib::RefPtr(new RTImage("expander-closed-small.png")); - } -} - -void MyExpander::cleanup() -{ - inconsistentImage.reset(); - enabledImage.reset(); - disabledImage.reset(); - openedImage.reset(); - closedImage.reset(); -} - MyExpander::MyExpander(bool useEnabled, Gtk::Widget* titleWidget) : + inconsistentImage("power-inconsistent-small"), + enabledImage("power-on-small"), + disabledImage("power-off-small"), + openedImage("expander-open-small"), + closedImage("expander-closed-small"), enabled(false), inconsistent(false), flushEvent(false), expBox(nullptr), child(nullptr), headerWidget(nullptr), statusImage(nullptr), label(nullptr), useEnabled(useEnabled) @@ -666,6 +594,11 @@ MyExpander::MyExpander(bool useEnabled, Gtk::Widget* titleWidget) : } MyExpander::MyExpander(bool useEnabled, Glib::ustring titleLabel) : + inconsistentImage("power-inconsistent-small"), + enabledImage("power-on-small"), + disabledImage("power-off-small"), + openedImage("expander-open-small"), + closedImage("expander-closed-small"), enabled(false), inconsistent(false), flushEvent(false), expBox(nullptr), child(nullptr), headerWidget(nullptr), label(nullptr), useEnabled(useEnabled) @@ -807,13 +740,13 @@ void MyExpander::set_inconsistent(bool isInconsistent) if (useEnabled) { if (isInconsistent) { - statusImage->set(inconsistentImage->get_surface()); + statusImage->set_from_icon_name(inconsistentImage); } else { if (enabled) { - statusImage->set(enabledImage->get_surface()); + statusImage->set_from_icon_name(enabledImage); get_style_context()->add_class("enabledTool"); } else { - statusImage->set(disabledImage->get_surface()); + statusImage->set_from_icon_name(disabledImage); get_style_context()->remove_class("enabledTool"); } } @@ -840,7 +773,7 @@ void MyExpander::setEnabled(bool isEnabled) enabled = false; if (!inconsistent) { - statusImage->set(disabledImage->get_surface()); + statusImage->set_from_icon_name(disabledImage); get_style_context()->remove_class("enabledTool"); message.emit(); } @@ -848,7 +781,7 @@ void MyExpander::setEnabled(bool isEnabled) enabled = true; if (!inconsistent) { - statusImage->set(enabledImage->get_surface()); + statusImage->set_from_icon_name(enabledImage); get_style_context()->add_class("enabledTool"); message.emit(); } @@ -879,9 +812,9 @@ void MyExpander::set_expanded( bool expanded ) if (!useEnabled) { if (expanded ) { - statusImage->set(openedImage->get_surface()); + statusImage->set_from_icon_name(openedImage); } else { - statusImage->set(closedImage->get_surface()); + statusImage->set_from_icon_name(closedImage); } } @@ -924,9 +857,9 @@ bool MyExpander::on_toggle(GdkEventButton* event) if (!useEnabled) { if (isVisible) { - statusImage->set(closedImage->get_surface()); + statusImage->set_from_icon_name(closedImage); } else { - statusImage->set(openedImage->get_surface()); + statusImage->set_from_icon_name(openedImage); } } @@ -951,11 +884,11 @@ bool MyExpander::on_enabled_change(GdkEventButton* event) if (event->button == 1) { if (enabled) { enabled = false; - statusImage->set(disabledImage->get_surface()); + statusImage->set_from_icon_name(disabledImage); get_style_context()->remove_class("enabledTool"); } else { enabled = true; - statusImage->set(enabledImage->get_surface()); + statusImage->set_from_icon_name(enabledImage); get_style_context()->add_class("enabledTool"); } @@ -1019,17 +952,17 @@ bool MyScrolledWindow::on_scroll_event (GdkEventScroll* event) void MyScrolledWindow::get_preferred_width_vfunc (int &minimum_width, int &natural_width) const { - natural_width = minimum_width = 100 * RTScalable::getScale(); + natural_width = minimum_width = RTScalable::scalePixelSize(100); } void MyScrolledWindow::get_preferred_height_vfunc (int &minimum_height, int &natural_height) const { - natural_height = minimum_height = 50 * RTScalable::getScale(); + natural_height = minimum_height = RTScalable::scalePixelSize(50); } void MyScrolledWindow::get_preferred_height_for_width_vfunc (int width, int &minimum_height, int &natural_height) const { - natural_height = minimum_height = 50 * RTScalable::getScale(); + natural_height = minimum_height = RTScalable::scalePixelSize(50); } /* @@ -1108,7 +1041,7 @@ void MyScrolledToolbar::get_preferred_height_vfunc (int &minimumHeight, int &nat MyComboBoxText::MyComboBoxText (bool has_entry) : Gtk::ComboBoxText(has_entry) { - minimumWidth = naturalWidth = 70; + minimumWidth = naturalWidth = RTScalable::scalePixelSize(70); Gtk::CellRendererText* cellRenderer = dynamic_cast(get_first_cell()); cellRenderer->property_ellipsize() = Pango::ELLIPSIZE_MIDDLE; add_events(Gdk::SCROLL_MASK|Gdk::SMOOTH_SCROLL_MASK); @@ -1132,12 +1065,12 @@ bool MyComboBoxText::on_scroll_event (GdkEventScroll* event) void MyComboBoxText::setPreferredWidth (int minimum_width, int natural_width) { if (natural_width == -1 && minimum_width == -1) { - naturalWidth = minimumWidth = 70 * RTScalable::getScale(); + naturalWidth = minimumWidth = RTScalable::scalePixelSize(70); } else if (natural_width == -1) { naturalWidth = minimumWidth = minimum_width; } else if (minimum_width == -1) { naturalWidth = natural_width; - minimumWidth = rtengine::max(naturalWidth / 2, 20); + minimumWidth = rtengine::max(naturalWidth / 2, RTScalable::scalePixelSize(20)); minimumWidth = rtengine::min(naturalWidth, minimumWidth); } else { naturalWidth = natural_width; @@ -1147,19 +1080,20 @@ void MyComboBoxText::setPreferredWidth (int minimum_width, int natural_width) void MyComboBoxText::get_preferred_width_vfunc (int &minimum_width, int &natural_width) const { - natural_width = rtengine::max(naturalWidth, 10 * RTScalable::getScale()); - minimum_width = rtengine::max(minimumWidth, 10 * RTScalable::getScale()); + natural_width = rtengine::max(naturalWidth, RTScalable::scalePixelSize(10)); + minimum_width = rtengine::max(minimumWidth, RTScalable::scalePixelSize(10)); } + void MyComboBoxText::get_preferred_width_for_height_vfunc (int height, int &minimum_width, int &natural_width) const { - natural_width = rtengine::max(naturalWidth, 10 * RTScalable::getScale()); - minimum_width = rtengine::max(minimumWidth, 10 * RTScalable::getScale()); + natural_width = rtengine::max(naturalWidth, RTScalable::scalePixelSize(10)); + minimum_width = rtengine::max(minimumWidth, RTScalable::scalePixelSize(10)); } MyComboBox::MyComboBox () { - minimumWidth = naturalWidth = 70 * RTScalable::getScale(); + minimumWidth = naturalWidth = RTScalable::scalePixelSize(70); } bool MyComboBox::on_scroll_event (GdkEventScroll* event) @@ -1178,12 +1112,12 @@ bool MyComboBox::on_scroll_event (GdkEventScroll* event) void MyComboBox::setPreferredWidth (int minimum_width, int natural_width) { if (natural_width == -1 && minimum_width == -1) { - naturalWidth = minimumWidth = 70 * RTScalable::getScale(); + naturalWidth = minimumWidth = RTScalable::scalePixelSize(70); } else if (natural_width == -1) { naturalWidth = minimumWidth = minimum_width; } else if (minimum_width == -1) { naturalWidth = natural_width; - minimumWidth = rtengine::max(naturalWidth / 2, 20); + minimumWidth = rtengine::max(naturalWidth / 2, RTScalable::scalePixelSize(20)); minimumWidth = rtengine::min(naturalWidth, minimumWidth); } else { naturalWidth = natural_width; @@ -1193,13 +1127,14 @@ void MyComboBox::setPreferredWidth (int minimum_width, int natural_width) void MyComboBox::get_preferred_width_vfunc (int &minimum_width, int &natural_width) const { - natural_width = rtengine::max(naturalWidth, 10 * RTScalable::getScale()); - minimum_width = rtengine::max(minimumWidth, 10 * RTScalable::getScale()); + natural_width = rtengine::max(naturalWidth, RTScalable::scalePixelSize(10)); + minimum_width = rtengine::max(minimumWidth, RTScalable::scalePixelSize(10)); } + void MyComboBox::get_preferred_width_for_height_vfunc (int height, int &minimum_width, int &natural_width) const { - natural_width = rtengine::max(naturalWidth, 10 * RTScalable::getScale()); - minimum_width = rtengine::max(minimumWidth, 10 * RTScalable::getScale()); + natural_width = rtengine::max(naturalWidth, RTScalable::scalePixelSize(10)); + minimum_width = rtengine::max(minimumWidth, RTScalable::scalePixelSize(10)); } MySpinButton::MySpinButton () @@ -1299,23 +1234,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", Gtk::ICON_SIZE_BUTTON)); +} + +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 +1437,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) { @@ -1485,19 +1463,71 @@ bool MyFileChooserButton::on_scroll_event (GdkEventScroll* event) void MyFileChooserButton::get_preferred_width_vfunc (int &minimum_width, int &natural_width) const { - minimum_width = natural_width = 35 * RTScalable::getScale(); + minimum_width = natural_width = RTScalable::scalePixelSize(35); } + void MyFileChooserButton::get_preferred_width_for_height_vfunc (int height, int &minimum_width, int &natural_width) const { - minimum_width = natural_width = 35 * RTScalable::getScale(); + minimum_width = natural_width = RTScalable::scalePixelSize(35); } +class MyFileChooserEntry::Impl +{ +public: + Gtk::Entry entry; + Gtk::Button file_chooser_button; +}; -TextOrIcon::TextOrIcon (const Glib::ustring &fname, const Glib::ustring &labelTx, const Glib::ustring &tooltipTx) + +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 &icon_name, const Glib::ustring &labelTx, const Glib::ustring &tooltipTx) { - RTImage *img = Gtk::manage(new RTImage(fname)); + RTImage *img = Gtk::manage(new RTImage(icon_name, Gtk::ICON_SIZE_LARGE_TOOLBAR)); pack_start(*img, Gtk::PACK_SHRINK, 0); set_tooltip_markup("" + labelTx + "\n" + tooltipTx); @@ -1513,19 +1543,19 @@ public: Gtk::Label* label; Impl(RTImage* image, Gtk::Label* label) : image(image), label(label) {} - static std::unique_ptr createImage(const Glib::ustring& fileName); + static std::unique_ptr createImage(const Glib::ustring& iconName); }; -std::unique_ptr ImageAndLabel::Impl::createImage(const Glib::ustring& fileName) +std::unique_ptr ImageAndLabel::Impl::createImage(const Glib::ustring& iconName) { - if (fileName.empty()) { + if (iconName.empty()) { return nullptr; } - return std::unique_ptr(new RTImage(fileName)); + return std::unique_ptr(new RTImage(iconName, Gtk::ICON_SIZE_LARGE_TOOLBAR)); } -ImageAndLabel::ImageAndLabel(const Glib::ustring& label, const Glib::ustring& imageFileName) : - ImageAndLabel(label, Gtk::manage(Impl::createImage(imageFileName).release())) +ImageAndLabel::ImageAndLabel(const Glib::ustring& label, const Glib::ustring& iconName) : + ImageAndLabel(label, Gtk::manage(Impl::createImage(iconName).release())) { } @@ -1561,15 +1591,15 @@ private: std::unique_ptr widget; public: - Impl(const Glib::ustring &label, const Glib::ustring &imageFileName) : - widget(new ImageAndLabel(label, imageFileName)) {} + Impl(const Glib::ustring &label, const Glib::ustring &iconName) : + widget(new ImageAndLabel(label, iconName)) {} Impl(const Glib::ustring &label, RTImage *itemImage) : widget(new ImageAndLabel(label, itemImage)) {} ImageAndLabel* getWidget() const { return widget.get(); } }; -MyImageMenuItem::MyImageMenuItem(const Glib::ustring& label, const Glib::ustring& imageFileName) : - pimpl(new Impl(label, imageFileName)) +MyImageMenuItem::MyImageMenuItem(const Glib::ustring& label, const Glib::ustring& iconName) : + pimpl(new Impl(label, iconName)) { add(*(pimpl->getWidget())); } @@ -1612,18 +1642,18 @@ const Gtk::Label* MyRadioImageMenuItem::getLabel() const return pimpl->getWidget()->getLabel(); } -MyProgressBar::MyProgressBar(int width) : w(rtengine::max(width, 10 * RTScalable::getScale())) {} -MyProgressBar::MyProgressBar() : w(200 * RTScalable::getScale()) {} +MyProgressBar::MyProgressBar(int width) : w(rtengine::max(width, RTScalable::scalePixelSize(10))) {} +MyProgressBar::MyProgressBar() : w(RTScalable::scalePixelSize(200)) {} void MyProgressBar::setPreferredWidth(int width) { - w = rtengine::max(width, 10 * RTScalable::getScale()); + w = rtengine::max(width, RTScalable::scalePixelSize(10)); } void MyProgressBar::get_preferred_width_vfunc (int &minimum_width, int &natural_width) const { - minimum_width = rtengine::max(w / 2, 50 * RTScalable::getScale()); - natural_width = rtengine::max(w, 50 * RTScalable::getScale()); + minimum_width = rtengine::max(w / 2, RTScalable::scalePixelSize(50)); + natural_width = rtengine::max(w, RTScalable::scalePixelSize(50)); } void MyProgressBar::get_preferred_width_for_height_vfunc (int height, int &minimum_width, int &natural_width) const @@ -1923,3 +1953,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_from_icon_name("color-picker-small"); + 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..e8e7d7930 100644 --- a/rtgui/guiutils.h +++ b/rtgui/guiutils.h @@ -203,11 +203,11 @@ public: typedef sigc::signal type_signal_enabled_toggled; private: type_signal_enabled_toggled message; - static Glib::RefPtr inconsistentImage; /// "inconsistent" image, displayed when useEnabled is true ; in this case, nothing will tell that an expander is opened/closed - static Glib::RefPtr enabledImage; /// "enabled" image, displayed when useEnabled is true ; in this case, nothing will tell that an expander is opened/closed - static Glib::RefPtr disabledImage; /// "disabled" image, displayed when useEnabled is true ; in this case, nothing will tell that an expander is opened/closed - static Glib::RefPtr openedImage; /// "opened" image, displayed when useEnabled is false - static Glib::RefPtr closedImage; /// "closed" image, displayed when useEnabled is false + const Glib::ustring inconsistentImage; /// "inconsistent" image, displayed when useEnabled is true ; in this case, nothing will tell that an expander is opened/closed + const Glib::ustring enabledImage; /// "enabled" image, displayed when useEnabled is true ; in this case, nothing will tell that an expander is opened/closed + const Glib::ustring disabledImage; /// "disabled" image, displayed when useEnabled is true ; in this case, nothing will tell that an expander is opened/closed + const Glib::ustring openedImage; /// "opened" image, displayed when useEnabled is false + const Glib::ustring closedImage; /// "closed" image, displayed when useEnabled is false bool enabled; /// Enabled feature (default to true) bool inconsistent; /// True if the enabled button is inconsistent Gtk::EventBox *titleEvBox; /// EventBox of the title, to get a connector from it @@ -250,10 +250,6 @@ public: */ MyExpander(bool useEnabled, Gtk::Widget* titleWidget); - /// Initialize the class by loading the images - static void init(); - static void cleanup(); - Glib::SignalProxy1< bool, GdkEventButton* > signal_button_release_event() { return titleEvBox->signal_button_release_event(); @@ -396,34 +392,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 +406,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 +418,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; }; /** @@ -491,7 +514,7 @@ class TextOrIcon final : public Gtk::Box { public: - TextOrIcon (const Glib::ustring &filename, const Glib::ustring &labelTx, const Glib::ustring &tooltipTx); + TextOrIcon (const Glib::ustring &icon_name, const Glib::ustring &labelTx, const Glib::ustring &tooltipTx); }; /** @@ -503,7 +526,7 @@ class ImageAndLabel final : public Gtk::Box std::unique_ptr pimpl; public: - ImageAndLabel(const Glib::ustring& label, const Glib::ustring& imageFileName); + ImageAndLabel(const Glib::ustring& label, const Glib::ustring& iconName); ImageAndLabel(const Glib::ustring& label, RTImage* image); const RTImage* getImage() const; const Gtk::Label* getLabel() const; @@ -527,7 +550,7 @@ class MyImageMenuItem final : public Gtk::MenuItem, public MyImageMenuItemInterf std::unique_ptr pimpl; public: - MyImageMenuItem (const Glib::ustring& label, const Glib::ustring& imageFileName); + MyImageMenuItem (const Glib::ustring& label, const Glib::ustring& iconName); MyImageMenuItem (const Glib::ustring& label, RTImage* image); const RTImage *getImage () const; const Gtk::Label* getLabel() const override; @@ -689,7 +712,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 6bda0812e..6d866bdb7 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -22,10 +22,12 @@ #include "options.h" #include #include -#include "../rtengine/array2D.h" -#include "../rtengine/LUT.h" #include "rtimage.h" +#include "rtscalable.h" +#include "../rtengine/array2D.h" #include "../rtengine/color.h" +#include "../rtengine/improcfun.h" +#include "../rtengine/LUT.h" using namespace rtengine; @@ -34,31 +36,43 @@ constexpr float HistogramArea::MIN_BRIGHT; using ScopeType = Options::ScopeType; + +namespace +{ + +const rtengine::procparams::ColorManagementParams DEFAULT_CMP; + +} + // // // HistogramPanel HistogramPanel::HistogramPanel () : pointer_moved_delayed_call( - [this](bool validPos, const Glib::ustring &profile, const Glib::ustring &profileW, int r, int g, int b) + [this](bool validPos, const rtengine::procparams::ColorManagementParams *cmp, int r, int g, int b) { - bool update_hist_area; + bool update_hist_area = false, update_hist_rgb_area = false; if (!validPos) { // do something to un-show vertical bars if (histogramRGBArea) { - histogramRGBArea->updateBackBuffer(-1, -1, -1); + update_hist_rgb_area = histogramRGBArea->updatePointer(-1, -1, -1); } + update_hist_area = histogramArea->updatePointer(-1, -1, -1); } else { // do something to show vertical bars if (histogramRGBArea) { - histogramRGBArea->updateBackBuffer(r, g, b, profile, profileW); + update_hist_rgb_area = histogramRGBArea->updatePointer(r, g, b, cmp); } - update_hist_area = histogramArea->updatePointer(r, g, b, profile, profileW); + + update_hist_area = histogramArea->updatePointer(r, g, b, cmp); } - if (histogramRGBArea) { + + if (histogramRGBArea && update_hist_rgb_area) { histogramRGBArea->queue_draw(); } + if (update_hist_area) { histogramArea->queue_draw(); } @@ -114,30 +128,30 @@ HistogramPanel::HistogramPanel () : histogramRGBAreaHori->set_no_show_all(); histogramRGBAreaVert->set_no_show_all(); - redImage = new RTImage ("histogram-red-on-small.png"); - greenImage = new RTImage ("histogram-green-on-small.png"); - blueImage = new RTImage ("histogram-blue-on-small.png"); - valueImage = new RTImage ("histogram-silver-on-small.png"); - chroImage = new RTImage ("histogram-gold-on-small.png"); - barImage = new RTImage ("histogram-bar-on-small.png"); + redImage = new RTImage ("histogram-red-on-small", Gtk::ICON_SIZE_BUTTON); + greenImage = new RTImage ("histogram-green-on-small", Gtk::ICON_SIZE_BUTTON); + blueImage = new RTImage ("histogram-blue-on-small", Gtk::ICON_SIZE_BUTTON); + valueImage = new RTImage ("histogram-silver-on-small", Gtk::ICON_SIZE_BUTTON); + chroImage = new RTImage ("histogram-gold-on-small", Gtk::ICON_SIZE_BUTTON); + barImage = new RTImage ("histogram-bar-on-small", Gtk::ICON_SIZE_BUTTON); - redImage_g = new RTImage ("histogram-red-off-small.png"); - greenImage_g = new RTImage ("histogram-green-off-small.png"); - blueImage_g = new RTImage ("histogram-blue-off-small.png"); - valueImage_g = new RTImage ("histogram-silver-off-small.png"); - chroImage_g = new RTImage ("histogram-gold-off-small.png"); - barImage_g = new RTImage ("histogram-bar-off-small.png"); + redImage_g = new RTImage ("histogram-red-off-small", Gtk::ICON_SIZE_BUTTON); + greenImage_g = new RTImage ("histogram-green-off-small", Gtk::ICON_SIZE_BUTTON); + blueImage_g = new RTImage ("histogram-blue-off-small", Gtk::ICON_SIZE_BUTTON); + valueImage_g = new RTImage ("histogram-silver-off-small", Gtk::ICON_SIZE_BUTTON); + chroImage_g = new RTImage ("histogram-gold-off-small", Gtk::ICON_SIZE_BUTTON); + barImage_g = new RTImage ("histogram-bar-off-small", Gtk::ICON_SIZE_BUTTON); - mode0Image = new RTImage ("histogram-mode-linear-small.png"); - mode1Image = new RTImage ("histogram-mode-logx-small.png"); - mode2Image = new RTImage ("histogram-mode-logxy-small.png"); + mode0Image = new RTImage ("histogram-mode-linear-small", Gtk::ICON_SIZE_BUTTON); + mode1Image = new RTImage ("histogram-mode-logx-small", Gtk::ICON_SIZE_BUTTON); + mode2Image = new RTImage ("histogram-mode-logxy-small", Gtk::ICON_SIZE_BUTTON); - Gtk::Image* histImage = Gtk::manage(new RTImage("histogram-type-histogram-small.png")); - Gtk::Image* histRawImage = Gtk::manage(new RTImage("histogram-type-histogram-raw-small.png")); - Gtk::Image* paradeImage = Gtk::manage(new RTImage("histogram-type-parade-small.png")); - Gtk::Image* waveImage = Gtk::manage(new RTImage("histogram-type-waveform-small.png")); - Gtk::Image* vectHcImage = Gtk::manage(new RTImage("histogram-type-vectorscope-hc-small.png")); - Gtk::Image* vectHsImage = Gtk::manage(new RTImage("histogram-type-vectorscope-hs-small.png")); + Gtk::Image* histImage = Gtk::manage(new RTImage("histogram-type-histogram-small", Gtk::ICON_SIZE_BUTTON)); + Gtk::Image* histRawImage = Gtk::manage(new RTImage("histogram-type-histogram-raw-small", Gtk::ICON_SIZE_BUTTON)); + Gtk::Image* paradeImage = Gtk::manage(new RTImage("histogram-type-parade-small", Gtk::ICON_SIZE_BUTTON)); + Gtk::Image* waveImage = Gtk::manage(new RTImage("histogram-type-waveform-small", Gtk::ICON_SIZE_BUTTON)); + Gtk::Image* vectHcImage = Gtk::manage(new RTImage("histogram-type-vectorscope-hc-small", Gtk::ICON_SIZE_BUTTON)); + Gtk::Image* vectHsImage = Gtk::manage(new RTImage("histogram-type-vectorscope-hs-small", Gtk::ICON_SIZE_BUTTON)); showRed = Gtk::manage (new Gtk::ToggleButton ()); showGreen = Gtk::manage (new Gtk::ToggleButton ()); @@ -275,17 +289,17 @@ HistogramPanel::HistogramPanel () : case ScopeType::NONE: break; } - scopeOptions->set_image(*Gtk::manage(new RTImage("histogram-ellipsis-small.png"))); + scopeOptions->set_image(*Gtk::manage(new RTImage("histogram-ellipsis-small"))); showBAR->set_image (showBAR->get_active() ? *barImage : *barImage_g); - setExpandAlignProperties(showRed , false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); + setExpandAlignProperties(showRed, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); setExpandAlignProperties(showGreen, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); - setExpandAlignProperties(showBlue , false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); + setExpandAlignProperties(showBlue, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); setExpandAlignProperties(showValue, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); - setExpandAlignProperties(showChro , false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); - setExpandAlignProperties(showMode , false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); + setExpandAlignProperties(showChro, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); + setExpandAlignProperties(showMode, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); setExpandAlignProperties(scopeOptions, false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - setExpandAlignProperties(showBAR , false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); + setExpandAlignProperties(showBAR, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); setExpandAlignProperties(scopeOptions, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); setExpandAlignProperties(scopeHistBtn, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); setExpandAlignProperties(scopeHistRawBtn, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); @@ -360,9 +374,13 @@ HistogramPanel::HistogramPanel () : optionButtons->set_visible(options.histogramShowOptionButtons); type_changed(); - updateHistAreaOptions(); + + // Update histogramArea internal parameters from options + histogramArea->updateFromOptions(); + if (histogramRGBArea) { - updateHistRGBAreaOptions(); + // Update histogramRGBArea internal parameters from options + histogramRGBArea->updateFromOptions(); } brightness_changed_connection = histogramArea->getBrighnessChangedSignal().connect(sigc::mem_fun(*this, &HistogramPanel::brightnessUpdated)); @@ -391,7 +409,6 @@ HistogramPanel::~HistogramPanel () delete valueImage_g; delete chroImage_g; delete barImage_g; - } void HistogramPanel::showRGBBar() @@ -400,15 +417,6 @@ void HistogramPanel::showRGBBar() histogramRGBArea == histogramRGBAreaHori.get() && showBAR->get_active()); histogramRGBAreaVert->set_visible( histogramRGBArea == histogramRGBAreaVert.get() && showBAR->get_active()); - histogramRGBAreaHori->setShow(false); - histogramRGBAreaVert->setShow(false); - - if (!histogramRGBArea) { - return; - } - - setHistRGBInvalid(); - histogramRGBArea->setShow(showBAR->get_active()); } void HistogramPanel::resized (Gtk::Allocation& req) @@ -419,14 +427,15 @@ void HistogramPanel::resized (Gtk::Allocation& req) bool size_changed = old_height != req.get_height() || old_width != req.get_width(); - if (!histogramArea->updatePending() && size_changed) { - histogramArea->updateBackBuffer (); + // Set HistogramArea invalid + if (size_changed) { + histogramArea->updatePointer(-1, -1, -1); histogramArea->queue_draw (); } - // set histogramRGBArea invalid; + // Set HistogramRGBArea invalid if (histogramRGBArea && size_changed) { - histogramRGBArea->updateBackBuffer(-1, -1, -1); + histogramRGBArea->updatePointer(-1, -1, -1); histogramRGBArea->queue_draw (); } @@ -439,43 +448,65 @@ void HistogramPanel::resized (Gtk::Allocation& req) void HistogramPanel::red_toggled () { + // Update button image showRed->set_image(showRed->get_active() ? *redImage : *redImage_g); + // Update options value + options.histogramRed = showRed->get_active() ? true : false; + // Update drawing areas rgbv_toggled(); } + void HistogramPanel::green_toggled () { + // Update button image showGreen->set_image(showGreen->get_active() ? *greenImage : *greenImage_g); + // Update options value + options.histogramGreen = showGreen->get_active() ? true : false; + // Update drawing areas rgbv_toggled(); } + void HistogramPanel::blue_toggled () { + // Update button image showBlue->set_image(showBlue->get_active() ? *blueImage : *blueImage_g); + // Update options value + options.histogramBlue = showBlue->get_active() ? true : false; + // Update drawing areas rgbv_toggled(); } void HistogramPanel::value_toggled () { - removeIfThere(showValue, valueImage, false); - removeIfThere(showValue, valueImage_g, false); + // Update button image showValue->set_image(showValue->get_active() ? *valueImage : *valueImage_g); + // Update options value + options.histogramLuma = showValue->get_active() ? true : false; + // Update drawing areas rgbv_toggled(); } void HistogramPanel::chro_toggled () { - removeIfThere(showChro, chroImage, false); - removeIfThere(showChro, chroImage_g, false); + // Update button image showChro->set_image(showChro->get_active() ? *chroImage : *chroImage_g); + // Update options value + options.histogramChroma = showChro->get_active() ? true : false; + // Update drawing areas rgbv_toggled(); } void HistogramPanel::mode_released () { + // Update options value options.histogramDrawMode = (options.histogramDrawMode + 1) % 3; - if (options.histogramDrawMode == 0) + // Update button image + if (options.histogramDrawMode == 0) { showMode->set_image(*mode0Image); - else if (options.histogramDrawMode == 1) + } else if (options.histogramDrawMode == 1) { showMode->set_image(*mode1Image); - else + } else { showMode->set_image(*mode2Image); + } + // Update drawing areas rgbv_toggled(); } @@ -494,12 +525,15 @@ void HistogramPanel::brightnessUpdated(float brightness) void HistogramPanel::scopeOptionsToggled() { + // Update options value options.histogramShowOptionButtons = scopeOptions->get_active(); + // Show/hide secondary buttons column optionButtons->set_visible(scopeOptions->get_active()); } void HistogramPanel::type_selected(Gtk::RadioButton* button) { + // Get radio button value ScopeType new_type = ScopeType::NONE; if (button == scopeHistBtn) { @@ -516,19 +550,35 @@ void HistogramPanel::type_selected(Gtk::RadioButton* button) new_type = ScopeType::VECTORSCOPE_HS; } + // Do not update if selected radio button is identical if (new_type == options.histogramScopeType) { return; } + // Update options value options.histogramScopeType = new_type; - + // Update histogram panel GUI based on scope type type_changed(); - updateHistAreaOptions(); + if (histogramRGBArea) { - updateHistRGBAreaOptions(); + // Update histogramRGBArea internal parameters from options + histogramRGBArea->updateFromOptions(); + // Set pointer invalid for histogramRGBArea + histogramRGBArea->updatePointer(-1, -1, -1); + // Update drawing area + histogramRGBArea->queue_draw (); } - histogramArea->setDirty(true); - histogramArea->queue_draw(); + + // Update histogramArea internal parameters from options + histogramArea->updateFromOptions(); + // Set pointer invalid for histogramArea + histogramArea->updatePointer(-1, -1, -1); + // Update drawing area + // Note: No need to call queue_draw as an update of histogram data + // is requested in the type_changed function: queue_draw call will + // be performed in update function when updated histogram data are + // provided + // histogramArea->queue_draw(); } void HistogramPanel::type_changed() @@ -587,45 +637,50 @@ void HistogramPanel::type_changed() break; } + // Request histogram data update if (panel_listener) { - updateHistAreaOptions(); panel_listener->scopeTypeChanged(options.histogramScopeType); } + // Update histogram bar visibility showRGBBar(); } void HistogramPanel::bar_toggled () { + // Update button image showBAR->set_image(showBAR->get_active() ? *barImage : *barImage_g); + // Update options value + options.histogramBar = showBAR->get_active() ? true : false; + // Update drawing areas rgbv_toggled(); + // Update histogram bar visibility showRGBBar(); } void HistogramPanel::rgbv_toggled () { // Update Display - updateHistAreaOptions(); - histogramArea->updateBackBuffer (); + // Update histogramArea internal parameters from options + histogramArea->updateFromOptions(); + // Set pointer invalid for histogramArea + histogramArea->updatePointer(-1, -1, -1); + // Update drawing area histogramArea->queue_draw (); if (histogramRGBArea) { - updateHistRGBAreaOptions(); - histogramRGBArea->updateBackBuffer(-1, -1, -1); + // Update histogramRGBArea internal parameters from options + histogramRGBArea->updateFromOptions(); + // Set pointer invalid for histogramRGBArea + histogramRGBArea->updatePointer(-1, -1, -1); + // Update drawing area histogramRGBArea->queue_draw (); } } -void HistogramPanel::setHistRGBInvalid () +void HistogramPanel::pointerMoved (bool validPos, const rtengine::procparams::ColorManagementParams &cmp, int x, int y, int r, int g, int b, bool isRaw) { - // do something to un-show vertical bars - histogramRGBArea->updateBackBuffer(-1, -1, -1); - histogramRGBArea->queue_draw (); -} - -void HistogramPanel::pointerMoved (bool validPos, const Glib::ustring &profile, const Glib::ustring &profileW, int x, int y, int r, int g, int b, bool isRaw) -{ - pointer_moved_delayed_call(validPos, profile, profileW, r, g, b); + pointer_moved_delayed_call(validPos, &cmp, r, g, b); } /* @@ -683,32 +738,6 @@ void HistogramPanel::setPanelListener(HistogramPanelListener* listener) } } -void HistogramPanel::updateHistAreaOptions() -{ - histogramArea->updateOptions( - showRed->get_active(), - showGreen->get_active(), - showBlue->get_active(), - showValue->get_active(), - showChro->get_active(), - options.histogramDrawMode, - options.histogramScopeType, - showBAR->get_active() - ); -} - -void HistogramPanel::updateHistRGBAreaOptions() -{ - histogramRGBArea->updateOptions( - showRed->get_active(), - showGreen->get_active(), - showBlue->get_active(), - showValue->get_active(), - showChro->get_active(), - showBAR->get_active() - ); -} - // // // @@ -724,31 +753,19 @@ double HistogramScaling::log(double vsize, double val) // // HistogramRGBArea HistogramRGBArea::HistogramRGBArea () : - val(0), r(0), g(0), b(0), valid(false), - needRed(options.histogramRed), needGreen(options.histogramGreen), needBlue(options.histogramBlue), - needLuma(options.histogramLuma), needChroma(options.histogramChroma), - showMode(options.histogramBar), barDisplayed(options.histogramBar), parent(nullptr) + // Saved pointer parameters + r(-1), g(-1), b(-1), lab_L(0.f), lab_a(0.f), lab_b(0.f), pointerValid(false), + // Drawing options (initialized at options file values) + needRed(options.histogramRed), needGreen(options.histogramGreen), + needBlue(options.histogramBlue), needLuma(options.histogramLuma), + needChroma(options.histogramChroma), scopeType(options.histogramScopeType), + scaleMode(options.histogramDrawMode), showBar(options.histogramBar) { get_style_context()->add_class("drawingarea"); set_name("HistogramRGBArea"); - - harih = new HistogramRGBAreaIdleHelper; - harih->harea = this; - harih->destroyed = false; - harih->pending = 0; -} - -HistogramRGBArea::~HistogramRGBArea () -{ - idle_register.destroy(); - - if (harih->pending) { - harih->destroyed = true; - } else { - delete harih; - } } +HistogramRGBArea::~HistogramRGBArea () {} void HistogramRGBArea::getPreferredThickness(int& min_thickness, int& natural_thickness) const { @@ -760,21 +777,18 @@ void HistogramRGBArea::getPreferredThickness(int& min_thickness, int& natural_th void HistogramRGBArea::getPreferredLength(int& min_length, int& natural_length) const { - int s = RTScalable::getScale(); - min_length = 60 * s; - natural_length = 200 * s; + min_length = RTScalable::scalePixelSize(60); + natural_length = RTScalable::scalePixelSize(200); } void HistogramRGBArea::getPreferredThicknessForLength(int length, int& min_thickness, int& natural_thickness) const { int bThickness = length / 30; - int s = RTScalable::getScale(); - - if (bThickness > (10 * s)) { - bThickness = 10 * s; - } else if (bThickness < (5 * s)) { - bThickness = 5 * s; + if (bThickness > RTScalable::scalePixelSize(10)) { + bThickness = RTScalable::scalePixelSize(10); + } else if (bThickness < RTScalable::scalePixelSize(5)) { + bThickness = RTScalable::scalePixelSize(5); } min_thickness = bThickness; @@ -787,169 +801,139 @@ void HistogramRGBArea::getPreferredLengthForThickness(int thickness, int& min_le getPreferredLength(min_length, natural_length); } -bool HistogramRGBArea::getShow() +void HistogramRGBArea::updateDrawingArea (const ::Cairo::RefPtr< Cairo::Context> &cc) { - return(showMode); -} - -void HistogramRGBArea::setShow(bool show) -{ - showMode = show; -} - -void HistogramRGBArea::updateBackBuffer (int r, int g, int b, const Glib::ustring &profile, const Glib::ustring &profileW) -{ - if (!get_realized () || !showMode || !( - options.histogramScopeType == ScopeType::HISTOGRAM - || options.histogramScopeType == ScopeType::PARADE - || options.histogramScopeType == ScopeType::WAVEFORM - )) { + // Do not update drawing area if widget is not realized + if (!get_realized ()) { return; } - // Mostly not necessary, but should be in some case - GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected + // Do not update drawing area if bar is not visible + // (by user choice or according to scope type) + if (!showBar || scopeType == Options::ScopeType::HISTOGRAM_RAW || + scopeType == Options::ScopeType::VECTORSCOPE_HC || + scopeType == Options::ScopeType::VECTORSCOPE_HS) { + return; + } + + // Do not update drawing area if pointer is not valid + if (!pointerValid) { + return; + } + + // Note: updateDrawingArea is called by the on_draw function so its call does not need to be protected + // GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected Glib::RefPtr window = get_window(); int winx, winy, winw, winh; window->get_geometry(winx, winy, winw, winh); - double s = RTScalable::getScale(); + cc->set_operator (Cairo::OPERATOR_OVER); + cc->set_antialias(Cairo::ANTIALIAS_NONE); + cc->set_line_width (1.0); - // This will create or update the size of the BackBuffer::surface - setDrawRectangle(Cairo::FORMAT_ARGB32, 0, 0, winw, winh, true); - - if (surface) { - Cairo::RefPtr cc = Cairo::Context::create(surface); - - cc->set_source_rgba (0., 0., 0., 0.); - cc->set_operator (Cairo::OPERATOR_CLEAR); - cc->paint (); - cc->set_operator (Cairo::OPERATOR_OVER); - - cc->set_antialias(Cairo::ANTIALIAS_NONE); - cc->set_line_width (1.0 * s); - - if ( r != -1 && g != -1 && b != -1 ) { - if (needRed) { - // Red - cc->set_source_rgb(1.0, 0.0, 0.0); - drawBar(cc, r, 255.0, winw, winh, s); - } - - if (needGreen) { - // Green - cc->set_source_rgb(0.0, 1.0, 0.0); - drawBar(cc, g, 255.0, winw, winh, s); - } - - if (needBlue) { - // Blue - cc->set_source_rgb(0.0, 0.4, 1.0); - drawBar(cc, b, 255.0, winw, winh, s); - } - - if( - (needLuma || needChroma) - && (options.histogramScopeType == ScopeType::HISTOGRAM - || options.histogramScopeType == ScopeType::PARADE - || options.histogramScopeType == ScopeType::WAVEFORM) - ) { - float Lab_L, Lab_a, Lab_b; - rtengine::Color::rgb2lab01(profile, profileW, r / 255.f, g / 255.f, b / 255.f, Lab_L, Lab_a, Lab_b, options.rtSettings.HistogramWorking); - - if (needLuma) { - // Luma - cc->set_source_rgb(1.0, 1.0, 1.0); - drawBar(cc, Lab_L, 100.0, winw, winh, s); - } - - if (needChroma && options.histogramScopeType == ScopeType::HISTOGRAM) { - // Chroma - double chromaval = sqrt(Lab_a * Lab_a + Lab_b * Lab_b) / 1.8; - cc->set_source_rgb(0.9, 0.9, 0.0); - drawBar(cc, chromaval, 100.0, winw, winh, s); - } - } - } + if (needRed) { + // Red + cc->set_source_rgb(1.0, 0.0, 0.0); + drawBar(cc, r, 255.0, winw, winh); } - setDirty(false); + if (needGreen) { + // Green + cc->set_source_rgb(0.0, 1.0, 0.0); + drawBar(cc, g, 255.0, winw, winh); + } + + if (needBlue) { + // Blue + cc->set_source_rgb(0.0, 0.4, 1.0); + drawBar(cc, b, 255.0, winw, winh); + } + + if ((needLuma || needChroma) + && (scopeType == Options::ScopeType::HISTOGRAM + || scopeType == Options::ScopeType::PARADE + || scopeType == Options::ScopeType::WAVEFORM)) { + if (needLuma) { + // Luma + cc->set_source_rgb(1.0, 1.0, 1.0); + drawBar(cc, lab_L, 32768., winw, winh); + } + + if (needChroma && scopeType == Options::ScopeType::HISTOGRAM) { + // Chroma + double chromaval = sqrt(lab_a * lab_a + lab_b * lab_b) / (255. * 188); + cc->set_source_rgb(0.9, 0.9, 0.0); + drawBar(cc, chromaval, 1.0, winw, winh); + } + } } -void HistogramRGBArea::update (int valh, int rh, int gh, int bh) +bool HistogramRGBArea::updatePointer (const int new_r, const int new_g, const int new_b, const rtengine::procparams::ColorManagementParams *cmp) { + // Do not update pointer values if bar is not visible + // (by user choice or according to scope type) + if (!showBar || scopeType == Options::ScopeType::HISTOGRAM_RAW || + scopeType == Options::ScopeType::VECTORSCOPE_HC || + scopeType == Options::ScopeType::VECTORSCOPE_HS) { + return false; + } - if (valh) { - val = valh; - r = rh; - g = gh; - b = bh; - valid = true; + // Do not update pointer values if values are identical + if (r == new_r && g == new_g && b == new_b) { + return false; + } + + // Set pointer parameters to invalid if r = g = b = -1 + if (new_r == -1 || new_g == -1 || new_b == -1) { + r = b = g = -1; + lab_L = lab_a = lab_b = 0.; + pointerValid = false; } else { - valid = false; + r = new_r; + g = new_g; + b = new_b; + ImProcFunctions::rgb2lab( + static_cast(r), + static_cast(g), + static_cast(b), + lab_L, lab_a, lab_b, + cmp != nullptr ? *cmp : DEFAULT_CMP, + true); + pointerValid = true; } - harih->pending++; - - idle_register.add( - [this]() -> bool - { - if (harih->destroyed) { - if (harih->pending == 1) { - delete harih; - } else { - --harih->pending; - } - - return false; - } - - harih->harea->updateBackBuffer(-1, -1, -1); - harih->harea->queue_draw (); - - --harih->pending; - - return false; - } - ); + return true; } -void HistogramRGBArea::updateOptions (bool r, bool g, bool b, bool l, bool c, bool bar) +void HistogramRGBArea::updateFromOptions () { - - options.histogramRed = needRed = r; - options.histogramGreen = needGreen = g; - options.histogramBlue = needBlue = b; - options.histogramLuma = needLuma = l; - options.histogramChroma = needChroma = c; - options.histogramBar = showMode = bar; - + needRed = options.histogramRed; + needGreen = options.histogramGreen; + needBlue = options.histogramBlue; + needLuma = options.histogramLuma; + needChroma = options.histogramChroma; + scopeType = options.histogramScopeType; + scaleMode = options.histogramDrawMode; + showBar = options.histogramBar; } void HistogramRGBArea::on_realize () { - Gtk::DrawingArea::on_realize(); add_events(Gdk::BUTTON_PRESS_MASK); } bool HistogramRGBArea::on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr) { - const Glib::RefPtr style = get_style_context(); - style->render_background(cr, 0, 0, get_width(), get_height()); + style->render_background(cr, 0., 0., static_cast(get_width()), static_cast(get_height())); - // on_realize & updateBackBuffer have to be called before - if (surface) { - if (isDirty()) { // not sure this could happen... - updateBackBuffer(-1, -1, -1); - } + // Draw drawing area + // Note: As drawing area surface is updated inside on_draw function, hidpi is automatically supported + updateDrawingArea(cr); - copySurface(cr, NULL); - } - - style->render_frame (cr, 0, 0, get_width(), get_height()); + style->render_frame (cr, 0., 0., static_cast(get_width()), static_cast(get_height())); return true; } @@ -967,18 +951,22 @@ bool HistogramRGBArea::on_button_press_event (GdkEventButton* event) void HistogramRGBArea::factorChanged (double newFactor) { factor = newFactor; + // Request bar redraw (according to scope type) + if (scopeType == Options::ScopeType::HISTOGRAM) { + queue_draw(); + } } -void HistogramRGBAreaHori::drawBar(Cairo::RefPtr cc, double value, double max_value, int winw, int winh, double scale) +void HistogramRGBAreaHori::drawBar(const Cairo::RefPtr &cc, const double value, const double max_value, const int winw, const int winh) { double pos; if (options.histogramDrawMode < 2) { - pos = padding + value * (winw - padding * 2.0) / max_value + 0.5 * scale; + pos = padding + value * (winw - padding * 2.0) / max_value; } else { - pos = padding + HistogramScaling::log (max_value, value) * (winw - padding * 2.0) / max_value + 0.5 * scale; + pos = padding + HistogramScaling::log (max_value, value) * (winw - padding * 2.0) / max_value; } cc->move_to(pos, 0.0); - cc->line_to(pos, winh - 0.0); + cc->line_to(pos, static_cast(winh)); cc->stroke(); } @@ -1007,13 +995,13 @@ void HistogramRGBAreaHori::get_preferred_width_for_height_vfunc (int height, int getPreferredLengthForThickness(height, minimum_width, natural_width); } -void HistogramRGBAreaVert::drawBar(Cairo::RefPtr cc, double value, double max_value, int winw, int winh, double scale) +void HistogramRGBAreaVert::drawBar(const Cairo::RefPtr &cc, const double value, const double max_value, const int winw, const int winh) { double pos; if (options.histogramDrawMode < 2 || options.histogramScopeType == ScopeType::PARADE || options.histogramScopeType == ScopeType::WAVEFORM) { - pos = padding + value * (winh - padding * 2.0 - 1) / max_value + 0.5 * scale; + pos = padding + value * (winh - padding * 2.0 - 1) / max_value + 0.5; } else { - pos = padding + HistogramScaling::log (max_value, value) * (winh - padding * 2.0) / max_value + 0.5 * scale; + pos = padding + HistogramScaling::log (max_value, value) * (winh - padding * 2.0) / max_value + 0.5; } cc->move_to(0.0, winh - pos); cc->line_to(winw, winh - pos); @@ -1032,7 +1020,7 @@ void HistogramRGBAreaVert::get_preferred_height_vfunc (int &minimum_height, int void HistogramRGBAreaVert::get_preferred_width_vfunc (int &minimum_width, int &natural_width) const { - minimum_width = 10 * RTScalable::getScale(); + minimum_width = RTScalable::scalePixelSize(10); natural_width = minimum_width; } @@ -1051,6 +1039,7 @@ void HistogramRGBAreaVert::get_preferred_width_for_height_vfunc (int height, int // // HistogramArea HistogramArea::HistogramArea (DrawModeListener *fml) : + // Histogram parameters vectorscope_scale(0), vect_hc(0, 0), vect_hs(0, 0), vect_hc_buffer_dirty(true), vect_hs_buffer_dirty(true), @@ -1058,18 +1047,22 @@ HistogramArea::HistogramArea (DrawModeListener *fml) : rwave(0, 0), gwave(0, 0),bwave(0, 0), lwave(0, 0), parade_buffer_r_dirty(true), parade_buffer_g_dirty(true), parade_buffer_b_dirty(true), wave_buffer_dirty(true), wave_buffer_luma_dirty(true), - valid(false), drawMode(options.histogramDrawMode), myDrawModeListener(fml), - scopeType(options.histogramScopeType), - oldwidth(-1), oldheight(-1), - trace_brightness(1.0), + LUT_valid(false), + // Intensity of waveform and vectorscope trace + trace_brightness(1.f), + // Saved pointer parameters + pointer_red(-1), pointer_green(-1), pointer_blue(-1), + pointer_a(0.f), pointer_b(0.f), + pointer_valid(false), + // Drawing options needRed(options.histogramRed), needGreen(options.histogramGreen), needBlue(options.histogramBlue), needLuma(options.histogramLuma), needChroma(options.histogramChroma), - isPressed(false), movingPosition(0.0), needPointer(options.histogramBar), - pointer_red(-1), pointer_green(-1), pointer_blue(-1), - pointer_a(0), pointer_b(0) + scopeType(options.histogramScopeType), + drawMode(options.histogramDrawMode), myDrawModeListener(fml), + // Motion event management + isPressed(false), movingPosition(0.0) { - rhist(256); ghist(256); bhist(256); @@ -1078,22 +1071,11 @@ HistogramArea::HistogramArea (DrawModeListener *fml) : get_style_context()->add_class("drawingarea"); set_name("HistogramArea"); - - haih = new HistogramAreaIdleHelper; - haih->harea = this; - haih->destroyed = false; - haih->pending = 0; } HistogramArea::~HistogramArea () { idle_register.destroy(); - - if (haih->pending) { - haih->destroyed = true; - } else { - delete haih; - } } Gtk::SizeRequestMode HistogramArea::get_request_mode_vfunc () const @@ -1103,22 +1085,18 @@ Gtk::SizeRequestMode HistogramArea::get_request_mode_vfunc () const void HistogramArea::get_preferred_height_vfunc (int &minimum_height, int &natural_height) const { - int s = RTScalable::getScale(); - minimum_height = 100 * s; - natural_height = 200 * s; + minimum_height = RTScalable::scalePixelSize(100); + natural_height = RTScalable::scalePixelSize(200); } void HistogramArea::get_preferred_width_vfunc (int &minimum_width, int &natural_width) const { - - int s = RTScalable::getScale(); - minimum_width = 200 * s; - natural_width = 400 * s; + minimum_width = RTScalable::scalePixelSize(200); + natural_width = RTScalable::scalePixelSize(400); } void HistogramArea::get_preferred_height_for_width_vfunc (int width, int &minimum_height, int &natural_height) const { - minimum_height = 0; natural_height = 0; } @@ -1128,23 +1106,19 @@ void HistogramArea::get_preferred_width_for_height_vfunc (int height, int &minim get_preferred_width_vfunc (minimum_width, natural_width); } -void HistogramArea::updateOptions (bool r, bool g, bool b, bool l, bool c, int mode, ScopeType type, bool pointer) +void HistogramArea::updateFromOptions () { - wave_buffer_dirty = wave_buffer_dirty || needRed != r || needGreen != g || needBlue != b; + wave_buffer_dirty = wave_buffer_dirty || needRed != options.histogramRed || + needGreen != options.histogramGreen || needBlue != options.histogramBlue; - options.histogramRed = needRed = r; - options.histogramGreen = needGreen = g; - options.histogramBlue = needBlue = b; - options.histogramLuma = needLuma = l; - options.histogramChroma = needChroma = c; - options.histogramDrawMode = drawMode = mode; - options.histogramScopeType = scopeType = type; - options.histogramBar = needPointer = pointer; -} - -bool HistogramArea::updatePending(void) -{ - return haih->pending > 0 && !haih->destroyed; + needRed = options.histogramRed; + needGreen = options.histogramGreen; + needBlue = options.histogramBlue; + needLuma = options.histogramLuma; + needChroma = options.histogramChroma; + drawMode = options.histogramDrawMode; + scopeType = options.histogramScopeType; + needPointer = options.histogramBar; } void HistogramArea::update( @@ -1166,158 +1140,146 @@ void HistogramArea::update( const array2D& waveformLuma ) { - if (histRed) { - switch (scopeType) { - case ScopeType::HISTOGRAM: - rhist = histRed; - ghist = histGreen; - bhist = histBlue; - lhist = histLuma; - chist = histChroma; - break; - case ScopeType::HISTOGRAM_RAW: - rhistRaw = histRedRaw; - ghistRaw = histGreenRaw; - bhistRaw = histBlueRaw; - break; - case ScopeType::PARADE: - case ScopeType::WAVEFORM: { - MyWriterLock wave_lock(wave_mutex); - waveform_scale = waveformScale; - rwave = waveformRed; - gwave = waveformGreen; - bwave = waveformBlue; - lwave = waveformLuma; - parade_buffer_r_dirty = parade_buffer_g_dirty = parade_buffer_b_dirty = wave_buffer_dirty = wave_buffer_luma_dirty = true; - break; - } - case ScopeType::VECTORSCOPE_HS: - vectorscope_scale = vectorscopeScale; - vect_hs = vectorscopeHS; - vect_hs_buffer_dirty = true; - break; - case ScopeType::VECTORSCOPE_HC: - vectorscope_scale = vectorscopeScale; - vect_hc = vectorscopeHC; - vect_hc_buffer_dirty = true; - break; - case ScopeType::NONE: - break; - } - valid = true; - } else { - valid = false; - } - - haih->pending++; - - // Can be done outside of the GUI thread + // Note: This function is called outside of GUI threads idle_register.add( - [this]() -> bool - { - if (haih->destroyed) { - if (haih->pending == 1) { - delete haih; - } else { - --haih->pending; + [this, &histRed, &histGreen, &histBlue, &histLuma, &histChroma, &histRedRaw, + &histGreenRaw, &histBlueRaw, vectorscopeScale, &vectorscopeHC, + &vectorscopeHS, waveformScale, &waveformRed, &waveformGreen, + &waveformBlue, &waveformLuma]() -> bool { + GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected + + if (histRed) { + switch (scopeType) { + case ScopeType::HISTOGRAM: + rhist = histRed; + ghist = histGreen; + bhist = histBlue; + lhist = histLuma; + chist = histChroma; + break; + case ScopeType::HISTOGRAM_RAW: + // Raw histogram data are always provided (refer below) + break; + case ScopeType::PARADE: + case ScopeType::WAVEFORM: { + MYWRITERLOCK(wave_lock, wave_mutex) + waveform_scale = waveformScale; + rwave = waveformRed; + gwave = waveformGreen; + bwave = waveformBlue; + lwave = waveformLuma; + parade_buffer_r_dirty = parade_buffer_g_dirty = parade_buffer_b_dirty = wave_buffer_dirty = wave_buffer_luma_dirty = true; + break; } - - return false; + case ScopeType::VECTORSCOPE_HS: + vectorscope_scale = vectorscopeScale; + vect_hs = vectorscopeHS; + vect_hs_buffer_dirty = true; + break; + case ScopeType::VECTORSCOPE_HC: + vectorscope_scale = vectorscopeScale; + vect_hc = vectorscopeHC; + vect_hc_buffer_dirty = true; + break; + case ScopeType::NONE: + break; } + // Raw histogram data are always provided + rhistRaw = histRedRaw; + ghistRaw = histGreenRaw; + bhistRaw = histBlueRaw; - haih->harea->setDirty(true); - haih->harea->updateBackBuffer(); - haih->harea->queue_draw(); + LUT_valid = true; + } else { + LUT_valid = false; + } - --haih->pending; + // Request GUI redraw + queue_draw(); - return false; + return false; } ); } -void HistogramArea::updateBackBuffer () +void HistogramArea::updateDrawingArea (const ::Cairo::RefPtr< Cairo::Context> &cr) { + // Do not update drawing area if widget is not realized if (!get_realized ()) { return; } + // Note: updateDrawingArea is called by the on_draw function so its call does not need to be protected + // GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected + Glib::RefPtr window = get_window(); int winx, winy, winw, winh; window->get_geometry(winx, winy, winw, winh); - // This will create or update the size of the BackBuffer::surface - setDrawRectangle(Cairo::FORMAT_ARGB32, 0, 0, winw, winh, true); - - Cairo::RefPtr cr = Cairo::Context::create(surface); - const Glib::RefPtr style = get_style_context(); - - double s = RTScalable::getScale(); - // Setup drawing - cr->set_source_rgba (0., 0., 0., 0.); - cr->set_operator (Cairo::OPERATOR_CLEAR); - cr->paint (); - cr->set_operator (Cairo::OPERATOR_SOURCE); + cr->set_operator (Cairo::OPERATOR_OVER); // Prepare drawing gridlines first cr->set_source_rgba (1., 1., 1., 0.25); - cr->set_line_width (1.0 * s); + cr->set_line_width (1.0); cr->set_antialias(Cairo::ANTIALIAS_NONE); cr->set_line_join(Cairo::LINE_JOIN_MITER); cr->set_line_cap(Cairo::LINE_CAP_BUTT); - std::valarray ch_ds (1); - ch_ds[0] = 4; + const std::valarray ch_ds = {4.}; cr->set_dash (ch_ds, 0); // determine the number of h-gridlines based on current h - int nrOfHGridPartitions = static_cast(rtengine::min (16.0, pow (2.0, floor ((h - 100) / 250) + 2))); + int nrOfHGridPartitions = static_cast(rtengine::min (16.0, pow (2.0, floor ((winh - 100) / 250) + 2))); int nrOfVGridPartitions = 8; // always show 8 stops (lines at 1,3,7,15,31,63,127) // draw vertical gridlines - if (options.histogramScopeType == ScopeType::HISTOGRAM || options.histogramScopeType == ScopeType::HISTOGRAM_RAW) { + if (scopeType == Options::ScopeType::HISTOGRAM || scopeType == Options::ScopeType::HISTOGRAM_RAW) { for (int i = 0; i <= nrOfVGridPartitions; i++) { double xpos = padding + 0.5; - if (options.histogramDrawMode < 2) { - xpos += (pow(2.0,i) - 1) * (w - padding * 2.0) / 255.0; + if (drawMode < 2) { + xpos += (pow(2.0,i) - 1) * (winw - padding * 2.0) / 255.0; } else { - xpos += HistogramScaling::log (255, pow(2.0,i) - 1) * (w - padding * 2.0) / 255.0; + xpos += HistogramScaling::log (255, pow(2.0,i) - 1) * (winw - padding * 2.0) / 255.0; } cr->move_to (xpos, 0.); - cr->line_to (xpos, h); + cr->line_to (xpos, winh); cr->stroke (); } } // draw horizontal gridlines - if (options.histogramScopeType == ScopeType::PARADE || options.histogramScopeType == ScopeType::WAVEFORM) { + if (scopeType == Options::ScopeType::PARADE || scopeType == Options::ScopeType::WAVEFORM) { for (int i = 0; i <= nrOfVGridPartitions; i++) { - const double ypos = h - padding - (pow(2.0,i) - 1) * (h - 2 * padding - 1) / 255.0; + const double ypos = winh - padding - (pow(2.0,i) - 1) * (winh - 2 * padding - 1) / 255.0; cr->move_to(0, ypos); - cr->line_to(w, ypos); + cr->line_to(winw, ypos); cr->stroke(); } - } else if (options.histogramScopeType == ScopeType::VECTORSCOPE_HC || options.histogramScopeType == ScopeType::VECTORSCOPE_HS) { + } else if (scopeType == Options::ScopeType::VECTORSCOPE_HC || scopeType == Options::ScopeType::VECTORSCOPE_HS) { // Vectorscope has no gridlines. - } else if (options.histogramDrawMode == 0) { + } else if (drawMode == 0) { for (int i = 1; i < nrOfHGridPartitions; i++) { - cr->move_to (padding, i * static_cast(h) / nrOfHGridPartitions + 0.5); - cr->line_to (w - padding, i * static_cast(h) / nrOfHGridPartitions + 0.5); + cr->move_to (padding, + i * static_cast(winh) / nrOfHGridPartitions + 0.5); + cr->line_to (winw - padding, + i * static_cast(winh) / nrOfHGridPartitions + 0.5); cr->stroke (); } } else { for (int i = 1; i < nrOfHGridPartitions; i++) { - cr->move_to (padding, h - HistogramScaling::log (h, i * static_cast(h) / nrOfHGridPartitions) + 0.5); - cr->line_to (w - padding, h - HistogramScaling::log (h, i * static_cast(h) / nrOfHGridPartitions) + 0.5); + cr->move_to (padding, + winh - HistogramScaling::log (winh, i * static_cast(winh) / nrOfHGridPartitions) + 0.5); + cr->line_to (winw - padding, + winh - HistogramScaling::log (winh, i * static_cast(winh) / nrOfHGridPartitions) + 0.5); cr->stroke (); } } cr->unset_dash(); - MyReaderLock wave_lock(wave_mutex); - if (valid && (scopeType == ScopeType::HISTOGRAM || scopeType == ScopeType::HISTOGRAM_RAW)) { - bool rawMode = scopeType == ScopeType::HISTOGRAM_RAW; + MYREADERLOCK(wave_lock, wave_mutex) + if (LUT_valid && (scopeType == Options::ScopeType::HISTOGRAM || scopeType == Options::ScopeType::HISTOGRAM_RAW)) { + const bool rawMode = (scopeType == Options::ScopeType::HISTOGRAM_RAW); // For RAW mode use the other hists LUTu& rh = rawMode ? rhistRaw : rhist; @@ -1329,24 +1291,24 @@ void HistogramArea::updateBackBuffer () unsigned int lhisttemp[256] ALIGNED16 {0}, chisttemp[256] ALIGNED16 {0}, rhtemp[256] ALIGNED16 {0}, ghtemp[256] ALIGNED16 {0}, bhtemp[256] ALIGNED16 {0}; const int scale = (rawMode ? 8 : 1); - for(int i = 0; i < 256; i++) { - if(needLuma) { + for (int i = 0; i < 256; i++) { + if (needLuma && !rawMode) { lhisttemp[i] = lhist[i]; } - if(needChroma) { + if (needChroma && !rawMode) { chisttemp[i] = chist[i]; } - if(needRed) { + if (needRed) { rhchanged[i] = rhtemp[i] = rh[i] / scale; } - if(needGreen) { + if (needGreen) { ghchanged[i] = ghtemp[i] = gh[i] / scale; } - if(needBlue) { + if (needBlue) { bhchanged[i] = bhtemp[i] = bh[i] / scale; } } @@ -1357,11 +1319,11 @@ void HistogramArea::updateBackBuffer () unsigned int histheight = 0; for (int i = 1; i < 255; i++) { - if (needLuma && lhisttemp[i] > histheight) { + if (needLuma && !rawMode && lhisttemp[i] > histheight) { histheight = lhisttemp[i]; } - if (needChroma && chisttemp[i] > histheight) { + if (needChroma && !rawMode && chisttemp[i] > histheight) { histheight = chisttemp[i]; } @@ -1385,100 +1347,111 @@ void HistogramArea::updateBackBuffer () } cr->set_antialias (Cairo::ANTIALIAS_SUBPIXEL); - cr->set_line_width (1.0 * s); + cr->set_line_width (1.0); cr->set_operator (Cairo::OPERATOR_OVER); int ui = 0, oi = 0; if (needLuma && !rawMode) { - drawCurve(cr, lhist, realhistheight, w, h); + drawCurve(cr, lhist, realhistheight, winw, winh); cr->set_source_rgba (0.65, 0.65, 0.65, 0.65); cr->fill (); - drawMarks(cr, lhist, realhistheight, w, ui, oi); + drawMarks(cr, lhist, realhistheight, winw, ui, oi); } if (needChroma && !rawMode) { - drawCurve(cr, chist, realhistheight, w, h); + drawCurve(cr, chist, realhistheight, winw, winh); cr->set_source_rgb (0.9, 0.9, 0.); cr->stroke (); - drawMarks(cr, chist, realhistheight, w, ui, oi); + drawMarks(cr, chist, realhistheight, winw, ui, oi); } if (needRed) { - drawCurve(cr, rhchanged, realhistheight, w, h); + drawCurve(cr, rhchanged, realhistheight, winw, winh); cr->set_source_rgb (1.0, 0.0, 0.0); cr->stroke (); - drawMarks(cr, rhchanged, realhistheight, w, ui, oi); + drawMarks(cr, rhchanged, realhistheight, winw, ui, oi); } if (needGreen) { - drawCurve(cr, ghchanged, realhistheight, w, h); + drawCurve(cr, ghchanged, realhistheight, winw, winh); cr->set_source_rgb (0.0, 1.0, 0.0); cr->stroke (); - drawMarks(cr, ghchanged, realhistheight, w, ui, oi); + drawMarks(cr, ghchanged, realhistheight, winw, ui, oi); } if (needBlue) { - drawCurve(cr, bhchanged, realhistheight, w, h); + drawCurve(cr, bhchanged, realhistheight, winw, winh); cr->set_source_rgb (0.0, 0.4, 1.0); cr->stroke (); - drawMarks(cr, bhchanged, realhistheight, w, ui, oi); + drawMarks(cr, bhchanged, realhistheight, winw, ui, oi); } - } else if (scopeType == ScopeType::PARADE && rwave.getWidth() > 0) { - drawParade(cr, w, h); - } else if (scopeType == ScopeType::WAVEFORM && rwave.getWidth() > 0) { - drawWaveform(cr, w, h); - } else if (scopeType == ScopeType::VECTORSCOPE_HC || scopeType == ScopeType::VECTORSCOPE_HS) { - drawVectorscope(cr, w, h); + } else if (scopeType == Options::ScopeType::PARADE && rwave.getWidth() > 0) { + drawParade(cr, winw, winh); + } else if (scopeType == Options::ScopeType::WAVEFORM && rwave.getWidth() > 0) { + drawWaveform(cr, winw, winh); + } else if (scopeType == Options::ScopeType::VECTORSCOPE_HC || scopeType == Options::ScopeType::VECTORSCOPE_HS) { + drawVectorscope(cr, winw, winh); } - wave_lock.release(); - - // Draw the frame's border - style->render_frame(cr, 0, 0, surface->get_width(), surface->get_height()); - - oldwidth = w; - oldheight = h; - - setDirty(false); + MYREADERLOCK_RELEASE(wave_lock); } -bool HistogramArea::updatePointer(int r, int g, int b, const Glib::ustring &profile, const Glib::ustring &profileW) +bool HistogramArea::updatePointer(const int r, const int g, const int b, const rtengine::procparams::ColorManagementParams *cmp) { - if (!needPointer || !(scopeType == ScopeType::VECTORSCOPE_HC || scopeType == ScopeType::VECTORSCOPE_HS)) { + // Do not update pointer values if pointer is not visible + // (by user choice or according to scope type) + if (!needPointer || + !(scopeType == Options::ScopeType::VECTORSCOPE_HC || scopeType == Options::ScopeType::VECTORSCOPE_HS)) { return false; } + + // Do not update pointer values if values are identical if (pointer_red == r && pointer_green == g && pointer_blue == b) { return false; } - float L; - pointer_red = r; - pointer_green = g; - pointer_blue = b; - Color::rgb2lab01(profile, profileW, r / 255.f, g / 255.f, b / 255.f, L, pointer_a, pointer_b, options.rtSettings.HistogramWorking); - updateBackBuffer(); + // Set pointer parameters to invalid if r = g = b = -1 + if (r == -1 || g == -1 || b == -1) { + pointer_red = pointer_green = pointer_blue = -1; + pointer_a = pointer_b = 0.; + pointer_valid = false; + } else { + float L; // Unused + pointer_red = r; + pointer_green = g; + pointer_blue = b; + ImProcFunctions::rgb2lab( + static_cast(r), + static_cast(g), + static_cast(b), + L, pointer_a, pointer_b, + cmp != nullptr ? *cmp : DEFAULT_CMP, + true); + L /= 327.68f; + pointer_a /= 327.68f; + pointer_b /= 327.68f; + pointer_valid = true; + } + return true; } void HistogramArea::on_realize () { - Gtk::DrawingArea::on_realize(); add_events(Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK); } -void HistogramArea::drawCurve(Cairo::RefPtr &cr, - const LUTu & data, double scale, int hsize, int vsize) +void HistogramArea::drawCurve(const Cairo::RefPtr &cr, + const LUTu & data, const double scale, const int hsize, const int vsize) { - double s = RTScalable::getScale(); - - cr->set_line_width(s); + cr->set_line_width(1.); cr->move_to (padding, vsize - 1); - scale = scale <= 0.0 ? 0.001 : scale; // avoid division by zero and negative values + const double new_scale = scale <= 0.0 ? 0.001 : scale; // avoid division by zero and negative values for (int i = 0; i < 256; i++) { - double val = data[i] * static_cast(vsize) / scale; + double val = data[i] * static_cast(vsize) / new_scale; if (drawMode > 0) { // scale y for single and double log-scale val = HistogramScaling::log (static_cast(vsize), val); @@ -1498,23 +1471,21 @@ void HistogramArea::drawCurve(Cairo::RefPtr &cr, cr->line_to (hsize - padding, vsize - 1); } -void HistogramArea::drawMarks(Cairo::RefPtr &cr, - const LUTu & data, double scale, int hsize, int & ui, int & oi) +void HistogramArea::drawMarks(const Cairo::RefPtr &cr, + const LUTu & data, const double scale, const int wsize, int & ui, int & oi) { - int s = 8 * RTScalable::getScale(); - if(data[0] > scale) { - cr->rectangle(padding, (ui++)*s, s, s); + cr->rectangle(padding, (ui++) * 8., 8., 8.); } if(data[255] > scale) { - cr->rectangle(hsize - s - padding, (oi++)*s, s, s); + cr->rectangle(wsize - 8. - padding, (oi++) * 8., 8., 8.); } cr->fill(); } -void HistogramArea::drawParade(Cairo::RefPtr &cr, int w, int h) +void HistogramArea::drawParade(const Cairo::RefPtr &cr, const int w, const int h) { // Arbitrary scale factor divided by current scale. const float scale = trace_brightness * 32.f * 255.f / waveform_scale; @@ -1618,7 +1589,7 @@ void HistogramArea::drawParade(Cairo::RefPtr &cr, int w, int h) cr->translate(i * display_wave_width, padding); cr->scale(display_wave_width / wave_width, (h - 2 * padding) / wave_height); surface = Cairo::ImageSurface::create( - buffers[i], Cairo::FORMAT_ARGB32, wave_width, wave_height, cairo_stride); + buffers[i], Cairo::FORMAT_ARGB32, wave_width, wave_height, cairo_stride); cr->set_source(surface, 0, 0); cr->set_operator(Cairo::OPERATOR_OVER); cr->paint(); @@ -1627,26 +1598,27 @@ void HistogramArea::drawParade(Cairo::RefPtr &cr, int w, int h) } } -void HistogramArea::drawVectorscope(Cairo::RefPtr &cr, int w, int h) +void HistogramArea::drawVectorscope(const Cairo::RefPtr &cr, const int w, const int h) { - if (scopeType != ScopeType::VECTORSCOPE_HC && scopeType != ScopeType::VECTORSCOPE_HS) { + if (scopeType != Options::ScopeType::VECTORSCOPE_HC && scopeType != Options::ScopeType::VECTORSCOPE_HS) { return; } - const auto& vect = (scopeType == ScopeType::VECTORSCOPE_HC) ? vect_hc : vect_hs; - auto& vect_buffer = (scopeType == ScopeType::VECTORSCOPE_HC) ? vect_hc_buffer : vect_hs_buffer; - auto& vect_buffer_dirty = (scopeType == ScopeType::VECTORSCOPE_HC) ? vect_hc_buffer_dirty : vect_hs_buffer_dirty; + const auto& vect = (scopeType == Options::ScopeType::VECTORSCOPE_HC) ? vect_hc : vect_hs; + auto& vect_buffer = (scopeType == Options::ScopeType::VECTORSCOPE_HC) ? vect_hc_buffer : vect_hs_buffer; + auto& vect_buffer_dirty = (scopeType == Options::ScopeType::VECTORSCOPE_HC) ? vect_hc_buffer_dirty : vect_hs_buffer_dirty; const int vect_width = vect.getWidth(); const int vect_height = vect.getHeight(); - // Arbitrary scale factor multiplied by vectorscope area and divided by - // current scale. - const float scale = trace_brightness * 8.f * vect_width * vect_height / vectorscope_scale; // See Cairo documentation on stride. const int cairo_stride = Cairo::ImageSurface::format_stride_for_width(Cairo::FORMAT_ARGB32, vect_width); if (vect_buffer_dirty && vectorscope_scale > 0) { + // Arbitrary scale factor multiplied by vectorscope area and divided by + // current scale. + const float scale = trace_brightness * 8.f * vect_width * vect_height / vectorscope_scale; + if (vect_buffer.size() != static_cast(cairo_stride) * vect_height) { vect_buffer.resize(static_cast(cairo_stride) * vect_height); } @@ -1669,24 +1641,23 @@ void HistogramArea::drawVectorscope(Cairo::RefPtr &cr, int w, in const bool fit_width = vect_width * (h - 2 * padding) > vect_height * (w - 2 * padding); const float scope_scale = fit_width ? - (w - 2 * padding) / vect_width : (h - 2 * padding) / vect_height; + (w - 2 * padding) / vect_width : (h - 2 * padding) / vect_height; const float scope_size = (vectorscope_scale > 0) ? - scope_scale * std::max(vect_width, vect_height) : std::min(w, h) - 2 * padding; + scope_scale * std::max(vect_width, vect_height) : std::min(w, h) - 2 * padding; const float o_x = (w - scope_scale * vect_width) / 2; const float o_y = (h - scope_scale * vect_height) / 2; - const double s = RTScalable::getScale(); auto orig_matrix = cr->get_matrix(); const double line_length = scope_size / 2.0; std::valarray ch_ds(1); cr->translate(w / 2.0, h / 2.0); - cr->set_line_width (1.0 * s); + cr->set_line_width (1.0); cr->set_antialias(Cairo::ANTIALIAS_SUBPIXEL); ch_ds[0] = 4; if (scopeType == ScopeType::VECTORSCOPE_HS) { // Hue-Saturation. // RYGCBM lines. - cr->set_line_width (2.0 * s); + cr->set_line_width (2.0); constexpr double color_labels[6][3] = { {1, 0, 0}, // R {0, 1, 0}, // G @@ -1708,7 +1679,7 @@ void HistogramArea::drawVectorscope(Cairo::RefPtr &cr, int w, in cr->rotate_degrees(-120); cr->stroke(); } - cr->set_line_width (1.0 * s); + cr->set_line_width (1.0); cr->set_source_rgba (1, 1, 1, 0.25); // 100% saturation circle. cr->arc(0, 0, scope_size / 2.0, 0, 2 * RT_PI); @@ -1728,7 +1699,7 @@ void HistogramArea::drawVectorscope(Cairo::RefPtr &cr, int w, in } else if (scopeType == ScopeType::VECTORSCOPE_HC) { // Hue-Chroma. // a and b axes. Cairo::RefPtr gradient; - cr->set_line_width (2.0 * s); + cr->set_line_width (2.0); gradient = Cairo::LinearGradient::create(0, -line_length, 0, line_length); cr->set_source(gradient); gradient->add_color_stop_rgba(0, 1, 1, 0, 0.5); // "yellow" @@ -1750,7 +1721,7 @@ void HistogramArea::drawVectorscope(Cairo::RefPtr &cr, int w, in cr->line_to(-line_length, 0); cr->stroke(); cr->set_source_rgba (1, 1, 1, 0.25); - cr->set_line_width (1.0 * s); + cr->set_line_width (1.0); // 25%, 50%, 75%, and 100% of standard chroma range. cr->set_dash(ch_ds, 0); for (int i = 1; i <= 4; i++) { @@ -1770,7 +1741,7 @@ void HistogramArea::drawVectorscope(Cairo::RefPtr &cr, int w, in // Vectorscope trace. if (vectorscope_scale > 0) { Cairo::RefPtr surface = Cairo::ImageSurface::create( - vect_buffer.data(), Cairo::FORMAT_ARGB32, vect_width, vect_height, cairo_stride); + vect_buffer.data(), Cairo::FORMAT_ARGB32, vect_width, vect_height, cairo_stride); cr->translate(o_x, o_y); cr->scale(scope_scale, scope_scale); cr->set_source(surface, 0, 0); @@ -1779,7 +1750,7 @@ void HistogramArea::drawVectorscope(Cairo::RefPtr &cr, int w, in surface->finish(); cr->set_matrix(orig_matrix); - if (needPointer && pointer_red >= 0 && pointer_green >= 0 && pointer_blue >= 0) { + if (needPointer && pointer_valid) { float cx, cy; if (scopeType == ScopeType::VECTORSCOPE_HS) { float H, S, L; @@ -1791,24 +1762,24 @@ void HistogramArea::drawVectorscope(Cairo::RefPtr &cr, int w, in cx = w / 2.f + scope_size * pointer_a * ab_factor; cy = h / 2.f - scope_size * pointer_b * ab_factor; } - const float crosshair_size = 20.f * s; + const float crosshair_size = 20.f; cr->set_source_rgba(1, 1, 1, 0.5); cr->move_to(cx - crosshair_size, cy); cr->line_to(cx + crosshair_size, cy); cr->move_to(cx, cy - crosshair_size); cr->line_to(cx, cy + crosshair_size); cr->stroke(); - cr->arc(cx, cy, 3 * s, 0, 2 * RT_PI); + cr->arc(cx, cy, 3, 0, 2 * RT_PI); cr->set_source_rgb(1, 1, 1); cr->fill_preserve(); cr->set_source_rgb(0, 0, 0); - cr->set_line_width (1.0 * s); + cr->set_line_width (1.0); cr->stroke(); } } } -void HistogramArea::drawWaveform(Cairo::RefPtr &cr, int w, int h) +void HistogramArea::drawWaveform(const Cairo::RefPtr &cr, const int w, const int h) { // Arbitrary scale factor divided by current scale. const float scale = trace_brightness * 32.f * 255.f / waveform_scale; @@ -1866,7 +1837,7 @@ void HistogramArea::drawWaveform(Cairo::RefPtr &cr, int w, int h cr->scale(static_cast(w) / wave_width, (h - 2 * padding) / wave_height); if (needLuma) { surface = Cairo::ImageSurface::create( - wave_buffer_luma.data(), Cairo::FORMAT_ARGB32, wave_width, wave_height, cairo_stride); + wave_buffer_luma.data(), Cairo::FORMAT_ARGB32, wave_width, wave_height, cairo_stride); cr->set_source(surface, 0, 0); cr->set_operator(Cairo::OPERATOR_OVER); cr->paint(); @@ -1874,7 +1845,7 @@ void HistogramArea::drawWaveform(Cairo::RefPtr &cr, int w, int h } if (needRed || needGreen || needBlue) { surface = Cairo::ImageSurface::create( - wave_buffer.data(), Cairo::FORMAT_ARGB32, wave_width, wave_height, cairo_stride); + wave_buffer.data(), Cairo::FORMAT_ARGB32, wave_width, wave_height, cairo_stride); cr->set_source(surface, 0, 0); cr->set_operator(Cairo::OPERATOR_OVER); cr->paint(); @@ -1885,14 +1856,13 @@ void HistogramArea::drawWaveform(Cairo::RefPtr &cr, int w, int h bool HistogramArea::on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr) { - - if (!updatePending() && (get_width() != oldwidth || get_height() != oldheight || isDirty())) { - updateBackBuffer (); - } - const Glib::RefPtr style = get_style_context(); style->render_background(cr, 0, 0, get_width(), get_height()); - copySurface(cr, NULL); + + // Draw drawing area + // Note: As drawing area surface is updated inside on_draw function, hidpi is automatically supported + updateDrawingArea(cr); + style->render_frame (cr, 0, 0, get_width(), get_height()); return true; @@ -1915,7 +1885,6 @@ bool HistogramArea::on_button_press_event (GdkEventButton* event) myDrawModeListener->toggleButtonMode (); } - updateBackBuffer (); queue_draw (); } @@ -1952,7 +1921,6 @@ bool HistogramArea::on_motion_notify_event (GdkEventMotion* event) sigFactorChanged.emit(factor); - setDirty(true); queue_draw (); } else if ( scopeType == ScopeType::PARADE @@ -1981,7 +1949,6 @@ void HistogramArea::setBrightness(float brightness) if (brightness != trace_brightness) { parade_buffer_r_dirty = parade_buffer_g_dirty = parade_buffer_b_dirty = wave_buffer_dirty = wave_buffer_luma_dirty = vect_hc_buffer_dirty = vect_hs_buffer_dirty = true; trace_brightness = brightness; - setDirty(true); queue_draw(); signal_brightness_changed.emit(trace_brightness); diff --git a/rtgui/histogrampanel.h b/rtgui/histogrampanel.h index 26b744546..2ead05340 100644 --- a/rtgui/histogrampanel.h +++ b/rtgui/histogrampanel.h @@ -35,20 +35,6 @@ #include "../rtengine/LUT.h" #include "../rtengine/noncopyable.h" -class HistogramArea; - -struct HistogramAreaIdleHelper { - HistogramArea* harea; - bool destroyed; - int pending; -}; - -class HistogramRGBArea; -struct HistogramRGBAreaIdleHelper { - HistogramRGBArea* harea; - bool destroyed; - int pending; -}; class HistogramScaling { @@ -58,38 +44,39 @@ public: double log (double vsize, double val); }; -class HistogramRGBArea : public Gtk::DrawingArea, public BackBuffer, protected HistogramScaling, public rtengine::NonCopyable +class HistogramRGBArea : public Gtk::DrawingArea, protected HistogramScaling, public rtengine::NonCopyable { -private: - typedef const double (*TMatrix)[3]; - - IdleRegister idle_register; - protected: - int val; + // Saved pointer parameters int r; int g; int b; + float lab_L; + float lab_a; + float lab_b; + bool pointerValid; - bool valid; - + // Drawing options bool needRed; bool needGreen; bool needBlue; bool needLuma; bool needChroma; - bool showMode; - bool barDisplayed; + Options::ScopeType scopeType; + int scaleMode; + bool showBar; - Gtk::Grid* parent; - - double padding = 5.0; + const double padding = 5.0; - HistogramRGBAreaIdleHelper* harih; + // Internal drawing functions + void updateDrawingArea (const ::Cairo::RefPtr< Cairo::Context> &cc); + virtual void drawBar(const Cairo::RefPtr &cc, const double value, const double max_value, const int winw, const int winh) = 0; - /** Draw an indicator bar for the value. */ - virtual void drawBar(Cairo::RefPtr cc, double value, double max_value, int winw, int winh, double scale) = 0; + // GtkDrawingArea override functions + void on_realize() override; + bool on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr) override; + // Widget size management functions void getPreferredThickness(int& min_thickness, int& natural_length) const; void getPreferredLength(int& min_length, int& natural_length) const; void getPreferredThicknessForLength(int length, int& min_thickness, int& natural_length) const; @@ -99,29 +86,23 @@ public: HistogramRGBArea(); ~HistogramRGBArea() override; - void updateBackBuffer (int r, int g, int b, const Glib::ustring &profile = "", const Glib::ustring &profileW = ""); - bool getShow (); - void setShow(bool show); - void setParent (Gtk::Grid* p) - { - parent = p; - }; + // Update pointer values: returns true if widget needs redrawing + bool updatePointer (const int new_r, const int new_g, const int new_b, const rtengine::procparams::ColorManagementParams *cmp = nullptr); + // Update internal parameters from options + void updateFromOptions (); - void update (int val, int rh, int gh, int bh); - void updateOptions (bool r, bool g, bool b, bool l, bool c, bool show); - - void on_realize() override; - bool on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr) override; + // Event management functions bool on_button_press_event (GdkEventButton* event) override; void factorChanged (double newFactor); - }; class HistogramRGBAreaHori final : public HistogramRGBArea { private: - void drawBar(Cairo::RefPtr cc, double value, double max_value, int winw, int winh, double scale) override; + // Internal drawing function + void drawBar(const Cairo::RefPtr &cc, const double value, const double max_value, const int winw, const int winh) override; + // Widget size management functions Gtk::SizeRequestMode get_request_mode_vfunc () const override; void get_preferred_height_vfunc (int& minimum_height, int& natural_height) const override; void get_preferred_width_vfunc (int &minimum_width, int &natural_width) const override; @@ -132,8 +113,10 @@ private: class HistogramRGBAreaVert final : public HistogramRGBArea { private: - void drawBar(Cairo::RefPtr cc, double value, double max_value, int winw, int winh, double scale) override; + // Internal drawing function + void drawBar(const Cairo::RefPtr &cc, const double value, const double max_value, const int winw, const int winh) override; + // Widget size management functions Gtk::SizeRequestMode get_request_mode_vfunc () const override; void get_preferred_height_vfunc (int& minimum_height, int& natural_height) const override; void get_preferred_width_vfunc (int &minimum_width, int &natural_width) const override; @@ -148,7 +131,7 @@ public: virtual void toggleButtonMode() = 0; }; -class HistogramArea final : public Gtk::DrawingArea, public BackBuffer, private HistogramScaling, public rtengine::NonCopyable +class HistogramArea final : public Gtk::DrawingArea, private HistogramScaling, public rtengine::NonCopyable { public: typedef sigc::signal type_signal_factor_changed; @@ -161,8 +144,9 @@ private: type_signal_factor_changed sigFactorChanged; protected: + // Histogram parameters LUTu rhist, ghist, bhist, lhist, chist; - LUTu rhistRaw, ghistRaw, bhistRaw, lhistRaw; //lhistRaw is unused? + LUTu rhistRaw, ghistRaw, bhistRaw; int vectorscope_scale; array2D vect_hc, vect_hs; std::vector vect_hc_buffer, vect_hs_buffer; @@ -177,36 +161,44 @@ protected: std::vector wave_buffer; std::vector wave_buffer_luma; bool wave_buffer_dirty, wave_buffer_luma_dirty; + bool LUT_valid; - bool valid; + // Intensity of waveform and vectorscope trace + float trace_brightness; + SignalBrightnessChanged signal_brightness_changed; + + // Saved pointer parameters + int pointer_red; + int pointer_green; + int pointer_blue; + float pointer_a; + float pointer_b; + bool pointer_valid; + + // Drawing options + bool needRed; + bool needGreen; + bool needBlue; + bool needLuma; + bool needChroma; + bool needPointer; + Options::ScopeType scopeType; int drawMode; DrawModeListener *myDrawModeListener; - Options::ScopeType scopeType; - int oldwidth, oldheight; - /// Intensity of waveform and vectorscope trace. - float trace_brightness; - bool needRed, needGreen, needBlue, needLuma, needChroma; + // Motion event management bool isPressed; double movingPosition; - bool needPointer; - + double padding = 5.0; - HistogramAreaIdleHelper* haih; - - int pointer_red, pointer_green, pointer_blue; - float pointer_a, pointer_b; - - SignalBrightnessChanged signal_brightness_changed; - public: explicit HistogramArea(DrawModeListener *fml = nullptr); ~HistogramArea() override; - void updateBackBuffer (); - /// Update pointer values. Returns true if widget needs redrawing. - bool updatePointer(int r, int g, int b, const Glib::ustring &profile = "", const Glib::ustring &profileW = ""); + // Update pointer values: returns true if widget needs redrawing + bool updatePointer(const int r, const int g, const int b, const rtengine::procparams::ColorManagementParams *cmp = nullptr); + // Update histogram data void update( const LUTu& histRed, const LUTu& histGreen, @@ -225,25 +217,36 @@ public: const array2D& waveformBlue, const array2D& waveformLuma ); - void updateOptions (bool r, bool g, bool b, bool l, bool c, int mode, Options::ScopeType type, bool pointer); - bool updatePending(); - void on_realize() override; - bool on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr) override; + // Update internal parameters from options + void updateFromOptions(); + + // Event management functions bool on_button_press_event (GdkEventButton* event) override; bool on_button_release_event (GdkEventButton* event) override; bool on_motion_notify_event (GdkEventMotion* event) override; + + // Brightness management functions (nominal = 1) float getBrightness(void); - /** Set the trace brightness, with 1 being normal. */ void setBrightness(float brightness); SignalBrightnessChanged getBrighnessChangedSignal(void); + + // Factor management function type_signal_factor_changed signal_factor_changed(); private: - void drawCurve(Cairo::RefPtr &cr, const LUTu & data, double scale, int hsize, int vsize); - void drawMarks(Cairo::RefPtr &cr, const LUTu & data, double scale, int hsize, int & ui, int & oi); - void drawParade(Cairo::RefPtr &cr, int hsize, int vsize); - void drawVectorscope(Cairo::RefPtr &cr, int hsize, int vsize); - void drawWaveform(Cairo::RefPtr &cr, int hsize, int vsize); + // GtkDrawingArea override functions + void on_realize() override; + bool on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr) override; + + // Internal drawing functions + void updateDrawingArea (const ::Cairo::RefPtr< Cairo::Context> &cr); + void drawCurve(const Cairo::RefPtr &cr, const LUTu & data, const double scale, const int hsize, const int vsize); + void drawMarks(const Cairo::RefPtr &cr, const LUTu & data, const double scale, const int wsize, int & ui, int & oi); + void drawParade(const Cairo::RefPtr &cr, const int hsize, const int vsize); + void drawVectorscope(const Cairo::RefPtr &cr, const int hsize, const int vsize); + void drawWaveform(const Cairo::RefPtr &cr, const int hsize, const int vsize); + + // Widget size management functions Gtk::SizeRequestMode get_request_mode_vfunc () const override; void get_preferred_height_vfunc (int& minimum_height, int& natural_height) const override; void get_preferred_width_vfunc (int &minimum_width, int &natural_width) const override; @@ -260,7 +263,7 @@ public: class HistogramPanel final : public Gtk::Grid, public PointerMotionListener, public DrawModeListener, public rtengine::NonCopyable { private: - DelayedCall pointer_moved_delayed_call; + DelayedCall pointer_moved_delayed_call; protected: @@ -311,10 +314,9 @@ protected: sigc::connection brightness_changed_connection; sigc::connection rconn; + void setHistInvalid (); void showRGBBar(); - void updateHistAreaOptions(); - void updateHistRGBAreaOptions(); public: @@ -343,10 +345,7 @@ public: histogramArea->update(histRed, histGreen, histBlue, histLuma, histChroma, histRedRaw, histGreenRaw, histBlueRaw, vectorscopeScale, vectorscopeHC, vectorscopeHS, waveformScale, waveformRed, waveformGreen, waveformBlue, waveformLuma); } // pointermotionlistener interface - void pointerMoved (bool validPos, const Glib::ustring &profile, const Glib::ustring &profileW, int x, int y, int r, int g, int b, bool isRaw = false) override; - - // TODO should be protected - void setHistRGBInvalid (); + void pointerMoved (bool validPos, const rtengine::procparams::ColorManagementParams &cmp, int x, int y, int r, int g, int b, bool isRaw = false) override; void reorder (Gtk::PositionType position); void red_toggled (); diff --git a/rtgui/history.cc b/rtgui/history.cc index 4d6940e9b..9cd9173a8 100644 --- a/rtgui/history.cc +++ b/rtgui/history.cc @@ -98,7 +98,7 @@ History::History (bool bookmarkSupport) : historyVPaned (nullptr), blistener (nu //addBookmark->get_style_context()->set_junction_sides(Gtk::JUNCTION_RIGHT); addBookmark->get_style_context()->add_class ("Left"); addBookmark->set_tooltip_markup (M ("HISTORY_NEWSNAPSHOT_TOOLTIP")); - Gtk::Image* addimg = Gtk::manage (new RTImage ("add-small.png")); + Gtk::Image* addimg = Gtk::manage (new RTImage ("add-small", Gtk::ICON_SIZE_BUTTON)); addBookmark->set_image (*addimg); ahbox->pack_start (*addBookmark); @@ -106,7 +106,7 @@ History::History (bool bookmarkSupport) : historyVPaned (nullptr), blistener (nu setExpandAlignProperties (delBookmark, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); //delBookmark->get_style_context()->set_junction_sides(Gtk::JUNCTION_LEFT); delBookmark->get_style_context()->add_class ("Right"); - Gtk::Image* delimg = Gtk::manage (new RTImage ("remove-small.png")); + Gtk::Image* delimg = Gtk::manage (new RTImage ("remove-small", Gtk::ICON_SIZE_BUTTON)); delBookmark->set_image (*delimg); ahbox->pack_start (*delBookmark); diff --git a/rtgui/iccprofilecreator.cc b/rtgui/iccprofilecreator.cc index 446dda3fb..542234db2 100644 --- a/rtgui/iccprofilecreator.cc +++ b/rtgui/iccprofilecreator.cc @@ -87,21 +87,6 @@ ICCProfileCreator::ICCProfileCreator(RTWindow *rtwindow) setExpandAlignProperties(primariesGrid, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); primariesGrid->set_column_spacing(5); - /* - Gtk::Image* gamuts0 = Gtk::manage(new RTImage("rt-logo-tiny.png")); - Gtk::Image* gamutl0 = Gtk::manage(new RTImage("rt-logo-small.png")); - Gtk::Image* gamuts1 = Gtk::manage(new RTImage("rt-logo-tiny.png")); - Gtk::Image* gamutl1 = Gtk::manage(new RTImage("rt-logo-small.png")); - Gtk::Image* gamuts2 = Gtk::manage(new RTImage("rt-logo-tiny.png")); - Gtk::Image* gamutl2 = Gtk::manage(new RTImage("rt-logo-small.png")); - Gtk::Image* gamuts3 = Gtk::manage(new RTImage("rt-logo-tiny.png")); - Gtk::Image* gamutl3 = Gtk::manage(new RTImage("rt-logo-small.png")); - Gtk::Image* gamuts4 = Gtk::manage(new RTImage("rt-logo-tiny.png")); - Gtk::Image* gamutl4 = Gtk::manage(new RTImage("rt-logo-small.png")); - Gtk::Image* gamuts5 = Gtk::manage(new RTImage("rt-logo-tiny.png")); - Gtk::Image* gamutl5 = Gtk::manage(new RTImage("rt-logo-small.png")); - */ - aPrimariesRedX = Gtk::manage(new Adjuster(M("ICCPROFCREATOR_PRIM_REDX"), 0.4100, 0.9000, 0.0001, 0.6400/*, gamuts0, gamutl0*/)); setExpandAlignProperties(aPrimariesRedX, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); aPrimariesRedY = Gtk::manage(new Adjuster(M("ICCPROFCREATOR_PRIM_REDY"), 0.1000, 0.6000, 0.0001, 0.3300/*, gamutl1, gamuts1*/)); @@ -219,7 +204,7 @@ ICCProfileCreator::ICCProfileCreator(RTWindow *rtwindow) setExpandAlignProperties(eCopyright, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); copygrid->attach(*eCopyright, 0, 0, 1, 1); resetCopyright = Gtk::manage(new Gtk::Button()); - resetCopyright->add(*Gtk::manage(new RTImage("undo-small.png", "redo-small.png"))); + resetCopyright->add(*Gtk::manage(new RTImage("undo-small", Gtk::ICON_SIZE_BUTTON))); setExpandAlignProperties(resetCopyright, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); resetCopyright->set_relief(Gtk::RELIEF_NONE); resetCopyright->set_tooltip_markup(M("ICCPROFCREATOR_COPYRIGHT_RESET_TOOLTIP")); @@ -850,7 +835,7 @@ void ICCProfileCreator::savePressed() //g5=0.517448 presetGamma = 2.22; presetSlope = 4.5; - + } else if (gammaPreset == "linear_g1.0") { sGammaPreset = "Linear_g=1.0"; ga[0] = 1.0; //gamma=1 linear : for high dynamic images (cf D.Coffin...) diff --git a/rtgui/icmpanel.cc b/rtgui/icmpanel.cc index 57f12fd7e..b18afe5aa 100644 --- a/rtgui/icmpanel.cc +++ b/rtgui/icmpanel.cc @@ -173,7 +173,7 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iu iVBox->pack_start(*dcpFrame); saveRef = Gtk::manage(new Gtk::Button(M("TP_ICM_SAVEREFERENCE"))); - saveRef->set_image(*Gtk::manage(new RTImage("save-small.png"))); + saveRef->set_image(*Gtk::manage(new RTImage("save-small", Gtk::ICON_SIZE_BUTTON))); saveRef->set_alignment(0.5f, 0.5f); saveRef->set_tooltip_markup(M("TP_ICM_SAVEREFERENCE_TOOLTIP")); iVBox->pack_start(*saveRef, Gtk::PACK_SHRINK); @@ -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,14 +271,14 @@ 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); neutral = Gtk::manage (new Gtk::Button (M ("TP_ICM_NEUTRAL"))); setExpandAlignProperties (neutral, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); - RTImage *resetImg = Gtk::manage (new RTImage ("undo-small.png", "redo-small.png")); + RTImage *resetImg = Gtk::manage (new RTImage ("undo-small", Gtk::ICON_SIZE_BUTTON)); setExpandAlignProperties (resetImg, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); neutral->set_image (*resetImg); neutralconn = neutral->signal_pressed().connect ( sigc::mem_fun (*this, &ICMPanel::neutral_pressed) ); @@ -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")); @@ -339,7 +343,7 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iu preser = Gtk::manage(new Adjuster(M("TP_ICM_WORKING_PRESER"), 0., 100., 0.5, 0.)); preser->setAdjusterListener(this); - + preBox = Gtk::manage(new Gtk::Box()); preBox->pack_start(*preser, Gtk::PACK_EXPAND_WIDGET); redVBox->pack_start(*separator1, Gtk::PACK_SHRINK); @@ -351,7 +355,7 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iu redVBox->pack_start(*cielab, Gtk::PACK_SHRINK); redVBox->pack_start(*labgridcie, Gtk::PACK_EXPAND_WIDGET, 4); - + redFrame->add(*redVBox); wGamma->setAdjusterListener(this); @@ -373,19 +377,21 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iu Gtk::Label* abIntentLbl = Gtk::manage(new Gtk::Label(M("TP_ICM_PROFILEINTENT"))); riaHBox->pack_start(*abIntentLbl, Gtk::PACK_SHRINK); aRendIntent.reset(new PopUpButton()); - aRendIntent->addEntry("intent-perceptual.png", M("PREFERENCES_INTENT_PERCEPTUAL")); - aRendIntent->addEntry("intent-relative.png", M("PREFERENCES_INTENT_RELATIVE")); - aRendIntent->addEntry("intent-saturation.png", M("PREFERENCES_INTENT_SATURATION")); - aRendIntent->addEntry("intent-absolute.png", M("PREFERENCES_INTENT_ABSOLUTE")); + aRendIntent->addEntry("intent-perceptual", M("PREFERENCES_INTENT_PERCEPTUAL")); + aRendIntent->addEntry("intent-relative", M("PREFERENCES_INTENT_RELATIVE")); + aRendIntent->addEntry("intent-saturation", M("PREFERENCES_INTENT_SATURATION")); + aRendIntent->addEntry("intent-absolute", M("PREFERENCES_INTENT_ABSOLUTE")); aRendIntent->setSelected(1); 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 @@ -416,10 +422,10 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iu Gtk::Label* outputIntentLbl = Gtk::manage(new Gtk::Label(M("TP_ICM_PROFILEINTENT"))); riHBox->pack_start(*outputIntentLbl, Gtk::PACK_SHRINK); oRendIntent.reset(new PopUpButton()); - oRendIntent->addEntry("intent-perceptual.png", M("PREFERENCES_INTENT_PERCEPTUAL")); - oRendIntent->addEntry("intent-relative.png", M("PREFERENCES_INTENT_RELATIVE")); - oRendIntent->addEntry("intent-saturation.png", M("PREFERENCES_INTENT_SATURATION")); - oRendIntent->addEntry("intent-absolute.png", M("PREFERENCES_INTENT_ABSOLUTE")); + oRendIntent->addEntry("intent-perceptual", M("PREFERENCES_INTENT_PERCEPTUAL")); + oRendIntent->addEntry("intent-relative", M("PREFERENCES_INTENT_RELATIVE")); + oRendIntent->addEntry("intent-saturation", M("PREFERENCES_INTENT_SATURATION")); + oRendIntent->addEntry("intent-absolute", M("PREFERENCES_INTENT_ABSOLUTE")); oRendIntent->setSelected(1); oRendIntent->show(); riHBox->pack_start(*oRendIntent->buttonGroup, Gtk::PACK_EXPAND_PADDING); @@ -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); @@ -1663,8 +1694,8 @@ void ICMPanel::wprimChanged() break; } } - - + + if (ColorManagementParams::Primaries(wprim->get_active_row_number()) == ColorManagementParams::Primaries::DEFAULT) { if (wProfNames->get_active_text() == "Rec2020") { redx->setValue(0.708); @@ -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); @@ -1764,7 +1803,7 @@ void ICMPanel::wprimChanged() labgridcie->set_sensitive(false); will->set_sensitive(true); } - + } willChanged (); @@ -2177,9 +2216,9 @@ void ICMPanel::setBatchMode(bool batchMode) iVBox->reorder_child(*iunchanged, 5); removeIfThere(this, saveRef); oProfNames->append(M("GENERAL_UNCHANGED")); - oRendIntent->addEntry("template-24.png", M("GENERAL_UNCHANGED")); + oRendIntent->addEntry("template-24", M("GENERAL_UNCHANGED")); oRendIntent->show(); - aRendIntent->addEntry("template-24.png", M("GENERAL_UNCHANGED")); + aRendIntent->addEntry("template-24", M("GENERAL_UNCHANGED")); aRendIntent->show(); wProfNames->append(M("GENERAL_UNCHANGED")); wTRC->append(M("GENERAL_UNCHANGED")); 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/imagearea.cc b/rtgui/imagearea.cc index 22e140e7d..a1387db02 100644 --- a/rtgui/imagearea.cc +++ b/rtgui/imagearea.cc @@ -155,7 +155,10 @@ void ImageArea::setInfoText (Glib::ustring text) // update font fontd.set_weight (Pango::WEIGHT_BOLD); - fontd.set_size (10 * Pango::SCALE); + const int fontSize = 10; // pt + // Non-absolute size is defined in "Pango units" and shall be multiplied by + // Pango::SCALE from "pt": + fontd.set_size (fontSize * Pango::SCALE); context->set_font_description (fontd); // create text layout @@ -788,14 +791,14 @@ Gtk::SizeRequestMode ImageArea::get_request_mode_vfunc () const void ImageArea::get_preferred_height_vfunc (int &minimum_height, int &natural_height) const { - minimum_height= 50 * RTScalable::getScale(); - natural_height = 300 * RTScalable::getScale(); + minimum_height = RTScalable::scalePixelSize(50); + natural_height = RTScalable::scalePixelSize(300); } void ImageArea::get_preferred_width_vfunc (int &minimum_width, int &natural_width) const { - minimum_width = 100 * RTScalable::getScale(); - natural_width = 400 * RTScalable::getScale(); + minimum_width = RTScalable::scalePixelSize(100); + natural_width = RTScalable::scalePixelSize(400); } void ImageArea::get_preferred_height_for_width_vfunc (int width, int &minimum_height, int &natural_height) const diff --git a/rtgui/indclippedpanel.cc b/rtgui/indclippedpanel.cc index df9f632ab..72f68887f 100644 --- a/rtgui/indclippedpanel.cc +++ b/rtgui/indclippedpanel.cc @@ -21,31 +21,30 @@ #include "imagearea.h" #include "rtimage.h" -IndicateClippedPanel::IndicateClippedPanel (ImageArea* ia) : imageArea(ia) +IndicateClippedPanel::IndicateClippedPanel (ImageArea* ia) : + Fon("focusscreen-on"), + Foff("focusscreen-off"), + Son("contrastmask-on"), + Soff("contrastmask-off"), + iF(Gtk::manage(new RTImage(Foff, Gtk::ICON_SIZE_LARGE_TOOLBAR))), + iS(Gtk::manage(new RTImage(Soff, Gtk::ICON_SIZE_LARGE_TOOLBAR))), + imageArea(ia) { - - iFon = new RTImage ("focusscreen-on.png"); - iFoff = new RTImage ("focusscreen-off.png"); - - // for previewSharpMask, needs to be replaced with different icons - iSon = new RTImage ("contrastmask-on.png"); - iSoff = new RTImage ("contrastmask-off.png"); - previewFocusMask = Gtk::manage (new Gtk::ToggleButton ()); previewFocusMask->set_relief(Gtk::RELIEF_NONE); previewFocusMask->set_tooltip_markup (M("MAIN_TOOLTIP_PREVIEWFOCUSMASK")); - previewFocusMask->set_image(*iFoff); + previewFocusMask->set_image(*iF); previewSharpMask = Gtk::manage (new Gtk::ToggleButton ()); previewSharpMask->set_relief(Gtk::RELIEF_NONE); previewSharpMask->set_tooltip_markup (M("MAIN_TOOLTIP_PREVIEWSHARPMASK")); - previewSharpMask->set_image(*iSoff); + previewSharpMask->set_image(*iS); Glib::ustring tt; indClippedH = Gtk::manage (new Gtk::ToggleButton ()); indClippedH->set_relief(Gtk::RELIEF_NONE); - indClippedH->add (*Gtk::manage (new RTImage ("warning-highlights.png"))); + indClippedH->add (*Gtk::manage (new RTImage ("warning-highlights", Gtk::ICON_SIZE_LARGE_TOOLBAR))); tt = Glib::ustring::compose("%1\n%2 = %3", M("MAIN_TOOLTIP_INDCLIPPEDH"), M("MAIN_TOOLTIP_THRESHOLD"), options.highlightThreshold); if (tt.find("<") == Glib::ustring::npos && tt.find(">") == Glib::ustring::npos) { @@ -56,7 +55,7 @@ IndicateClippedPanel::IndicateClippedPanel (ImageArea* ia) : imageArea(ia) indClippedS = Gtk::manage (new Gtk::ToggleButton ()); indClippedS->set_relief(Gtk::RELIEF_NONE); - indClippedS->add (*Gtk::manage (new RTImage ("warning-shadows.png"))); + indClippedS->add (*Gtk::manage (new RTImage ("warning-shadows", Gtk::ICON_SIZE_LARGE_TOOLBAR))); tt = Glib::ustring::compose("%1\n%2 = %3", M("MAIN_TOOLTIP_INDCLIPPEDS"), M("MAIN_TOOLTIP_THRESHOLD"), options.shadowThreshold); if (tt.find("<") == Glib::ustring::npos && tt.find(">") == Glib::ustring::npos) { @@ -102,7 +101,7 @@ void IndicateClippedPanel::silentlyDisableSharpMask () { ConnectionBlocker conBlocker(connSharpMask); previewSharpMask->set_active(false); - previewSharpMask->set_image(*iSoff); + iS->set_from_icon_name(Soff); } @@ -141,8 +140,8 @@ void IndicateClippedPanel::buttonToggled (Gtk::ToggleButton* tb) } imageArea->sharpMaskSelected(previewSharpMask->get_active()); - previewFocusMask->set_image(previewFocusMask->get_active() ? *iFon : *iFoff); - previewSharpMask->set_image(previewSharpMask->get_active() ? *iSon : *iSoff); + iF->set_from_icon_name(previewFocusMask->get_active() ? Fon : Foff); + iS->set_from_icon_name(previewSharpMask->get_active() ? Son : Soff); connFocusMask.block(false); connSharpMask.block(false); @@ -158,10 +157,4 @@ void IndicateClippedPanel::buttonToggled (Gtk::ToggleButton* tb) } } -IndicateClippedPanel::~IndicateClippedPanel () -{ - delete iFon; - delete iFoff; - delete iSon; - delete iSoff; -} +IndicateClippedPanel::~IndicateClippedPanel () {} diff --git a/rtgui/indclippedpanel.h b/rtgui/indclippedpanel.h index 6be0a6c40..aeeb14315 100644 --- a/rtgui/indclippedpanel.h +++ b/rtgui/indclippedpanel.h @@ -22,13 +22,19 @@ #include class ImageArea; +class RTImage; class IndicateClippedPanel : public Gtk::Box { protected: - Gtk::Image* iFon, *iFoff, *iSon, *iSoff; + const Glib::ustring Fon; + const Glib::ustring Foff; + const Glib::ustring Son; + const Glib::ustring Soff; + RTImage* const iF; + RTImage* const iS; Gtk::ToggleButton* previewSharpMask; Gtk::ToggleButton* previewFocusMask; Gtk::ToggleButton* indClippedH; diff --git a/rtgui/inspector.cc b/rtgui/inspector.cc index 675da51c6..e2f9df35b 100644 --- a/rtgui/inspector.cc +++ b/rtgui/inspector.cc @@ -590,7 +590,7 @@ void Inspector::switchImage (const Glib::ustring &fullPath) bool Inspector::doSwitchImage() { Glib::ustring fullPath = next_image_path; - + // we first check the size of the list, it may have been changed in Preference if (images.size() > size_t(options.maxInspectorBuffers)) { // deleting the last entries @@ -688,14 +688,14 @@ Gtk::SizeRequestMode Inspector::get_request_mode_vfunc () const void Inspector::get_preferred_height_vfunc (int &minimum_height, int &natural_height) const { - minimum_height= 50 * RTScalable::getScale(); - natural_height = 300 * RTScalable::getScale(); + minimum_height = RTScalable::scalePixelSize(50); + natural_height = RTScalable::scalePixelSize(300); } void Inspector::get_preferred_width_vfunc (int &minimum_width, int &natural_width) const { - minimum_width = 50 * RTScalable::getScale(); - natural_width = 200 * RTScalable::getScale(); + minimum_width = RTScalable::scalePixelSize(50); + natural_width = RTScalable::scalePixelSize(200); } void Inspector::get_preferred_height_for_width_vfunc (int width, int &minimum_height, int &natural_height) const diff --git a/rtgui/iptcpanel.cc b/rtgui/iptcpanel.cc index 1134b36da..b6cf84fcb 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* const addKWImg = Gtk::manage(new RTImage("add-small", Gtk::ICON_SIZE_BUTTON)); setExpandAlignProperties(addKWImg, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); - Gtk::Image* delKWImg = Gtk::manage( new RTImage ("remove-small.png") ); + Gtk::Image* const delKWImg = Gtk::manage(new RTImage("remove-small", Gtk::ICON_SIZE_BUTTON)); 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* const addSCImg = Gtk::manage(new RTImage("add-small", Gtk::ICON_SIZE_BUTTON)); setExpandAlignProperties(addSCImg, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); - Gtk::Image* delSCImg = Gtk::manage( new RTImage ("remove-small.png") ); + Gtk::Image* const delSCImg = Gtk::manage(new RTImage("remove-small", Gtk::ICON_SIZE_BUTTON)); 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", Gtk::ICON_SIZE_BUTTON))); 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", Gtk::ICON_SIZE_BUTTON))); 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", Gtk::ICON_SIZE_BUTTON))); 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", Gtk::ICON_SIZE_BUTTON))); 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/labgrid.cc b/rtgui/labgrid.cc index bc3b806de..0773b85c9 100644 --- a/rtgui/labgrid.cc +++ b/rtgui/labgrid.cc @@ -1,5 +1,5 @@ /** -*- C++ -*- - * + * * This file is part of RawTherapee. * * Copyright (c) 2017 Alberto Griggio @@ -43,6 +43,7 @@ #include "../rtengine/color.h" #include "options.h" #include "rtimage.h" +#include "rtscalable.h" using rtengine::Color; @@ -86,7 +87,7 @@ LabGridArea::LabGridArea(rtengine::ProcEvent evt, const Glib::ustring &msg, bool isDragged(false), low_enabled(enable_low), ciexy_enabled(ciexy) - + { set_can_focus(false); // prevent moving the grid while you're moving a point add_events(Gdk::EXPOSURE_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK | Gdk::POINTER_MOTION_MASK); @@ -120,7 +121,7 @@ void LabGridArea::setParams(double la, double lb, double ha, double hb, double g gre_y = rtengine::LIM(gy, lo, hi); whi_x = rtengine::LIM(wx, lo, hi); whi_y = rtengine::LIM(wy, lo, hi); - + queue_draw(); if (notify) { notifyListener(); @@ -171,296 +172,254 @@ void LabGridArea::setListener(ToolPanelListener *l) void LabGridArea::on_style_updated () { - setDirty(true); queue_draw (); } -bool LabGridArea::on_draw(const ::Cairo::RefPtr &crf) +bool LabGridArea::on_draw(const ::Cairo::RefPtr &cr) { - Gtk::Allocation allocation = get_allocation(); - allocation.set_x(0); - allocation.set_y(0); - - // setDrawRectangle will allocate the backbuffer Surface - if (setDrawRectangle(Cairo::FORMAT_ARGB32, allocation)) { - setDirty(true); - } - - if (!isDirty() || !surfaceCreated()) { + // Do not update drawing area if widget is not realized + if (!get_realized()) { return true; } Glib::RefPtr style = get_style_context(); - Gtk::Border padding = getPadding(style); // already scaled - Cairo::RefPtr cr = getContext(); + Gtk::Border padding = getPadding(style); + // Retrieve drawing area size + Gtk::Allocation allocation = get_allocation(); + allocation.set_x(0); + allocation.set_y(0); + int width = allocation.get_width(); + int height = allocation.get_height(); - if (isDirty()) { - int width = allocation.get_width(); - int height = allocation.get_height(); + // Setup drawing + cr->set_line_cap(Cairo::LINE_CAP_SQUARE); + cr->set_operator (Cairo::OPERATOR_OVER); - int s = RTScalable::getScale(); + // Render background + style->render_background(cr, + static_cast(inset + padding.get_left()) - 1., + static_cast(inset + padding.get_top()) - 1., + static_cast(width - 2 * inset - padding.get_right() - padding.get_left()) + 2., + static_cast(height - 2 * inset - padding.get_top() - padding.get_bottom()) + 2. + ); - cr->set_line_cap(Cairo::LINE_CAP_SQUARE); + // Drawing the cells + cr->translate(static_cast(inset + padding.get_left()), + static_cast(inset + padding.get_top())); + cr->set_antialias(Cairo::ANTIALIAS_NONE); + width -= 2 * inset + padding.get_right() + padding.get_left(); + height -= 2 * inset + padding.get_top() + padding.get_bottom(); - // clear background - cr->set_source_rgba (0., 0., 0., 0.); - cr->set_operator (Cairo::OPERATOR_CLEAR); - cr->paint (); - cr->set_operator (Cairo::OPERATOR_OVER); - style->render_background(cr, - inset * s + padding.get_left() - s, - inset * s + padding.get_top() - s, - width - 2 * inset * s - padding.get_right() - padding.get_left() + 2 * s, - height - 2 * inset * s - padding.get_top() - padding.get_bottom() + 2 * s - ); + // flip y: + cr->translate(0., static_cast(height)); + cr->scale(1., -1.); - // drawing the cells - cr->translate(inset * s + padding.get_left(), inset * s + padding.get_top()); - cr->set_antialias(Cairo::ANTIALIAS_NONE); - width -= 2 * inset * s + padding.get_right() + padding.get_left(); - height -= 2 * inset * s + padding.get_top() + padding.get_bottom(); - - // flip y: - cr->translate(0, height); - cr->scale(1., -1.); - - if (! ciexy_enabled) {//draw cells for Labgrid - int cells = 8; - float step = 12000.f / float(cells/2); - double cellW = double(width) / double(cells); - double cellH = double(height) / double(cells); - double cellYMin = 0.; - double cellYMax = std::floor(cellH); - for (int j = 0; j < cells; j++) { - double cellXMin = 0.; - double cellXMax = std::floor(cellW); - for (int i = 0; i < cells; i++) { - float R, G, B; - float x, y, z; - int ii = i - cells/2; - int jj = j - cells/2; - float a = step * (ii + 0.5f); - float b = step * (jj + 0.5f); - Color::Lab2XYZ(25000.f, a, b, x, y, z); - Color::xyz2srgb(x, y, z, R, G, B); - cr->set_source_rgb(R / 65535.f, G / 65535.f, B / 65535.f); - cr->rectangle( - cellXMin, - cellYMin, - cellXMax - cellXMin - (i == cells-1 ? 0. : double(s)), - cellYMax - cellYMin - (j == cells-1 ? 0. : double(s)) - ); - cellXMin = cellXMax; - cellXMax = std::floor(cellW * double(i+2) + 0.01); - cr->fill(); - } - cellYMin = cellYMax; - cellYMax = std::floor(cellH * double(j+2) + 0.01); - } - } else {//cells for CIE xy - int cells = 600; - float step = 1.f / float(cells); - double cellW = double(width) / double(cells); - double cellH = double(height) / double(cells); - double cellYMin = 0.; - double cellYMax = std::floor(cellH); - //various approximations to simulate Ciexy curves graph - // this graph is not accurate...I replace curve by polygon or parabolic - float xa = 0.2653f / (0.7347f - 0.17f); - float xb = -0.17f * xa; - //linear values - // float ax = (0.1f - 0.6f) / 0.08f; - // float bx = 0.6f; - // float ax0 = -0.1f / (0.17f - 0.08f); - // float bx0 = -0.17f* ax0; - float axs = (0.2653f - 0.65f) / (0.7347f - 0.35f); - float bxs = 0.65f - axs * 0.35f; - // float axss = (0.7f - 0.83f) / (0.3f - 0.1f); - // float bxss = 0.7f - 0.3f * axss; - //float bxsss = 0.65f; - //float axsss = (0.83f - bxsss) / 0.05f; - //float bx4s = 0.83f; - float ay = 0.4f; - float by = 0.4f; - for (int j = 0; j < cells; j++) { - double cellXMin = 0.; - double cellXMax = std::floor(cellW); - for (int i = 0; i < cells; i++) { - float R, G, B; - float XX, YY, ZZ; - float x = 1.1f * step * i - 0.1f;//Graph CIExy with -0.1 to 1 - must be enough - float y = 1.1f * step * j - 0.1;//Graph CIExy with -0.1 to 1 - must be enough - if(y > 0.5f) { - YY = 0.6f; - } else { - YY = ay * y + by; - } - XX = (x * YY) / y; - ZZ = ((1.f - x - y)* YY) / y; - float yr = xa * x + xb; - // float y0 = ax0 * x + bx0; - // float y1 = ax * x + bx; - float y2 = axs * x + bxs; - // float y3 = axss * x + bxss; - // float y4 = axsss * x + bxsss; - // float y5 = bx4s; - float y6 = 22.52f * x * x - 7.652f * x + 0.65f;//parabolic passing in x=0.17 y=0 - x=0.1 y =0.11 - x=0 y= 0.65 - float y3 = -1.266666f * x * x -0.170002f * x + 0.859686f;//other parabolic for green passing in x=0.35 y=0.65 - x=0.20 y=0.775 - x=0.1 y=0.83 - float y4 = -60.71428f * x * x + 6.821428f * x + 0.65f;//other parabolic x=0 y=0.65 - x=0.03 y=0.8 - x=0.07 y=0.83 - //small difference in the connection of the 2 last parabolic - - Color::xyz2srgb(XX, YY, ZZ, R, G, B); - //replace color by gray - if(y < yr && x > 0.17f) { - R = 0.7f; G = 0.7f; B = 0.7f; - } - /* - if(y < y0 && x <= 0.17f && x >= 0.08f) { - R = 0.7f; G = 0.7f; B = 0.7f; - } - if(y < y1 && x < 0.08f) { - R = 0.7f; G = 0.7f; B = 0.7f; - } - */ - if(y < y6 && y < 0.65f && x < 0.17f) { - R = 0.7f; G = 0.7f; B = 0.7f; - } - - if(y > y2 && x > 0.35f) {//0.35 - R = 0.7f; G = 0.7f; B = 0.7f; - } - if(y > y3 && x <= 0.35f && x > 0.06f) {//0.35 - R = 0.7f; G = 0.7f; B = 0.7f; - } - if(y > y4 && x <= 0.06f) { - R = 0.7f; G = 0.7f; B = 0.7f; - } - // if(y > y5 && x >= 0.07f && x <= 0.1f) { - // R = 0.7f; G = 0.7f; B = 0.7f; - // } - - cr->set_source_rgb(R , G , B); - - cr->rectangle( - cellXMin, - cellYMin, - cellXMax - cellXMin - (i == cells-1 ? 0. : 0.f * double(s)), - cellYMax - cellYMin - (j == cells-1 ? 0. : 0.f * double(s)) - ); - cellXMin = cellXMax; - cellXMax = std::floor(cellW * double(i+2) + 0.001); - cr->fill(); - } - cellYMin = cellYMax; - cellYMax = std::floor(cellH * double(j+2) + 0.001); + if (! ciexy_enabled) {//draw cells for Labgrid + const int cells = 8; + const float step = 12000.f / static_cast(cells/2); + const double cellW = static_cast(width) / static_cast(cells); + const double cellH = static_cast(height) / static_cast(cells); + double cellYMin = 0.; + double cellYMax = std::floor(cellH); + for (int j = 0; j < cells; j++) { + double cellXMin = 0.; + double cellXMax = std::floor(cellW); + for (int i = 0; i < cells; i++) { + float R, G, B; + float x, y, z; + const int ii = i - cells/2; + const int jj = j - cells/2; + const float a = step * static_cast(ii + 0.5f); + const float b = step * static_cast(jj + 0.5f); + Color::Lab2XYZ(25000.f, a, b, x, y, z); + Color::xyz2srgb(x, y, z, R, G, B); + cr->set_source_rgb(R / 65535.f, G / 65535.f, B / 65535.f); + cr->rectangle( + cellXMin, + cellYMin, + cellXMax - cellXMin - (i == cells-1 ? 0. : 1.), + cellYMax - cellYMin - (j == cells-1 ? 0. : 1.) + ); + cellXMin = cellXMax; + cellXMax = std::floor(cellW * static_cast(i+2) + 0.01); + cr->fill(); } + cellYMin = cellYMax; + cellYMax = std::floor(cellH * static_cast(j+2) + 0.01); } - // drawing the connection line - cr->set_antialias(Cairo::ANTIALIAS_DEFAULT); - float loa, hia, lob, hib, grx, gry, whx, why; - loa = .5 * (width + width * low_a); - hia = .5 * (width + width * high_a); - lob = .5 * (height + height * low_b); - hib = .5 * (height + height * high_b); - grx = .5 * (width + width * gre_x); - gry = .5 * (height + height * gre_y); - whx = .5 * (width + width * whi_x); - why = .5 * (height + height * whi_y); - cr->set_line_width(1.5f * double(s)); - cr->set_source_rgb(0.6, 0.6, 0.6); + } else {//cells for CIE xy + const int cells = 600; + const float step = 1.f / static_cast(cells); + const double cellW = static_cast(width) / static_cast(cells); + const double cellH = static_cast(height) / static_cast(cells); + double cellYMin = 0.; + double cellYMax = std::floor(cellH); + //various approximations to simulate Ciexy curves graph + // this graph is not accurate...I replace curve by polygon or parabolic + const float xa = 0.2653f / (0.7347f - 0.17f); + const float xb = -0.17f * xa; + //linear values + const float axs = (0.2653f - 0.65f) / (0.7347f - 0.35f); + const float bxs = 0.65f - axs * 0.35f; + const float ay = 0.4f; + const float by = 0.4f; + for (int j = 0; j < cells; j++) { + double cellXMin = 0.; + double cellXMax = std::floor(cellW); + for (int i = 0; i < cells; i++) { + float R, G, B; + float XX, YY, ZZ; + const float x = 1.1f * step * static_cast(i) - 0.1f;//Graph CIExy with -0.1 to 1 - must be enough + const float y = 1.1f * step * static_cast(j) - 0.1;//Graph CIExy with -0.1 to 1 - must be enough + if(y > 0.5f) { + YY = 0.6f; + } else { + YY = ay * y + by; + } + XX = (x * YY) / y; + ZZ = ((1.f - x - y)* YY) / y; + const float yr = xa * x + xb; + const float y2 = axs * x + bxs; + const float y6 = 22.52f * x * x - 7.652f * x + 0.65f;//parabolic passing in x=0.17 y=0 - x=0.1 y =0.11 - x=0 y= 0.65 + const float y3 = -1.266666f * x * x -0.170002f * x + 0.859686f;//other parabolic for green passing in x=0.35 y=0.65 - x=0.20 y=0.775 - x=0.1 y=0.83 + const float y4 = -60.71428f * x * x + 6.821428f * x + 0.65f;//other parabolic x=0 y=0.65 - x=0.03 y=0.8 - x=0.07 y=0.83 + //small difference in the connection of the 2 last parabolic + + Color::xyz2srgb(XX, YY, ZZ, R, G, B); + //replace color by gray + if(y < yr && x > 0.17f) { + R = 0.7f; G = 0.7f; B = 0.7f; + } + if(y < y6 && y < 0.65f && x < 0.17f) { + R = 0.7f; G = 0.7f; B = 0.7f; + } + if(y > y2 && x > 0.35f) {//0.35 + R = 0.7f; G = 0.7f; B = 0.7f; + } + if(y > y3 && x <= 0.35f && x > 0.06f) {//0.35 + R = 0.7f; G = 0.7f; B = 0.7f; + } + if(y > y4 && x <= 0.06f) { + R = 0.7f; G = 0.7f; B = 0.7f; + } + + cr->set_source_rgb(R , G , B); + cr->rectangle( + cellXMin, + cellYMin, + cellXMax - cellXMin, + cellYMax - cellYMin); + cellXMin = cellXMax; + cellXMax = std::floor(cellW * static_cast(i+2) + 0.001); + cr->fill(); + } + cellYMin = cellYMax; + cellYMax = std::floor(cellH * static_cast(j+2) + 0.001); + } + } + + // Drawing the connection line + cr->set_antialias(Cairo::ANTIALIAS_DEFAULT); + const double loa = .5 * (static_cast(width) + static_cast(width) * low_a); + const double hia = .5 * (static_cast(width) + static_cast(width) * high_a); + const double lob = .5 * (static_cast(height) + static_cast(height) * low_b); + const double hib = .5 * (static_cast(height) + static_cast(height) * high_b); + const double grx = .5 * (static_cast(width) + static_cast(width) * gre_x); + const double gry = .5 * (static_cast(height) + static_cast(height) * gre_y); + const double whx = .5 * (static_cast(width) + static_cast(width) * whi_x); + const double why = .5 * (static_cast(height) + static_cast(height) * whi_y); + cr->set_line_width(1.5); + cr->set_source_rgb(0.6, 0.6, 0.6); + cr->move_to(loa, lob); + cr->line_to(hia, hib); + if (ciexy_enabled) { cr->move_to(loa, lob); + cr->line_to(grx, gry); + cr->move_to(grx, gry); cr->line_to(hia, hib); - if (ciexy_enabled) { - cr->move_to(loa, lob); - cr->line_to(grx, gry); - cr->move_to(grx, gry); - cr->line_to(hia, hib); + } + cr->stroke(); + + if (ciexy_enabled) { + cr->set_line_width(0.2); + cr->set_source_rgb(0.1, 0.1, 0.1); + //draw horiz and vertical lines + for(int i = 0; i < 22; i++) { + cr->move_to(0.04545 * static_cast(i * width), 0.); + cr->line_to(0.04545 * static_cast(i * width), static_cast(height)); } + for(int i = 0; i < 22; i++) { + cr->move_to(0., 0.04545 * static_cast(i * height)); + cr->line_to(static_cast(width), 0.04545 * static_cast(i * height)); + } + + cr->stroke(); + //draw abciss and ordonate + cr->set_line_width(1.); + cr->set_source_rgb(0.4, 0., 0.); + cr->move_to(0.04545 * static_cast(2 * width), 0.); + cr->line_to(0.04545 * static_cast(2 * width), static_cast(height)); + cr->move_to(0., 0.04545 * static_cast(2 * height)); + cr->line_to(static_cast(width), 0.04545 * static_cast(2 * height)); cr->stroke(); - if (ciexy_enabled) { - //to convert from / to Ciexy <=> area - // pos_area = 1.81818 * (x + 0.1) - 1 - // x = 0.55 * (pos_area + 1) - 0.1 - cr->set_line_width(0.2f * double(s)); - cr->set_source_rgb(0.1, 0.1, 0.1); - //draw horiz and vertical lines - for(int i = 0; i < 22; i++) { - cr->move_to(0.04545 * i * width, 0.); - cr->line_to(0.04545 * i * width, height); - } - for(int i = 0; i < 22; i++) { - cr->move_to(0., 0.04545 * i * height ); - cr->line_to(width, 0.04545 * i * height); - } + //draw 0 and 1 with circle and lines + cr->set_line_width(1.2); + cr->set_source_rgb(0.4, 0., 0.); + cr->arc(0.06 * static_cast(width), + 0.06 * static_cast(height), + 0.016 * static_cast(width), + 0., + 2. * rtengine::RT_PI); + cr->stroke(); + cr->set_line_width(1.5); + cr->set_source_rgb(0.4, 0., 0.); + cr->move_to(0.985 * static_cast(width), 0.08 * static_cast(height)); + cr->line_to(0.985 * static_cast(width), 0.055 * static_cast(height)); - cr->stroke(); - //draw abciss and ordonate - cr->set_line_width(1.f * double(s)); - cr->set_source_rgb(0.4, 0., 0.); - cr->move_to(0.04545 * 2 * width, 0.); - cr->line_to(0.04545 * 2 * width, height); - cr->move_to(0., 0.04545 * 2 * height ); - cr->line_to(width, 0.04545 * 2 * height); - cr->stroke(); + cr->move_to(0.07 * static_cast(width), 0.99 * static_cast(height)); + cr->line_to(0.07 * static_cast(width), 0.965 * static_cast(height)); - //draw 0 and 1 with circle and lines - cr->set_line_width(1.2f * double(s)); - cr->set_source_rgb(0.4, 0., 0.); - cr->arc(0.06 * width, 0.06 * height, 0.016 * width, 0, 2. * rtengine::RT_PI); - cr->stroke(); - cr->set_line_width(1.5f * double(s)); - cr->set_source_rgb(0.4, 0., 0.); - cr->move_to(0.985 * width, 0.08 * height); - cr->line_to(0.985 * width, 0.055 * height); + cr->stroke(); + } - cr->move_to(0.07 * width, 0.99 * height); - cr->line_to(0.07 * width, 0.965 * height); - - cr->stroke(); - - } - - - // drawing points - if (low_enabled) { - cr->set_source_rgb(0.1, 0.1, 0.1);//black for red in Ciexy - if (litPoint == LOW) { - cr->arc(loa, lob, 5 * s, 0, 2. * rtengine::RT_PI); - } else { - cr->arc(loa, lob, 3 * s, 0, 2. * rtengine::RT_PI); - } - cr->fill(); - } - - if (ciexy_enabled) { - cr->set_source_rgb(0.5, 0.5, 0.5);//gray for green - if (litPoint == GRE) { - cr->arc(grx, gry, 5 * s, 0, 2. * rtengine::RT_PI); - } else { - cr->arc(grx, gry, 3 * s, 0, 2. * rtengine::RT_PI); - } - cr->fill(); - } - - if (ciexy_enabled) {//White Point - cr->set_source_rgb(1., 1., 1.);//White - cr->arc(whx, why, 3 * s, 0, 2. * rtengine::RT_PI); - cr->fill(); - } - - cr->set_source_rgb(0.9, 0.9, 0.9);//white for blue en Ciexy - if (litPoint == HIGH) { - cr->arc(hia, hib, 5 * s, 0, 2. * rtengine::RT_PI); + // Drawing points + if (low_enabled) { + cr->set_source_rgb(0.1, 0.1, 0.1);//black for red in Ciexy + if (litPoint == LOW) { + cr->arc(loa, lob, 5., 0., 2. * rtengine::RT_PI); } else { - cr->arc(hia, hib, 3 * s, 0, 2. * rtengine::RT_PI); + cr->arc(loa, lob, 3., 0., 2. * rtengine::RT_PI); } cr->fill(); } - copySurface(crf); + if (ciexy_enabled) { + cr->set_source_rgb(0.5, 0.5, 0.5);//gray for green + if (litPoint == GRE) { + cr->arc(grx, gry, 5., 0., 2. * rtengine::RT_PI); + } else { + cr->arc(grx, gry, 3., 0., 2. * rtengine::RT_PI); + } + cr->fill(); + } + + if (ciexy_enabled) {//White Point + cr->set_source_rgb(1., 1., 1.);//White + cr->arc(whx, why, 3., 0., 2. * rtengine::RT_PI); + cr->fill(); + } + + cr->set_source_rgb(0.9, 0.9, 0.9);//white for blue en Ciexy + if (litPoint == HIGH) { + cr->arc(hia, hib, 5., 0., 2. * rtengine::RT_PI); + } else { + cr->arc(hia, hib, 3., 0., 2. * rtengine::RT_PI); + } + cr->fill(); + return false; } @@ -468,7 +427,7 @@ bool LabGridArea::on_draw(const ::Cairo::RefPtr &crf) bool LabGridArea::on_button_press_event(GdkEventButton *event) { if (event->button == 1) { - if (!ciexy_enabled) { + if (!ciexy_enabled) { if (event->type == GDK_2BUTTON_PRESS) { switch (litPoint) { case NONE: @@ -527,11 +486,10 @@ bool LabGridArea::on_motion_notify_event(GdkEventMotion *event) State oldLitPoint = litPoint; - int s = RTScalable::getScale(); - int width = get_allocated_width() - 2 * inset * s - padding.get_right() - padding.get_left(); - int height = get_allocated_height() - 2 * inset * s - padding.get_top() - padding.get_bottom(); - const float mouse_x = std::min(double(std::max(event->x - inset * s - padding.get_right(), 0.)), double(width)); - const float mouse_y = std::min(double(std::max(get_allocated_height() - 1 - event->y - inset * s - padding.get_bottom(), 0.)), double(height)); + const int width = get_allocated_width() - 2 * inset - padding.get_right() - padding.get_left(); + const int height = get_allocated_height() - 2 * inset - padding.get_top() - padding.get_bottom(); + const float mouse_x = std::min(double(std::max(event->x - inset - padding.get_right(), 0.)), double(width)); + const float mouse_y = std::min(double(std::max(get_allocated_height() - 1 - event->y - inset - padding.get_bottom(), 0.)), double(height)); const float ma = (2.f * mouse_x - width) / width; const float mb = (2.f * mouse_y - height) / height; if (isDragged) { @@ -555,12 +513,12 @@ bool LabGridArea::on_motion_notify_event(GdkEventMotion *event) queue_draw(); } else { litPoint = NONE; - float la = low_a; - float lb = low_b; - float ha = high_a; - float hb = high_b; - float gx = gre_x; - float gy = gre_y; + const float la = low_a; + const float lb = low_b; + const float ha = high_a; + const float hb = high_b; + const float gx = gre_x; + const float gy = gre_y; const float thrs = 0.05f; const float distlo = (la - ma) * (la - ma) + (lb - mb) * (lb - mb); const float disthi = (ha - ma) * (ha - ma) + (hb - mb) * (hb - mb); @@ -590,8 +548,8 @@ void LabGridArea::get_preferred_width_vfunc(int &minimum_width, int &natural_wid { Glib::RefPtr style = get_style_context(); Gtk::Border padding = getPadding(style); // already scaled - int s = RTScalable::getScale(); - int p = padding.get_left() + padding.get_right(); + const int s = RTScalable::scalePixelSize(1); + const int p = padding.get_left() + padding.get_right(); minimum_width = 50 * s + p; natural_width = 150 * s + p; // same as GRAPH_SIZE from mycurve.h @@ -643,7 +601,7 @@ LabGrid::LabGrid(rtengine::ProcEvent evt, const Glib::ustring &msg, bool enable_ Gtk::Button *reset = Gtk::manage(new Gtk::Button()); reset->set_tooltip_markup(M("ADJUSTER_RESET_TO_DEFAULT")); if(!ciexy) {//disabled for Cie xy - reset->add(*Gtk::manage(new RTImage("undo-small.png", "redo-small.png"))); + reset->add(*Gtk::manage(new RTImage("undo-small", Gtk::ICON_SIZE_BUTTON))); } reset->signal_button_release_event().connect(sigc::mem_fun(*this, &LabGrid::resetPressed)); @@ -662,5 +620,5 @@ LabGrid::LabGrid(rtengine::ProcEvent evt, const Glib::ustring &msg, bool enable_ bool LabGrid::resetPressed(GdkEventButton *event) { grid.reset(event->state & GDK_CONTROL_MASK); - return false; + return false; } diff --git a/rtgui/labgrid.h b/rtgui/labgrid.h index 0ed4cdf98..d486574b4 100644 --- a/rtgui/labgrid.h +++ b/rtgui/labgrid.h @@ -1,5 +1,5 @@ /** -*- C++ -*- - * + * * This file is part of RawTherapee. * * Copyright (c) 2017 Alberto Griggio @@ -43,11 +43,11 @@ #include "toolpanel.h" -class LabGridArea final : public Gtk::DrawingArea, public BackBuffer { +class LabGridArea final : public Gtk::DrawingArea { private: rtengine::ProcEvent evt; Glib::ustring evtMsg; - + enum State { NONE, HIGH, LOW, GRE}; State litPoint; double low_a; @@ -58,7 +58,7 @@ private: double gre_y; double whi_x; double whi_y; - + double defaultLow_a; double defaultHigh_a; double defaultLow_b; @@ -96,7 +96,7 @@ public: bool ciexyEnabled() const; void setciexyEnabled(bool yes); - bool on_draw(const ::Cairo::RefPtr &crf) override; + bool on_draw(const ::Cairo::RefPtr &cr) override; void on_style_updated () override; bool on_button_press_event(GdkEventButton *event) override; bool on_button_release_event(GdkEventButton *event) override; @@ -112,7 +112,7 @@ private: LabGridArea grid; bool resetPressed(GdkEventButton *event); - + public: LabGrid(rtengine::ProcEvent evt, const Glib::ustring &msg, bool enable_low=true, bool ciexy=false); diff --git a/rtgui/lensgeom.cc b/rtgui/lensgeom.cc index e8febf8e2..0064ecee3 100644 --- a/rtgui/lensgeom.cc +++ b/rtgui/lensgeom.cc @@ -48,7 +48,7 @@ LensGeometry::LensGeometry () : FoldableToolPanel(this, TOOL_NAME, M("TP_LENSGEO pack_start (*fill); autoCrop = Gtk::manage (new Gtk::Button (M("TP_LENSGEOM_AUTOCROP"))); - autoCrop->set_image (*Gtk::manage (new RTImage ("crop-auto-small.png"))); + autoCrop->set_image (*Gtk::manage (new RTImage ("crop-auto-small", Gtk::ICON_SIZE_BUTTON))); autoCrop->get_style_context()->add_class("independent"); pack_start (*autoCrop, Gtk::PACK_SHRINK, 2); diff --git a/rtgui/lensprofile.cc b/rtgui/lensprofile.cc index 65c962b7b..0e17b3f40 100644 --- a/rtgui/lensprofile.cc +++ b/rtgui/lensprofile.cc @@ -64,7 +64,7 @@ LensProfilePanel::LensProfilePanel() : lensfunCameras(Gtk::manage((new MyComboBox()))), lensfunLensesLbl(Gtk::manage((new Gtk::Label(M("EXIFFILTER_LENS"))))), lensfunLenses(Gtk::manage((new MyComboBox()))), - warning(Gtk::manage(new RTImage("warning.png"))), + warning(Gtk::manage(new RTImage("warning", Gtk::ICON_SIZE_LARGE_TOOLBAR))), ckbUseDist(Gtk::manage((new Gtk::CheckButton(M("TP_LENSPROFILE_USE_GEOMETRIC"))))), ckbUseVign(Gtk::manage((new Gtk::CheckButton(M("TP_LENSPROFILE_USE_VIGNETTING"))))), ckbUseCA(Gtk::manage((new Gtk::CheckButton(M("TP_LENSPROFILE_USE_CA"))))) @@ -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); @@ -165,7 +165,7 @@ LensProfilePanel::LensProfilePanel() : // Attach grids: nodesFrame->add(*modesGrid); distFrame->add(*distGrid); - + pack_start(*nodesFrame, Gtk::PACK_EXPAND_WIDGET); pack_start(*distFrame, Gtk::PACK_EXPAND_WIDGET); @@ -242,7 +242,7 @@ void LensProfilePanel::read(const rtengine::procparams::ProcParams* pp, const Pa if (pp->lensProf.lfAutoMatch()) { if (metadata) { - c = db->findCamera(metadata->getMake(), metadata->getModel()); + c = db->findCamera(metadata->getMake(), metadata->getModel(), true); setLensfunCamera(c.getMake(), c.getModel()); } } else if (pp->lensProf.lfManual()) { @@ -259,7 +259,7 @@ void LensProfilePanel::read(const rtengine::procparams::ProcParams* pp, const Pa } - /* + /* if (!batchMode && !checkLensfunCanCorrect(true)) { if (corrLensfunAutoRB->get_active()) { corrOffRB->set_active(true); @@ -270,26 +270,26 @@ void LensProfilePanel::read(const rtengine::procparams::ProcParams* pp, const Pa if (!batchMode && corrLensfunManualRB->get_active() && !checkLensfunCanCorrect(false)) { corrOffRB->set_active(true); - } + } */ - + ckbUseDist->set_active(pp->lensProf.useDist); ckbUseVign->set_active(pp->lensProf.useVign); ckbUseCA->set_active(pp->lensProf.useCA); - + if (pedited) { corrUnchangedRB->set_active(!pedited->lensProf.lcMode); ckbUseDist->set_inconsistent(!pedited->lensProf.useDist); ckbUseVign->set_inconsistent(!pedited->lensProf.useVign); ckbUseCA->set_inconsistent(!pedited->lensProf.useCA); - + if (!pedited->lensProf.lfCameraMake || !pedited->lensProf.lfCameraModel) { setLensfunCamera("", ""); } if (!pedited->lensProf.lfLens) { setLensfunLens(""); } - + ckbUseDist->set_sensitive(true); ckbUseVign->set_sensitive(true); ckbUseCA->set_sensitive(true); @@ -297,7 +297,7 @@ void LensProfilePanel::read(const rtengine::procparams::ProcParams* pp, const Pa lcModeChanged = lcpFileChanged = useDistChanged = useVignChanged = useCAChanged = false; useLensfunChanged = lensfunAutoChanged = lensfunCameraChanged = lensfunLensChanged = false; - + updateLensfunWarning(); enableListener(); conUseDist.block(false); @@ -436,11 +436,12 @@ void LensProfilePanel::onUseCAChanged() void LensProfilePanel::setBatchMode(bool yes) { FoldableToolPanel::setBatchMode(yes); - + corrUnchangedRB->set_group(corrGroup); 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() @@ -500,7 +501,7 @@ void LensProfilePanel::onCorrModeChanged(const Gtk::RadioButton* rbChanged) ckbUseCA->set_sensitive(false); mode = M("GENERAL_NONE"); - + } else if (rbChanged == corrLensfunAutoRB) { lcModeChanged = true; useLensfunChanged = true; @@ -513,14 +514,14 @@ void LensProfilePanel::onCorrModeChanged(const Gtk::RadioButton* rbChanged) ckbUseVign->set_sensitive(true); ckbUseCA->set_sensitive(true); - + const bool disabled = disableListener(); if (batchMode) { setLensfunCamera("", ""); setLensfunLens(""); } else if (metadata) { const LFDatabase* const db = LFDatabase::getInstance(); - const LFCamera c = db->findCamera(metadata->getMake(), metadata->getModel()); + const LFCamera c = db->findCamera(metadata->getMake(), metadata->getModel(), true); const LFLens l = db->findLens(c, metadata->getLens()); setLensfunCamera(c.getMake(), c.getModel()); setLensfunLens(l.getLens()); @@ -528,9 +529,9 @@ void LensProfilePanel::onCorrModeChanged(const Gtk::RadioButton* rbChanged) if (disabled) { enableListener(); } - + mode = M("TP_LENSPROFILE_CORRECTION_AUTOMATCH"); - + } else if (rbChanged == corrLensfunManualRB) { lcModeChanged = true; useLensfunChanged = true; @@ -544,7 +545,7 @@ void LensProfilePanel::onCorrModeChanged(const Gtk::RadioButton* rbChanged) ckbUseCA->set_sensitive(false); mode = M("TP_LENSPROFILE_CORRECTION_MANUAL"); - + } else if (rbChanged == corrLcpFileRB) { lcModeChanged = true; useLensfunChanged = true; @@ -554,7 +555,7 @@ void LensProfilePanel::onCorrModeChanged(const Gtk::RadioButton* rbChanged) updateDisabled(true); mode = M("TP_LENSPROFILE_CORRECTION_LCPFILE"); - + } else if (rbChanged == corrUnchangedRB) { lcModeChanged = false; useLensfunChanged = false; @@ -800,7 +801,7 @@ void LensProfilePanel::updateLensfunWarning() return; } - const LFCamera c = db->findCamera((*itc)[lf->lensfunModelCam.make], (*itc)[lf->lensfunModelCam.model]); + const LFCamera c = db->findCamera((*itc)[lf->lensfunModelCam.make], (*itc)[lf->lensfunModelCam.model], false); const auto itl = lensfunLenses->get_active(); if (!itl) { diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index e7725a005..38e84154e 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -241,113 +241,113 @@ void Locallab::read(const rtengine::procparams::ProcParams* pp, const ParamsEdit // TODO Manage it with read function in controlspotpanel.cc // Add existent spots based on pp - ControlSpotPanel::SpotRow* const r = new ControlSpotPanel::SpotRow(); + ControlSpotPanel::SpotRow r; for (int i = 0; i < (int)pp->locallab.spots.size(); i++) { - r->name = pp->locallab.spots.at(i).name; - r->isvisible = pp->locallab.spots.at(i).isvisible; + r.name = pp->locallab.spots.at(i).name; + r.isvisible = pp->locallab.spots.at(i).isvisible; if (pp->locallab.spots.at(i).shape == "ELI") { - r->shape = 0; + r.shape = 0; } else { - r->shape = 1; + r.shape = 1; } if (pp->locallab.spots.at(i).prevMethod == "hide") { - r->prevMethod = 0; + r.prevMethod = 0; } else { - r->prevMethod = 1; + r.prevMethod = 1; } if (pp->locallab.spots.at(i).spotMethod == "norm") { - r->spotMethod = 0; + r.spotMethod = 0; } else if(pp->locallab.spots.at(i).spotMethod == "exc"){ - r->spotMethod = 1; + r.spotMethod = 1; } else if (pp->locallab.spots.at(i).spotMethod == "full"){ - r->spotMethod = 2; + r.spotMethod = 2; } - r->sensiexclu = pp->locallab.spots.at(i).sensiexclu; - r->structexclu = pp->locallab.spots.at(i).structexclu; + r.sensiexclu = pp->locallab.spots.at(i).sensiexclu; + r.structexclu = pp->locallab.spots.at(i).structexclu; if (pp->locallab.spots.at(i).shapeMethod == "IND") { - r->shapeMethod = 0; + r.shapeMethod = 0; } else if (pp->locallab.spots.at(i).shapeMethod == "SYM") { - r->shapeMethod = 1; + r.shapeMethod = 1; } else if (pp->locallab.spots.at(i).shapeMethod == "INDSL") { - r->shapeMethod = 2; + r.shapeMethod = 2; } else { - r->shapeMethod = 3; + r.shapeMethod = 3; } if (pp->locallab.spots.at(i).avoidgamutMethod == "NONE") { - r->avoidgamutMethod = 0; + r.avoidgamutMethod = 0; } else if (pp->locallab.spots.at(i).avoidgamutMethod == "LAB") { - r->avoidgamutMethod = 1; + r.avoidgamutMethod = 1; } else if (pp->locallab.spots.at(i).avoidgamutMethod == "XYZ") { - r->avoidgamutMethod= 2; + r.avoidgamutMethod= 2; } else if (pp->locallab.spots.at(i).avoidgamutMethod == "XYZREL") { - r->avoidgamutMethod= 3; + r.avoidgamutMethod= 3; } else if (pp->locallab.spots.at(i).avoidgamutMethod == "MUNS") { - r->avoidgamutMethod= 4; + r.avoidgamutMethod= 4; } - r->locX = pp->locallab.spots.at(i).loc.at(0); - r->locXL = pp->locallab.spots.at(i).loc.at(1); - r->locY = pp->locallab.spots.at(i).loc.at(2); - r->locYT = pp->locallab.spots.at(i).loc.at(3); - r->centerX = pp->locallab.spots.at(i).centerX; - r->centerY = pp->locallab.spots.at(i).centerY; - r->circrad = pp->locallab.spots.at(i).circrad; + r.locX = pp->locallab.spots.at(i).loc.at(0); + r.locXL = pp->locallab.spots.at(i).loc.at(1); + r.locY = pp->locallab.spots.at(i).loc.at(2); + r.locYT = pp->locallab.spots.at(i).loc.at(3); + r.centerX = pp->locallab.spots.at(i).centerX; + r.centerY = pp->locallab.spots.at(i).centerY; + r.circrad = pp->locallab.spots.at(i).circrad; if (pp->locallab.spots.at(i).qualityMethod == "enh") { - r->qualityMethod = 0; + r.qualityMethod = 0; } else { - r->qualityMethod = 1; + r.qualityMethod = 1; } - r->transit = pp->locallab.spots.at(i).transit; - r->transitweak = pp->locallab.spots.at(i).transitweak; - r->transitgrad = pp->locallab.spots.at(i).transitgrad; - r->feather = pp->locallab.spots.at(i).feather; - r->struc = pp->locallab.spots.at(i).struc; - r->thresh = pp->locallab.spots.at(i).thresh; - r->iter = pp->locallab.spots.at(i).iter; - r->balan = pp->locallab.spots.at(i).balan; - r->balanh = pp->locallab.spots.at(i).balanh; - r->colorde = pp->locallab.spots.at(i).colorde; - r->colorscope = pp->locallab.spots.at(i).colorscope; - r->avoidrad = pp->locallab.spots.at(i).avoidrad; - r->hishow = pp->locallab.spots.at(i).hishow; - r->activ = pp->locallab.spots.at(i).activ; - r->blwh = pp->locallab.spots.at(i).blwh; - r->recurs = pp->locallab.spots.at(i).recurs; - r->laplac = true; //pp->locallab.spots.at(i).laplac; - r->deltae = pp->locallab.spots.at(i).deltae; - r->scopemask = pp->locallab.spots.at(i).scopemask; - r->denoichmask = pp->locallab.spots.at(i).denoichmask; - r->shortc = pp->locallab.spots.at(i).shortc; - r->lumask = pp->locallab.spots.at(i).lumask; - //r->savrest = pp->locallab.spots.at(i).savrest; + r.transit = pp->locallab.spots.at(i).transit; + r.transitweak = pp->locallab.spots.at(i).transitweak; + r.transitgrad = pp->locallab.spots.at(i).transitgrad; + r.feather = pp->locallab.spots.at(i).feather; + r.struc = pp->locallab.spots.at(i).struc; + r.thresh = pp->locallab.spots.at(i).thresh; + r.iter = pp->locallab.spots.at(i).iter; + r.balan = pp->locallab.spots.at(i).balan; + r.balanh = pp->locallab.spots.at(i).balanh; + r.colorde = pp->locallab.spots.at(i).colorde; + r.colorscope = pp->locallab.spots.at(i).colorscope; + r.avoidrad = pp->locallab.spots.at(i).avoidrad; + r.hishow = pp->locallab.spots.at(i).hishow; + r.activ = pp->locallab.spots.at(i).activ; + r.blwh = pp->locallab.spots.at(i).blwh; + r.recurs = pp->locallab.spots.at(i).recurs; + r.laplac = true; //pp->locallab.spots.at(i).laplac; + r.deltae = pp->locallab.spots.at(i).deltae; + r.scopemask = pp->locallab.spots.at(i).scopemask; + r.denoichmask = pp->locallab.spots.at(i).denoichmask; + r.shortc = pp->locallab.spots.at(i).shortc; + r.lumask = pp->locallab.spots.at(i).lumask; + //r.savrest = pp->locallab.spots.at(i).savrest; if (pp->locallab.spots.at(i).complexMethod == "sim") { - r->complexMethod = 0; + r.complexMethod = 0; } else if (pp->locallab.spots.at(i).complexMethod == "mod") { - r->complexMethod = 1; + r.complexMethod = 1; } else if (pp->locallab.spots.at(i).complexMethod == "all") { - r->complexMethod = 2; + r.complexMethod = 2; } if (pp->locallab.spots.at(i).wavMethod == "D2") { - r->wavMethod = 0; + r.wavMethod = 0; } else if (pp->locallab.spots.at(i).wavMethod == "D4") { - r->wavMethod = 1; + r.wavMethod = 1; } else if (pp->locallab.spots.at(i).wavMethod == "D6") { - r->wavMethod = 2; + r.wavMethod = 2; } else if (pp->locallab.spots.at(i).wavMethod == "D10") { - r->wavMethod = 3; + r.wavMethod = 3; } else if (pp->locallab.spots.at(i).wavMethod == "D14") { - r->wavMethod = 4; + r.wavMethod = 4; } expsettings->addControlSpot(r); @@ -401,7 +401,6 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited const int spotPanelEvent = expsettings->getEventType(); int spotIndex; - ControlSpotPanel::SpotRow* r; rtengine::procparams::LocallabParams::LocallabSpot* newSpot; int imW, imH; // Size of image @@ -412,57 +411,57 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited int toolNb; switch (spotPanelEvent) { - case (ControlSpotPanel::SpotCreation): // Spot creation event + case (ControlSpotPanel::SpotCreation): { // Spot creation event // Spot creation (default initialization) newSpot = new LocallabParams::LocallabSpot(); - r = new ControlSpotPanel::SpotRow(); - r->name = newSpot->name = M("TP_LOCALLAB_SPOTNAME"); - r->isvisible = newSpot->isvisible; + ControlSpotPanel::SpotRow r; + r.name = newSpot->name = M("TP_LOCALLAB_SPOTNAME"); + r.isvisible = newSpot->isvisible; if (newSpot->shape == "ELI") { - r->shape = 0; + r.shape = 0; } else { - r->shape = 1; + r.shape = 1; } if (newSpot->prevMethod == "hide") { - r->prevMethod = 0; + r.prevMethod = 0; } else { - r->prevMethod = 1; + r.prevMethod = 1; } if (newSpot->spotMethod == "norm") { - r->spotMethod = 0; + r.spotMethod = 0; } else if(newSpot->spotMethod == "exc") { - r->spotMethod = 1; + r.spotMethod = 1; } else if(newSpot->spotMethod == "full") { - r->spotMethod = 2; + r.spotMethod = 2; } - r->sensiexclu = newSpot->sensiexclu; - r->structexclu = newSpot->structexclu; + r.sensiexclu = newSpot->sensiexclu; + r.structexclu = newSpot->structexclu; if (newSpot->shapeMethod == "IND") { - r->shapeMethod = 0; + r.shapeMethod = 0; } else if (newSpot->shapeMethod == "SYM") { - r->shapeMethod = 1; + r.shapeMethod = 1; } else if (newSpot->shapeMethod == "INDSL") { - r->shapeMethod = 2; + r.shapeMethod = 2; } else { - r->shapeMethod = 3; + r.shapeMethod = 3; } if (newSpot->avoidgamutMethod == "NONE") { - r->avoidgamutMethod = 0; + r.avoidgamutMethod = 0; } else if (newSpot->avoidgamutMethod == "LAB") { - r->avoidgamutMethod = 1; + r.avoidgamutMethod = 1; } else if (newSpot->avoidgamutMethod == "XYZ") { - r->avoidgamutMethod = 2; + r.avoidgamutMethod = 2; } else if (newSpot->avoidgamutMethod == "XYZREL") { - r->avoidgamutMethod = 3; + r.avoidgamutMethod = 3; } else if (newSpot->avoidgamutMethod == "MUNS") { - r->avoidgamutMethod = 4; + r.avoidgamutMethod = 4; } // Calculate spot size and center position according to preview area @@ -483,63 +482,63 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited } } - r->locX = newSpot->loc.at(0); - r->locXL = newSpot->loc.at(1); - r->locY = newSpot->loc.at(2); - r->locYT = newSpot->loc.at(3); - r->centerX = newSpot->centerX; - r->centerY = newSpot->centerY; + r.locX = newSpot->loc.at(0); + r.locXL = newSpot->loc.at(1); + r.locY = newSpot->loc.at(2); + r.locYT = newSpot->loc.at(3); + r.centerX = newSpot->centerX; + r.centerY = newSpot->centerY; - r->circrad = newSpot->circrad; + r.circrad = newSpot->circrad; if (newSpot->qualityMethod == "enh") { - r->qualityMethod = 0; + r.qualityMethod = 0; } else { - r->qualityMethod = 1; + r.qualityMethod = 1; } - r->transit = newSpot->transit; - r->transitweak = newSpot->transitweak; - r->transitgrad = newSpot->transitgrad; - r->feather = newSpot->feather; - r->struc = newSpot->struc; - r->thresh = newSpot->thresh; - r->iter = newSpot->iter; - r->balan = newSpot->balan; - r->balanh = newSpot->balanh; - r->colorde = newSpot->colorde; - r->colorscope = newSpot->colorscope; - r->avoidrad = newSpot->avoidrad; - r->hishow = newSpot->hishow; - r->activ = newSpot->activ; - r->blwh = newSpot->blwh; - r->recurs = newSpot->recurs; - r->laplac = newSpot->laplac; - r->deltae = newSpot->deltae; - r->scopemask = newSpot->scopemask; - r->denoichmask = newSpot->denoichmask; - r->shortc = newSpot->shortc; - r->lumask = newSpot->lumask; - //r->savrest = newSpot->savrest; + r.transit = newSpot->transit; + r.transitweak = newSpot->transitweak; + r.transitgrad = newSpot->transitgrad; + r.feather = newSpot->feather; + r.struc = newSpot->struc; + r.thresh = newSpot->thresh; + r.iter = newSpot->iter; + r.balan = newSpot->balan; + r.balanh = newSpot->balanh; + r.colorde = newSpot->colorde; + r.colorscope = newSpot->colorscope; + r.avoidrad = newSpot->avoidrad; + r.hishow = newSpot->hishow; + r.activ = newSpot->activ; + r.blwh = newSpot->blwh; + r.recurs = newSpot->recurs; + r.laplac = newSpot->laplac; + r.deltae = newSpot->deltae; + r.scopemask = newSpot->scopemask; + r.denoichmask = newSpot->denoichmask; + r.shortc = newSpot->shortc; + r.lumask = newSpot->lumask; + //r.savrest = newSpot->savrest; if (newSpot->complexMethod == "sim") { - r->complexMethod = 0; + r.complexMethod = 0; } else if (newSpot->complexMethod == "mod") { - r->complexMethod = 1; + r.complexMethod = 1; } else if (newSpot->complexMethod == "all") { - r->complexMethod = 2; + r.complexMethod = 2; } if (newSpot->wavMethod == "D2") { - r->wavMethod = 0; + r.wavMethod = 0; } else if (newSpot->wavMethod == "D4") { - r->wavMethod = 1; + r.wavMethod = 1; } else if (newSpot->wavMethod == "D6") { - r->wavMethod = 2; + r.wavMethod = 2; } else if (newSpot->wavMethod == "D10") { - r->wavMethod = 3; + r.wavMethod = 3; } else if (newSpot->wavMethod == "D14") { - r->wavMethod = 4; + r.wavMethod = 4; } expsettings->addControlSpot(r); @@ -584,6 +583,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited // Note: No need to manage pedited as batch mode is deactivated for Locallab break; + } case (ControlSpotPanel::SpotDeletion): // Spot deletion event // Get deleted spot index in ProcParams and update it @@ -724,7 +724,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited break; - case (ControlSpotPanel::SpotDuplication): // Spot duplication event + case (ControlSpotPanel::SpotDuplication): { // Spot duplication event newSpot = nullptr; spotIndex = expsettings->getSelectedSpot(); @@ -740,53 +740,53 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited } // Spot creation (initialization at currently selected spot) - r = new ControlSpotPanel::SpotRow(); - r->name = newSpot->name = newSpot->name + " - " + M("TP_LOCALLAB_DUPLSPOTNAME"); - r->isvisible = newSpot->isvisible; + ControlSpotPanel::SpotRow r; + r.name = newSpot->name = newSpot->name + " - " + M("TP_LOCALLAB_DUPLSPOTNAME"); + r.isvisible = newSpot->isvisible; if (newSpot->shape == "ELI") { - r->shape = 0; + r.shape = 0; } else { - r->shape = 1; + r.shape = 1; } if (newSpot->prevMethod == "hide") { - r->prevMethod = 0; + r.prevMethod = 0; } else { - r->prevMethod = 1; + r.prevMethod = 1; } if (newSpot->spotMethod == "norm") { - r->spotMethod = 0; + r.spotMethod = 0; } else if (newSpot->spotMethod == "exc") { - r->spotMethod = 1; + r.spotMethod = 1; } else if (newSpot->spotMethod == "full") { - r->spotMethod = 2; + r.spotMethod = 2; } - r->sensiexclu = newSpot->sensiexclu; - r->structexclu = newSpot->structexclu; + r.sensiexclu = newSpot->sensiexclu; + r.structexclu = newSpot->structexclu; if (newSpot->shapeMethod == "IND") { - r->shapeMethod = 0; + r.shapeMethod = 0; } else if (newSpot->shapeMethod == "SYM") { - r->shapeMethod = 1; + r.shapeMethod = 1; } else if (newSpot->shapeMethod == "INDSL") { - r->shapeMethod = 2; + r.shapeMethod = 2; } else { - r->shapeMethod = 3; + r.shapeMethod = 3; } //printf("n0=%f n1=%f n2=%f n3=%f\n", (double) newSpot->loc.at(0), (double) newSpot->loc.at(1), (double) newSpot->loc.at(2), (double) newSpot->loc.at(3)); if (newSpot->avoidgamutMethod == "NONE") { - r->avoidgamutMethod = 0; + r.avoidgamutMethod = 0; } else if (newSpot->avoidgamutMethod == "LAB") { - r->avoidgamutMethod = 1; + r.avoidgamutMethod = 1; } else if (newSpot->avoidgamutMethod== "XYZ") { - r->avoidgamutMethod = 2; + r.avoidgamutMethod = 2; } else if (newSpot->avoidgamutMethod== "XYZREL") { - r->avoidgamutMethod = 3; + r.avoidgamutMethod = 3; } else if (newSpot->avoidgamutMethod== "MUNS") { - r->avoidgamutMethod = 4; + r.avoidgamutMethod = 4; } //printf("n0=%f n1=%f n2=%f n3=%f\n", (double) newSpot->loc.at(0), (double) newSpot->loc.at(1), (double) newSpot->loc.at(2), (double) newSpot->loc.at(3)); @@ -810,70 +810,71 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited } } - if(r->spotMethod != 2) { - r->locX = newSpot->loc.at(0); - r->locXL = newSpot->loc.at(1); - r->locY = newSpot->loc.at(2); - r->locYT = newSpot->loc.at(3); + if(r.spotMethod != 2) { + r.locX = newSpot->loc.at(0); + r.locXL = newSpot->loc.at(1); + r.locY = newSpot->loc.at(2); + r.locYT = newSpot->loc.at(3); } else { - r->locX = 3000.; - r->locXL = 3000.; - r->locY = 3000.; - r->locYT = 3000.; + r.locX = 3000.; + r.locXL = 3000.; + r.locY = 3000.; + r.locYT = 3000.; } - r->centerX = newSpot->centerX; - r->centerY = newSpot->centerY; + r.centerX = newSpot->centerX; + r.centerY = newSpot->centerY; - r->circrad = newSpot->circrad; + r.circrad = newSpot->circrad; if (newSpot->qualityMethod == "enh") { - r->qualityMethod = 0; + r.qualityMethod = 0; } else { - r->qualityMethod = 1; + r.qualityMethod = 1; } - r->transit = newSpot->transit; - r->transitweak = newSpot->transitweak; - r->transitgrad = newSpot->transitgrad; - r->feather = newSpot->feather; - r->struc = newSpot->struc; - r->thresh = newSpot->thresh; - r->iter = newSpot->iter; - r->balan = newSpot->balan; - r->balanh = newSpot->balanh; - r->colorde = newSpot->colorde; - r->colorscope = newSpot->colorscope; - r->avoidrad = newSpot->avoidrad; - r->activ = newSpot->activ; - r->blwh = newSpot->blwh; - r->recurs = newSpot->recurs; - r->laplac = newSpot->laplac; - r->deltae = newSpot->deltae; - r->scopemask = newSpot->scopemask; - r->denoichmask = newSpot->denoichmask; - r->shortc = newSpot->shortc; - r->lumask = newSpot->lumask; - //r->savrest = newSpot->savrest; + r.transit = newSpot->transit; + r.transitweak = newSpot->transitweak; + r.transitgrad = newSpot->transitgrad; + r.feather = newSpot->feather; + r.struc = newSpot->struc; + r.thresh = newSpot->thresh; + r.iter = newSpot->iter; + r.balan = newSpot->balan; + r.balanh = newSpot->balanh; + r.colorde = newSpot->colorde; + r.colorscope = newSpot->colorscope; + r.avoidrad = newSpot->avoidrad; + r.hishow = newSpot->hishow; + r.activ = newSpot->activ; + r.blwh = newSpot->blwh; + r.recurs = newSpot->recurs; + r.laplac = newSpot->laplac; + r.deltae = newSpot->deltae; + r.scopemask = newSpot->scopemask; + r.denoichmask = newSpot->denoichmask; + r.shortc = newSpot->shortc; + r.lumask = newSpot->lumask; + //r.savrest = newSpot->savrest; if (newSpot->complexMethod == "sim") { - r->complexMethod = 0; + r.complexMethod = 0; } else if (newSpot->complexMethod == "mod") { - r->complexMethod = 1; + r.complexMethod = 1; } else if (newSpot->complexMethod == "all") { - r->complexMethod = 2; + r.complexMethod = 2; } if (newSpot->wavMethod == "D2") { - r->wavMethod = 0; + r.wavMethod = 0; } else if (newSpot->wavMethod == "D4") { - r->wavMethod = 1; + r.wavMethod = 1; } else if (newSpot->wavMethod == "D6") { - r->wavMethod = 2; + r.wavMethod = 2; } else if (newSpot->wavMethod == "D10") { - r->wavMethod = 3; + r.wavMethod = 3; } else if (newSpot->wavMethod == "D14") { - r->wavMethod = 4; + r.wavMethod = 4; } expsettings->addControlSpot(r); @@ -915,9 +916,10 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited // Note: No need to manage pedited as batch mode is deactivated for Locallab break; + } - case (ControlSpotPanel::SpotAllVisibilityChanged): // Event when updating visibility of all spots - r = expsettings->getSpot(expsettings->getSelectedSpot()); + case (ControlSpotPanel::SpotAllVisibilityChanged): { // Event when updating visibility of all spots + const auto r = expsettings->getSpot(expsettings->getSelectedSpot()); // ProcParams update for (size_t i = 0; i < pp->locallab.spots.size(); i++) { @@ -927,10 +929,11 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited // Note: No need to manage pedited as batch mode is deactivated for Locallab break; + } default: // Spot or locallab GUI updated if (pp->locallab.spots.size() > 0) { - r = expsettings->getSpot(expsettings->getSelectedSpot()); + const auto r = expsettings->getSpot(expsettings->getSelectedSpot()); // ProcParams update if (pp->locallab.selspot < (int)pp->locallab.spots.size()) { diff --git a/rtgui/locallabtools.cc b/rtgui/locallabtools.cc index 8bf88724c..9cdd74c9c 100644 --- a/rtgui/locallabtools.cc +++ b/rtgui/locallabtools.cc @@ -141,12 +141,12 @@ LocallabTool::LocallabTool(Gtk::Box* content, Glib::ustring toolName, Glib::ustr titleLabel->set_markup(Glib::ustring("") + escapeHtmlChars(UILabel) + Glib::ustring("")); titleLabel->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER); titleBox->pack_start(*titleLabel, Gtk::PACK_EXPAND_WIDGET, 0); - + Gtk::EventBox* const removeEvBox = Gtk::manage(new Gtk::EventBox()); // Glue to manage mouse clicking event on remove image removeEvBox->set_can_focus(false); removeEvBox->set_above_child(false); // To have priority over expander title bar when mouse clicking on remove image removeEvBox->signal_button_release_event().connect(sigc::mem_fun(this, &LocallabTool::on_remove_change)); - RTImage* const removeImage = Gtk::manage(new RTImage("cancel-small.png")); + RTImage* const removeImage = Gtk::manage(new RTImage("cancel-small", Gtk::ICON_SIZE_BUTTON)); removeEvBox->add(*removeImage); titleBox->pack_end(*removeEvBox, Gtk::PACK_SHRINK, 1); if (needMode) { @@ -161,7 +161,7 @@ LocallabTool::LocallabTool(Gtk::Box* content, Glib::ustring toolName, Glib::ustr titleBox->pack_end(*separator, Gtk::PACK_SHRINK, 0); if (need100Percent) { - RTImage* const titleImage = Gtk::manage(new RTImage("one-to-one-small.png")); + RTImage* const titleImage = Gtk::manage(new RTImage("one-to-one-small", Gtk::ICON_SIZE_BUTTON)); titleImage->set_tooltip_text(M("TP_GENERAL_11SCALE_TOOLTIP")); titleBox->pack_end(*titleImage, Gtk::PACK_SHRINK, 0); } @@ -490,7 +490,7 @@ LocallabColor::LocallabColor(): conthrcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CONTTHR"), 0.0, 100.0, 0.5, 0.))), gridmerFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LABGRIDMERG")))), labgridmerg(Gtk::manage(new LabGrid(EvLocallabLabGridmergValue, M("TP_LOCALLAB_LABGRID_VALUES"), false))), - merlucol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MERLUCOL"), 0.0, 100.0, 0.5, 32., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), + merlucol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MERLUCOL"), 0.0, 100.0, 0.5, 32., Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))), expmaskcol(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWC")))), mergecolFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_MERGECOLFRA")))), showmaskcolMethod(Gtk::manage(new MyComboBoxText())), @@ -526,9 +526,9 @@ LocallabColor::LocallabColor(): LLmaskcolshapewav(static_cast(mask2CurveEditorGwav->addCurve(CT_Flat, "L(L)", nullptr, false, false))), csThresholdcol(Gtk::manage(new ThresholdAdjuster(M("TP_LOCALLAB_CSTHRESHOLDBLUR"), 0, 9, 0, 0, 6, 5, 0, false))) { - + set_orientation(Gtk::ORIENTATION_VERTICAL); - + float R, G, B; std::vector six_shape; @@ -848,8 +848,8 @@ LocallabColor::LocallabColor(): // colBox3->pack_start(*invmaskc); exprecov->add(*colBox3, false); pack_start(*exprecov, false, false); - - + + ToolParamBlock* const gradcolBox = Gtk::manage(new ToolParamBlock()); gradcolBox->pack_start(*strcol); gradcolBox->pack_start(*strcolab); @@ -1541,7 +1541,7 @@ void LocallabColor::setDefaults(const rtengine::procparams::ProcParams* defParam lowthresc->setDefault((double)defSpot.lowthresc); higthresc->setDefault((double)defSpot.higthresc); decayc->setDefault((double)defSpot.decayc); - + } // Note: No need to manage pedited as batch mode is deactivated for Locallab @@ -1621,7 +1621,7 @@ void LocallabColor::adjusterChanged(Adjuster* a, double newval) } if (a == recothresc) { - + if (listener) { listener->panelChanged(Evlocallabrecothresc, recothresc->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")"); @@ -2117,7 +2117,7 @@ void LocallabColor::updateGUIToMode(const modeType new_type) if (enaColorMask->get_active()) { maskusablec->show(); maskunusablec->hide(); - + } else { maskusablec->hide(); maskunusablec->show(); @@ -2154,7 +2154,7 @@ void LocallabColor::updateGUIToMode(const modeType new_type) if (enaColorMask->get_active()) { maskusablec->show(); maskunusablec->hide(); - + } else { maskusablec->hide(); maskunusablec->show(); @@ -2371,7 +2371,7 @@ void LocallabColor::enaColorMaskChanged() maskusablec->hide(); maskunusablec->show(); } - + if (isLocActivated && exp->getEnabled()) { if (listener) { if (enaColorMask->get_active()) { @@ -2568,9 +2568,10 @@ LocallabExposure::LocallabExposure(): expfat(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_FATFRA")))), fatamount(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATAMOUNT"), 1., 100., 1., 1.))), fatdetail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATDETAIL"), -100., 300., 1., 0.))), + fatsatur(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_FATSAT")))), norm(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_EQUIL")))), fatlevel(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATLEVEL"), 0.5, 2.0, 0.01, 1.))), - fatanchor(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATANCHOR"), 0.1, 100.0, 0.01, 50., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), + fatanchor(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATANCHOR"), 0.1, 100.0, 0.01, 50., Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))), gamex(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMC"), 0.5, 3.0, 0.05, 1.))), sensiex(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 60))), structexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUCCOL"), 0, 100, 1, 0))), @@ -2617,10 +2618,12 @@ LocallabExposure::LocallabExposure(): strmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTR"), -2., 2., 0.05, 0.))), angmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -180., 180., 0.1, 0.))), mask2expCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))), - Lmaskexpshape(static_cast(mask2expCurveEditorG->addCurve(CT_Diagonal, "L(L)"))) + Lmaskexpshape(static_cast(mask2expCurveEditorG->addCurve(CT_Diagonal, "L(L)"))), + Evlocallabtmosatur(ProcEventMapper::getInstance()->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_TMO_SATUR")) + { set_orientation(Gtk::ORIENTATION_VERTICAL); - + const LocallabParams::LocallabSpot defSpot; // Parameter Exposure specific widgets @@ -2705,6 +2708,7 @@ LocallabExposure::LocallabExposure(): decaye->setAdjusterListener(this); setExpandAlignProperties(exprecove, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); normConn = norm->signal_toggled().connect(sigc::mem_fun(*this, &LocallabExposure::normChanged)); + fatsaturConn = fatsatur->signal_toggled().connect(sigc::mem_fun(*this, &LocallabExposure::fatsaturChanged)); inversexConn = inversex->signal_toggled().connect(sigc::mem_fun(*this, &LocallabExposure::inversexChanged)); inversex->set_tooltip_text(M("TP_LOCALLAB_INVERS_TOOLTIP")); @@ -2799,6 +2803,7 @@ LocallabExposure::LocallabExposure(): // fatBox->pack_start(*norm); // fatBox->pack_start(*fatlevel); fatBox->pack_start(*fatanchor); + fatBox->pack_start(*fatsatur); // fatFrame->add(*fatBox); expfat->add(*fatBox, false); // pack_start(*fatFrame); @@ -2985,6 +2990,7 @@ void LocallabExposure::disableListener() exnoiseMethodConn.block(true); inversexConn.block(true); normConn.block(true); + fatsaturConn.block(true); showmaskexpMethodConn.block(true); showmaskexpMethodConninv.block(true); enaExpMaskConn.block(true); @@ -2999,6 +3005,7 @@ void LocallabExposure::enableListener() exnoiseMethodConn.block(false); inversexConn.block(false); normConn.block(false); + fatsaturConn.block(false); showmaskexpMethodConn.block(false); showmaskexpMethodConninv.block(false); enaExpMaskConn.block(false); @@ -3056,6 +3063,23 @@ void LocallabExposure::read(const rtengine::procparams::ProcParams* pp, const Pa structexp->setValue(spot.structexp); blurexpde->setValue(spot.blurexpde); expcomp->setValue(spot.expcomp); + + if(expcomp->getValue()== 0.) { + black->hide(); + hlcompr->hide(); + hlcomprthresh->hide(); + shadex->hide(); + shcompr->hide(); + expchroma->hide(); + } else { + black->show(); + hlcompr->show(); + hlcomprthresh->show(); + shadex->show(); + shcompr->show(); + expchroma->show(); + } + black->setValue(spot.black); hlcompr->setValue(spot.hlcompr); hlcomprthresh->setValue(spot.hlcomprthresh); @@ -3067,6 +3091,7 @@ void LocallabExposure::read(const rtengine::procparams::ProcParams* pp, const Pa angexp->setValue(spot.angexp); softradiusexp->setValue(spot.softradiusexp); norm->set_active(spot.norm); + fatsatur->set_active(spot.fatsatur); inversex->set_active(spot.inversex); enaExpMask->set_active(spot.enaExpMask); enaExpMaskaft->set_active(spot.enaExpMaskaft); @@ -3158,6 +3183,7 @@ void LocallabExposure::write(rtengine::procparams::ProcParams* pp, ParamsEdited* spot.softradiusexp = softradiusexp->getValue(); spot.inversex = inversex->get_active(); spot.norm = norm->get_active(); + spot.fatsatur = fatsatur->get_active(); spot.enaExpMask = enaExpMask->get_active(); spot.enaExpMaskaft = enaExpMaskaft->get_active(); spot.CCmaskexpcurve = CCmaskexpshape->getCurve(); @@ -3353,6 +3379,22 @@ void LocallabExposure::adjusterChanged(Adjuster* a, double newval) } if (a == expcomp) { + if(expcomp->getValue()== 0.) { + black->hide(); + hlcompr->hide(); + hlcomprthresh->hide(); + shadex->hide(); + shcompr->hide(); + expchroma->hide(); + } else { + black->show(); + hlcompr->show(); + hlcomprthresh->show(); + shadex->show(); + shcompr->show(); + expchroma->show(); + } + if (listener) { listener->panelChanged(Evlocallabexpcomp, expcomp->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")"); @@ -3625,7 +3667,7 @@ void LocallabExposure::updateGUIToMode(const modeType new_type) if (enaExpMask->get_active()) { maskusablee->show(); maskunusablee->hide(); - + } else { maskusablee->hide(); maskunusablee->show(); @@ -3637,7 +3679,7 @@ void LocallabExposure::updateGUIToMode(const modeType new_type) // Specific Simple mode widgets are shown in Normal mode softradiusexp->hide(); blurexpde->hide(); - + if (!inversex->get_active()) { // Keep widget hidden when invers is toggled expgradexp->show(); softradiusexp->show(); @@ -3676,7 +3718,7 @@ void LocallabExposure::updateGUIToMode(const modeType new_type) if (enaExpMask->get_active()) { maskusablee->show(); maskunusablee->hide(); - + } else { maskusablee->hide(); maskunusablee->show(); @@ -3747,6 +3789,21 @@ void LocallabExposure::normChanged() } } +void LocallabExposure::fatsaturChanged() +{ + + if (isLocActivated && exp->getEnabled()) { + if (listener) { + if (fatsatur->get_active()) { + listener->panelChanged(Evlocallabtmosatur, + M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } else { + listener->panelChanged(Evlocallabtmosatur, + M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } + } + } +} void LocallabExposure::inversexChanged() { @@ -3822,7 +3879,7 @@ void LocallabExposure::enaExpMaskChanged() maskusablee->hide(); maskunusablee->show(); } - + if (isLocActivated && exp->getEnabled()) { if (listener) { if (enaExpMask->get_active()) { @@ -3938,7 +3995,7 @@ void LocallabExposure::updateExposureGUI3() gamex->show(); } - + reparexp->show(); showmaskexpMethodinv->hide(); @@ -3983,7 +4040,7 @@ LocallabShadow::LocallabShadow(): shadows(Gtk::manage(new Adjuster(M("TP_SHADOWSHLIGHTS_SHADOWS"), 0, 100, 1, 0))), s_tonalwidth(Gtk::manage(new Adjuster(M("TP_SHADOWSHLIGHTS_SHTONALW"), 10, 100, 1, 30))), sh_radius(Gtk::manage(new Adjuster(M("TP_SHADOWSHLIGHTS_RADIUS"), 0, 100, 1, 40))), - sensihs(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 15))),//unused here, but used for normalize_mean_dt + sensihs(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 15))),//unused here, but used for normalize_mean_dt blurSHde(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURDE"), 2, 100, 1, 5))), exprecovs(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI2_EXP")))), maskusables(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUSABLE")))), @@ -4018,11 +4075,11 @@ LocallabShadow::LocallabShadow(): LmaskSHshape(static_cast(mask2SHCurveEditorG->addCurve(CT_Diagonal, "L(L)"))), fatSHFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_FATSHFRA")))), fatamountSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATAMOUNT"), 1., 100., 1., 1.))), - fatanchorSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATANCHOR"), 1., 100., 1., 50., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), + fatanchorSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATANCHOR"), 1., 100., 1., 50., Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))), EvlocallabTePivot(ProcEventMapper::getInstance()->newEvent(AUTOEXP, "HISTORY_MSG_LOCALLAB_TE_PIVOT")) { set_orientation(Gtk::ORIENTATION_VERTICAL); - + const LocallabParams::LocallabSpot defSpot; // Parameter Shadow highlight specific widgets @@ -4153,7 +4210,7 @@ LocallabShadow::LocallabShadow(): pack_start(*shadows); pack_start(*s_tonalwidth); pack_start(*sh_radius); - // pack_start(*sensihs);//unused here, but used for normalize_mean_dt + // pack_start(*sensihs);//unused here, but used for normalize_mean_dt pack_start(*blurSHde); ToolParamBlock* const shBox3 = Gtk::manage(new ToolParamBlock()); shBox3->pack_start(*maskusables, Gtk::PACK_SHRINK, 0); @@ -4270,7 +4327,7 @@ void LocallabShadow::updateAdviceTooltips(const bool showTooltips) decays->set_tooltip_text(M("TP_LOCALLAB_MASKDECAY_TOOLTIP")); lowthress->set_tooltip_text(M("TP_LOCALLAB_MASKLOWTHRESS_TOOLTIP")); higthress->set_tooltip_text(M("TP_LOCALLAB_MASKHIGTHRESS_TOOLTIP")); - + } else { exp->set_tooltip_text(""); @@ -4305,7 +4362,7 @@ void LocallabShadow::updateAdviceTooltips(const bool showTooltips) decays->set_tooltip_text(""); lowthress->set_tooltip_text(""); higthress->set_tooltip_text(""); - + } } @@ -4585,7 +4642,7 @@ void LocallabShadow::adjusterChanged(Adjuster* a, double newval) } if (a == recothress) { - + if (listener) { listener->panelChanged(Evlocallabrecothress, recothress->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")"); @@ -4805,7 +4862,7 @@ void LocallabShadow::convertParamToSimple() // radmaskSH->setValue(defSpot.radmaskSH); // chromaskSH->setValue(defSpot.chromaskSH); // LmaskSHshape->setCurve(defSpot.LmaskSHcurve); - + recothress->setValue(defSpot.recothress); lowthress->setValue(defSpot.lowthress); higthress->setValue(defSpot.higthresc); @@ -4848,7 +4905,7 @@ void LocallabShadow::updateGUIToMode(const modeType new_type) if (enaSHMask->get_active()) { maskusables->show(); maskunusables->hide(); - + } else { maskusables->hide(); maskunusables->show(); @@ -4879,7 +4936,7 @@ void LocallabShadow::updateGUIToMode(const modeType new_type) if (enaSHMask->get_active()) { maskusables->show(); maskunusables->hide(); - + } else { maskusables->hide(); maskunusables->show(); @@ -5001,7 +5058,7 @@ void LocallabShadow::enaSHMaskChanged() maskusables->hide(); maskunusables->show(); } - + if (isLocActivated && exp->getEnabled()) { if (listener) { if (enaSHMask->get_active()) { @@ -5091,12 +5148,12 @@ LocallabVibrance::LocallabVibrance(): saturated(Gtk::manage(new Adjuster(M("TP_VIBRANCE_SATURATED"), -100., 100., 1., 0.))), pastels(Gtk::manage(new Adjuster(M("TP_VIBRANCE_PASTELS"), -100., 100., 1., 0.))), vibgam(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMC"), 0.5, 3., 0.05, 1.))), - warm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_WARM"), -100., 100., 1., 0., Gtk::manage(new RTImage("circle-blue-small.png")), Gtk::manage(new RTImage("circle-orange-small.png"))))), + warm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_WARM"), -100., 100., 1., 0., Gtk::manage(new RTImage("circle-blue-small")), Gtk::manage(new RTImage("circle-orange-small"))))), psThreshold(Gtk::manage(new ThresholdAdjuster(M("TP_VIBRANCE_PSTHRESHOLD"), -100., 100., 0., M("TP_VIBRANCE_PSTHRESHOLD_WEIGTHING"), 0, 0., 100., 75., M("TP_VIBRANCE_PSTHRESHOLD_SATTHRESH"), 0, this, false))), protectSkins(Gtk::manage(new Gtk::CheckButton(M("TP_VIBRANCE_PROTECTSKINS")))), avoidColorShift(Gtk::manage(new Gtk::CheckButton(M("TP_VIBRANCE_AVOIDCOLORSHIFT")))), pastSatTog(Gtk::manage(new Gtk::CheckButton(M("TP_VIBRANCE_PASTSATTOG")))), - sensiv(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 15))),//unused here, but used for normalize_mean_dt + sensiv(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 15))),//unused here, but used for normalize_mean_dt curveEditorGG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL"))), skinTonesCurve(static_cast(curveEditorGG->addCurve(CT_Diagonal, M("TP_VIBRANCE_CURVEEDITOR_SKINTONES")))), exprecovv(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI2_EXP")))), @@ -5129,7 +5186,7 @@ LocallabVibrance::LocallabVibrance(): Lmaskvibshape(static_cast(mask2vibCurveEditorG->addCurve(CT_Diagonal, "L(L)"))) { set_orientation(Gtk::ORIENTATION_VERTICAL); - + float R, G, B; const LocallabParams::LocallabSpot defSpot; @@ -5253,7 +5310,7 @@ LocallabVibrance::LocallabVibrance(): pack_start(*protectSkins, Gtk::PACK_SHRINK, 0); pack_start(*avoidColorShift, Gtk::PACK_SHRINK, 0); pack_start(*pastSatTog, Gtk::PACK_SHRINK, 0); - // pack_start(*sensiv, Gtk::PACK_SHRINK, 0);//unused here, but used for normalize_mean_dt + // pack_start(*sensiv, Gtk::PACK_SHRINK, 0);//unused here, but used for normalize_mean_dt pack_start(*curveEditorGG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor ToolParamBlock* const vibBox3 = Gtk::manage(new ToolParamBlock()); vibBox3->pack_start(*maskusablev, Gtk::PACK_SHRINK, 0); @@ -5599,7 +5656,7 @@ void LocallabVibrance::adjusterChanged(Adjuster* a, double newval) } if (a == recothresv) { - + if (listener) { listener->panelChanged(Evlocallabrecothresv, recothresv->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")"); @@ -5822,7 +5879,7 @@ void LocallabVibrance::convertParamToNormal() // Set hidden GUI widgets in Normal mode to default spot values saturated->setValue((double)defSpot.saturated); vibgam->setValue(defSpot.vibgam); - + psThreshold->setValue(defSpot.psthreshold); protectSkins->set_active(defSpot.protectskins); avoidColorShift->set_active(defSpot.avoidcolorshift); @@ -5916,7 +5973,7 @@ void LocallabVibrance::updateGUIToMode(const modeType new_type) if (enavibMask->get_active()) { maskusablev->show(); maskunusablev->hide(); - + } else { maskusablev->hide(); maskunusablev->show(); @@ -5946,7 +6003,7 @@ void LocallabVibrance::updateGUIToMode(const modeType new_type) if (enavibMask->get_active()) { maskusablev->show(); maskunusablev->hide(); - + } else { maskusablev->hide(); maskunusablev->show(); @@ -6043,7 +6100,7 @@ void LocallabVibrance::enavibMaskChanged() maskusablev->hide(); maskunusablev->show(); } - + if (isLocActivated && exp->getEnabled()) { if (listener) { if (enavibMask->get_active()) { @@ -6085,7 +6142,7 @@ LocallabSoft::LocallabSoft(): sensisf(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 1, 100, 1, 30))) { set_orientation(Gtk::ORIENTATION_VERTICAL); - + // Parameter Soft light specific widgets softMethod->append(M("TP_LOCALLAB_SOFTM")); softMethod->append(M("TP_LOCALLAB_RETIM")); @@ -6518,9 +6575,9 @@ LocallabBlur::LocallabBlur(): noiselumf0(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMFINEZERO"), MINCHRO, MAXCHRO, 0.01, 0.))), noiselumf(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMFINE"), MINCHRO, MAXCHRO, 0.01, 0.))), noiselumf2(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMFINETWO"), MINCHRO, MAXCHRO, 0.01, 0.))), - noiselumc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMCOARSE"), MINCHRO, MAXCHROCC, 0.01, 0.))),//unused here, but used for normalize_mean_dt + noiselumc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMCOARSE"), MINCHRO, MAXCHROCC, 0.01, 0.))),//unused here, but used for normalize_mean_dt noiselumdetail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMDETAIL"), 0., 100., 0.01, 50.))), - noiselequal(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELEQUAL"), -2, 10, 1, 7, Gtk::manage(new RTImage("circle-white-small.png")), Gtk::manage(new RTImage("circle-black-small.png"))))), + noiselequal(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELEQUAL"), -2, 10, 1, 7, Gtk::manage(new RTImage("circle-white-small")), Gtk::manage(new RTImage("circle-black-small"))))), noisegam(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISEGAM"), 1.0, 5., 0.1, 1.))), LocalcurveEditorwavhue(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_WAVELET_DENOISEHUE"))), wavhue(static_cast(LocalcurveEditorwavhue->addCurve(CT_Flat, "", nullptr, false, true))), @@ -6529,7 +6586,7 @@ LocallabBlur::LocallabBlur(): noisechrodetail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHRODETAIL"), 0., 100., 0.01, 50.))), detailFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_DETAILFRA")))), detailthr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DETAILTHR"), 0, 100, 1, 50))), - adjblur(Gtk::manage(new Adjuster(M("TP_LOCALLAB_ADJ"), -100., 100., 1., 0., Gtk::manage(new RTImage("circle-blue-yellow-small.png")), Gtk::manage(new RTImage("circle-red-green-small.png"))))), + adjblur(Gtk::manage(new Adjuster(M("TP_LOCALLAB_ADJ"), -100., 100., 1., 0., Gtk::manage(new RTImage("circle-blue-yellow-small")), Gtk::manage(new RTImage("circle-red-green-small"))))), expdenoise3(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI2_EXP")))), recothresd(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKRECOTHRES"), 1., 2., 0.01, 1.))), lowthresd(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRLOW2"), 1., 80., 0.5, 12.))), @@ -6578,7 +6635,7 @@ LocallabBlur::LocallabBlur(): csThresholdblur(Gtk::manage(new ThresholdAdjuster(M("TP_LOCALLAB_CSTHRESHOLDBLUR"), 0, 9, 0, 0, 6, 5, 0, false))) { set_orientation(Gtk::ORIENTATION_VERTICAL); - + const LocallabParams::LocallabSpot defSpot; // Parameter Blur, Noise & Denoise specific widgets @@ -6750,7 +6807,7 @@ LocallabBlur::LocallabBlur(): setExpandAlignProperties (neutral, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); - RTImage *resetImg = Gtk::manage (new RTImage ("undo-small.png", "redo-small.png")); + RTImage *resetImg = Gtk::manage (new RTImage ("undo-small", Gtk::ICON_SIZE_BUTTON)); setExpandAlignProperties (resetImg, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); neutral->set_image (*resetImg); neutral->set_tooltip_text (M ("TP_RETINEX_NEUTRAL_TOOLTIP")); @@ -6884,7 +6941,7 @@ LocallabBlur::LocallabBlur(): prevBox->pack_start(*chro46Labels); prevFrame->add(*prevBox); wavBox->pack_start(*prevFrame); - + ToolParamBlock* const nlbox = Gtk::manage(new ToolParamBlock()); nlbox->pack_start(*nlstr); nlbox->pack_start(*nldet); @@ -6894,14 +6951,14 @@ LocallabBlur::LocallabBlur(): expdenoisenl->add(*nlbox); wavBox->pack_start(*expdenoisenl); - - + + // wavBox->pack_start(*noiselumf0); // wavBox->pack_start(*noiselumf); // wavBox->pack_start(*noiselumf2); - // wavBox->pack_start(*noiselumc);//unused here, but used for normalize_mean_dt + // wavBox->pack_start(*noiselumc);//unused here, but used for normalize_mean_dt ToolParamBlock* const wchBox = Gtk::manage(new ToolParamBlock()); - + wchBox->pack_start(*LocalcurveEditorwavden, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor wchBox->pack_start(*noiselumdetail); wchBox->pack_start(*noiselequal); @@ -6925,13 +6982,12 @@ LocallabBlur::LocallabBlur(): chBox->pack_start(*adjblur); expdenoisech->add(*chBox); wavBox->pack_start(*expdenoisech); - + ToolParamBlock* const detailBox = Gtk::manage(new ToolParamBlock()); detailBox->pack_start(*detailthr); detailBox->pack_start(*usemask, Gtk::PACK_SHRINK, 0); detailFrame->add(*detailBox); wavBox->pack_start(*detailFrame); - wavFrame->add(*wavBox); denoisebox->pack_start(*wavFrame); @@ -7084,7 +7140,7 @@ void LocallabBlur::updateAdviceTooltips(const bool showTooltips) decayd->set_tooltip_text(M("TP_LOCALLAB_MASKDECAY_TOOLTIP")); lCLabels->set_tooltip_text(M("TP_LOCALLAB_LCLABELS_TOOLTIP")); } else { - + expblnoise->set_tooltip_markup(""); radius->set_tooltip_text(""); strength->set_tooltip_text(""); @@ -7159,7 +7215,7 @@ void LocallabBlur::updateAdviceTooltips(const bool showTooltips) } void LocallabBlur::neutral_pressed () -{ +{ const LocallabParams::LocallabSpot defSpot; lnoiselow->setValue(defSpot.lnoiselow); levelthr->setValue(defSpot.levelthr); @@ -7195,7 +7251,7 @@ void LocallabBlur::neutral_pressed () recothres->setValue(defSpot.recothres); lowthres->setValue(defSpot.lowthres); higthres->setValue(defSpot.higthres); - + } void LocallabBlur::updatedenlc(const double highres, const double nres, const double highres46, const double nres46, const double Lhighres, const double Lnres, const double Lhighres46, const double Lnres46) @@ -7395,7 +7451,7 @@ void LocallabBlur::read(const rtengine::procparams::ProcParams* pp, const Params nlrad->setValue((double)spot.nlrad); nlgam->setValue((double)spot.nlgam); sensiden->setValue((double)spot.sensiden); - + if (spot.showmaskblMethodtyp == "blur") { showmaskblMethodtyp ->set_active(0); } else if (spot.showmaskblMethodtyp == "nois") { @@ -7569,7 +7625,7 @@ void LocallabBlur::write(rtengine::procparams::ProcParams* pp, ParamsEdited* ped spot.Lmaskblcurve = Lmaskblshape->getCurve(); spot.LLmaskblcurvewav = LLmaskblshapewav->getCurve(); spot.csthresholdblur = csThresholdblur->getValue(); - + } // Note: No need to manage pedited as batch mode is deactivated for Locallab @@ -7713,7 +7769,7 @@ void LocallabBlur::adjusterChanged(Adjuster* a, double newval) showmaskblMethodtyp->set_active(2); } } - + if (listener) { listener->panelChanged(Evlocallabrecothres, recothres->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")"); @@ -7740,7 +7796,7 @@ void LocallabBlur::adjusterChanged(Adjuster* a, double newval) showmaskblMethodtyp->set_active(2); } } - + if (listener) { listener->panelChanged(Evlocallabrecothresd, recothresd->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")"); @@ -8130,7 +8186,7 @@ void LocallabBlur::convertParamToNormal() lnoiselow->setValue(defSpot.lnoiselow); nlrad->setValue(defSpot.nlrad); noisegam->setValue(defSpot.noisegam); - + // Enable all listeners enableListener(); } @@ -8186,7 +8242,7 @@ void LocallabBlur::convertParamToSimple() nlrad->setValue(defSpot.nlrad); nlgam->setValue(defSpot.nlgam); noisegam->setValue(defSpot.noisegam); - + // Enable all listeners enableListener(); } @@ -8267,7 +8323,7 @@ void LocallabBlur::updateGUIToMode(const modeType new_type) showmaskblMethodtyp->set_active(2); } } - + if (enablMask->get_active()) { maskusable->show(); maskunusable->hide(); @@ -8275,7 +8331,7 @@ void LocallabBlur::updateGUIToMode(const modeType new_type) maskunusable2->hide(); maskusable3->show(); maskunusable3->hide(); - + } else { maskusable->hide(); maskunusable->show(); @@ -8340,7 +8396,7 @@ void LocallabBlur::updateGUIToMode(const modeType new_type) showmaskblMethodtyp->set_active(2); } } - + if (enablMask->get_active()) { maskusable->show(); maskunusable->hide(); @@ -8356,7 +8412,7 @@ void LocallabBlur::updateGUIToMode(const modeType new_type) maskusable3->show(); maskunusable3->hide(); } - + } } @@ -8480,7 +8536,7 @@ void LocallabBlur::invblChanged() } - + if (isLocActivated && exp->getEnabled()) { if (listener) { if (invbl->get_active()) { @@ -8652,7 +8708,7 @@ void LocallabBlur::updateBlurGUI() guidbl->setValue(defSpot.guidbl); } - + const int mode = complexity->get_active_row_number(); if (blMethod->get_active_row_number() == 0) { diff --git a/rtgui/locallabtools.h b/rtgui/locallabtools.h index 1664d1839..f99b3bc41 100644 --- a/rtgui/locallabtools.h +++ b/rtgui/locallabtools.h @@ -345,6 +345,7 @@ private: MyExpander* const expfat; Adjuster* const fatamount; Adjuster* const fatdetail; + Gtk::CheckButton* const fatsatur; Gtk::CheckButton* const norm; Adjuster* const fatlevel; Adjuster* const fatanchor; @@ -395,8 +396,9 @@ private: Adjuster* const angmaskexp; CurveEditorGroup* const mask2expCurveEditorG; DiagonalCurveEditor* const Lmaskexpshape; + rtengine::ProcEvent Evlocallabtmosatur; - sigc::connection expMethodConn, exnoiseMethodConn, inversexConn, normConn, showmaskexpMethodConn, showmaskexpMethodConninv, enaExpMaskConn, enaExpMaskaftConn; + sigc::connection expMethodConn, exnoiseMethodConn, inversexConn, normConn, fatsaturConn, showmaskexpMethodConn, showmaskexpMethodConninv, enaExpMaskConn, enaExpMaskaftConn; public: LocallabExposure(); @@ -429,6 +431,7 @@ private: void exnoiseMethodChanged(); void inversexChanged(); void normChanged(); + void fatsaturChanged(); void showmaskexpMethodChanged(); void showmaskexpMethodChangedinv(); void enaExpMaskChanged(); @@ -940,6 +943,7 @@ private: Adjuster* const dehaz; Adjuster* const depth; Adjuster* const dehazeSaturation; + Adjuster* const dehazeblack; Gtk::Frame* const retiFrame; Adjuster* const str; Gtk::CheckButton* const loglin; @@ -991,6 +995,8 @@ private: DiagonalCurveEditor* const Lmaskretishape; Gtk::CheckButton* const inversret; + rtengine::ProcEvent Evlocallabdehazeblack; + sigc::connection loglinConn, retinexMethodConn, fftwretiConn, equilretConn, showmaskretiMethodConn, enaretiMaskConn, enaretiMasktmapConn, inversretConn; public: diff --git a/rtgui/locallabtools2.cc b/rtgui/locallabtools2.cc index a2c18ee08..b32ef5d6d 100644 --- a/rtgui/locallabtools2.cc +++ b/rtgui/locallabtools2.cc @@ -128,7 +128,7 @@ LocallabTone::LocallabTone(): estop(Gtk::manage(new Adjuster(M("TP_LOCALLAB_ESTOP"), 0.1, 4., 0.01, 1.4))), scaltm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SCALTM"), 0.1, 10.0, 0.01, 1.0))), rewei(Gtk::manage(new Adjuster(M("TP_LOCALLAB_REWEI"), 0, 3, 1, 0))), - softradiustm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), 0.0, 100.0, 0.1, 0.))),//unused here, but used for normalize_mean_dt + softradiustm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), 0.0, 100.0, 0.1, 0.))),//unused here, but used for normalize_mean_dt sensitm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 60))), exprecovt(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI2_EXP")))), maskusablet(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUSABLE")))), @@ -156,7 +156,7 @@ LocallabTone::LocallabTone(): Lmasktmshape(static_cast(mask2tmCurveEditorG->addCurve(CT_Diagonal, "L(L)"))) { set_orientation(Gtk::ORIENTATION_VERTICAL); - + const LocallabParams::LocallabSpot defSpot; // Parameter Tone Mapping specific widgets @@ -253,7 +253,7 @@ LocallabTone::LocallabTone(): pack_start(*estop); pack_start(*scaltm); pack_start(*rewei); - // pack_start(*softradiustm); //unused here, but used for normalize_mean_dt + // pack_start(*softradiustm); //unused here, but used for normalize_mean_dt // pack_start(*sensitm); ToolParamBlock* const tmBox3 = Gtk::manage(new ToolParamBlock()); tmBox3->pack_start(*maskusablet, Gtk::PACK_SHRINK, 0); @@ -265,7 +265,7 @@ LocallabTone::LocallabTone(): // colBox3->pack_start(*invmaskc); exprecovt->add(*tmBox3, false); pack_start(*exprecovt, false, false); - + ToolParamBlock* const masktmBox = Gtk::manage(new ToolParamBlock()); masktmBox->pack_start(*showmasktmMethod, Gtk::PACK_SHRINK, 4); masktmBox->pack_start(*enatmMask, Gtk::PACK_SHRINK, 0); @@ -673,7 +673,7 @@ void LocallabTone::updateGUIToMode(const modeType new_type) if (enatmMask->get_active()) { maskusablet->show(); maskunusablet->hide(); - + } else { maskusablet->hide(); maskunusablet->show(); @@ -695,7 +695,7 @@ void LocallabTone::updateGUIToMode(const modeType new_type) if (enatmMask->get_active()) { maskusablet->show(); maskunusablet->hide(); - + } else { maskusablet->hide(); maskunusablet->show(); @@ -758,7 +758,7 @@ void LocallabTone::enatmMaskChanged() maskusablet->hide(); maskunusablet->show(); } - + if (isLocActivated && exp->getEnabled()) { if (listener) { if (enatmMask->get_active()) { @@ -796,6 +796,7 @@ LocallabRetinex::LocallabRetinex(): dehaz(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DEHAZ"), -100, 100, 1, 0))), depth(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DEPTH"), 0, 100, 1, 25))), dehazeSaturation(Gtk::manage(new Adjuster(M("TP_DEHAZE_SATURATION"), 0, 100, 1, 50))), + dehazeblack(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DEHAZE_BLACK"), -65., 100., 1., 0.))), retiFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_RETIFRA")))), str(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STR"), 0., 100., 0.2, 0.))), loglin(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_LOGLIN")))), @@ -848,8 +849,12 @@ LocallabRetinex::LocallabRetinex(): Lmaskretishape(static_cast(mask2retiCurveEditorG->addCurve(CT_Diagonal, "L(L)"))), inversret(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVERS")))) { - set_orientation(Gtk::ORIENTATION_VERTICAL); + auto m = ProcEventMapper::getInstance(); + Evlocallabdehazeblack = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_DEHAZE_BLACK"); + + set_orientation(Gtk::ORIENTATION_VERTICAL); + const LocallabParams::LocallabSpot defSpot; // Parameter Retinex specific widgets @@ -857,6 +862,7 @@ LocallabRetinex::LocallabRetinex(): dehazeSaturation->setAdjusterListener(this); depth->setAdjusterListener(this); + dehazeblack->setAdjusterListener(this); retiFrame->set_label_align(0.025, 0.5); @@ -991,6 +997,7 @@ LocallabRetinex::LocallabRetinex(): dehaBox->pack_start(*dehaz); dehaBox->pack_start(*depth); dehaBox->pack_start(*dehazeSaturation); + dehaBox->pack_start(*dehazeblack); dehaFrame->add(*dehaBox); auxBox->add(*dehaFrame); ToolParamBlock* const deharetiBox = Gtk::manage(new ToolParamBlock()); @@ -1247,6 +1254,7 @@ void LocallabRetinex::read(const rtengine::procparams::ProcParams* pp, const Par dehaz->setValue((double)spot.dehaz); depth->setValue((double)spot.depth); dehazeSaturation->setValue((double)spot.dehazeSaturation); + dehazeblack->setValue((double)spot.dehazeblack); str->setValue(spot.str); loglin->set_active(spot.loglin); sensih->setValue((double)spot.sensih); @@ -1325,6 +1333,7 @@ void LocallabRetinex::write(rtengine::procparams::ProcParams* pp, ParamsEdited* spot.dehaz = dehaz->getIntValue(); spot.depth = depth->getIntValue(); spot.dehazeSaturation = dehazeSaturation->getIntValue(); + spot.dehazeblack = dehazeblack->getValue(); spot.str = str->getValue(); spot.loglin = loglin->get_active(); spot.sensih = sensih->getIntValue(); @@ -1383,6 +1392,7 @@ void LocallabRetinex::setDefaults(const rtengine::procparams::ProcParams* defPar // Set default values for adjuster widgets dehaz->setDefault((double)defSpot.dehaz); dehazeSaturation->setDefault((double)defSpot.dehazeSaturation); + dehazeblack->setDefault((double)defSpot.dehazeblack); depth->setDefault((double)defSpot.depth); str->setDefault(defSpot.str); sensih->setDefault((double)defSpot.sensih); @@ -1438,6 +1448,13 @@ void LocallabRetinex::adjusterChanged(Adjuster* a, double newval) } } + if (a == dehazeblack) { + if (listener) { + listener->panelChanged(Evlocallabdehazeblack, + dehazeblack->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")"); + } + } + if (a == depth) { if (listener) { listener->panelChanged(Evlocallabdepth, @@ -1530,7 +1547,7 @@ void LocallabRetinex::adjusterChanged(Adjuster* a, double newval) } if (a == recothresr) { - + if (listener) { listener->panelChanged(Evlocallabrecothresr, recothresr->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")"); @@ -1740,7 +1757,7 @@ void LocallabRetinex::convertParamToSimple() higthresr->setValue(defSpot.higthresr); decayr->setValue(defSpot.decayr); enableListener(); - + } void LocallabRetinex::updateGUIToMode(const modeType new_type) @@ -1778,7 +1795,7 @@ void LocallabRetinex::updateGUIToMode(const modeType new_type) if (enaretiMask->get_active()) { maskusabler->show(); maskunusabler->hide(); - + } else { maskusabler->hide(); maskunusabler->show(); @@ -1882,7 +1899,7 @@ void LocallabRetinex::enaretiMaskChanged() maskusabler->hide(); maskunusabler->show(); } - + if (isLocActivated && exp->getEnabled()) { if (listener) { if (enaretiMask->get_active()) { @@ -1994,7 +2011,7 @@ LocallabSharp::LocallabSharp(): showmasksharMethod(Gtk::manage(new MyComboBoxText())) { set_orientation(Gtk::ORIENTATION_VERTICAL); - + // Parameter Sharpening specific widgets sharcontrast->setAdjusterListener(this); @@ -2412,7 +2429,7 @@ LocallabContrast::LocallabContrast(): expcontrastpyr2(Gtk::manage(new MyExpander(false, Gtk::manage(new Gtk::Box())))), wavcont(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_CONTFRA")))), sigma(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMAWAV"), 0.2, 2.5, 0.01, 1.))), - offset(Gtk::manage(new Adjuster(M("TP_LOCALLAB_OFFSETWAV"), 0.33, 1.66, 0.01, 1., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), + offset(Gtk::manage(new Adjuster(M("TP_LOCALLAB_OFFSETWAV"), 0.33, 1.66, 0.01, 1., Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))), chromalev(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMALEV"), 0.1, 5., 0.1, 1.))), LocalcurveEditorwavcon(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVCON"))), wavshapecon(static_cast(LocalcurveEditorwavcon->addCurve(CT_Flat, "", nullptr, false, false))), @@ -2424,7 +2441,7 @@ LocallabContrast::LocallabContrast(): residcomp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RESIDCOMP"), -1., 1., 0.01, 0.))), wavcomp(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_COMPFRA")))), sigmadc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMAWAV"), 0.2, 3., 0.01, 1.))), - deltad(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DELTAD"), -3., 3., 0.1, 0.))),//, Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), + deltad(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DELTAD"), -3., 3., 0.1, 0.))),//, Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))), LocalcurveEditorwavcomp(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVCOMP"))), wavshapecomp(static_cast(LocalcurveEditorwavcomp->addCurve(CT_Flat, "", nullptr, false, false))), //fatres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATRES"), 0., 100., 1., 0.))), @@ -2452,7 +2469,7 @@ LocallabContrast::LocallabContrast(): Lmasklcshape(static_cast(mask2lcCurveEditorG->addCurve(CT_Diagonal, "L(L)"))) { set_orientation(Gtk::ORIENTATION_VERTICAL); - + const LocallabParams::LocallabSpot defSpot; // Parameter Local contrast specific widgets @@ -2636,7 +2653,7 @@ LocallabContrast::LocallabContrast(): TittleVBox2->pack_start(*LCTitleHBox2, Gtk::PACK_SHRINK); TittleVBox2->pack_start(*LCTitleHBox22, Gtk::PACK_SHRINK); expcontrastpyr2->setLabel(TittleVBox2); - + setExpandAlignProperties(expcontrastpyr2, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); wavcontConn = wavcont->signal_toggled().connect(sigc::mem_fun(*this, &LocallabContrast::wavcontChanged)); @@ -2841,7 +2858,7 @@ LocallabContrast::LocallabContrast(): blurlevelFrame->add(*blurlevcontBox); blurcontBox->pack_start(*blurlevelFrame); expcontrastpyr->add(*blurcontBox, false); - pack_start(*gamlc); + pack_start(*gamlc); pack_start(*expcontrastpyr); ToolParamBlock* const blurcontBox2 = Gtk::manage(new ToolParamBlock()); Gtk::Frame* const contFrame2 = Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CONTFRA"))); @@ -2981,7 +2998,7 @@ void LocallabContrast::updateAdviceTooltips(const bool showTooltips) threswav->set_tooltip_text(M("TP_LOCALLAB_WAT_BALTHRES_TOOLTIP")); residcomp->set_tooltip_text(M("TP_LOCALLAB_WAT_RESIDCOMP_TOOLTIP")); - + expresidpyr->set_tooltip_text(M("TP_LOCALLAB_WAT_EXPRESID_TOOLTIP")); expcontrastpyr->set_tooltip_text(M("TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP")); wavgradl->set_tooltip_text(M("TP_LOCALLAB_WAVGRAD_TOOLTIP")); @@ -3767,7 +3784,7 @@ void LocallabContrast::adjusterChanged(Adjuster* a, double newval) //} if (a == recothresw) { - + if (listener) { listener->panelChanged(Evlocallabrecothresw, recothresw->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")"); @@ -4025,7 +4042,7 @@ void LocallabContrast::convertParamToSimple() lowthresw->setValue(defSpot.lowthresw); higthresw->setValue(defSpot.higthresw); decayw->setValue(defSpot.decayw); - + enableListener(); // Update GUI based on converted widget parameters: @@ -4066,7 +4083,7 @@ void LocallabContrast::updateGUIToMode(const modeType new_type) if (enalcMask->get_active()) { maskusablew->show(); maskunusablew->hide(); - + } else { maskusablew->hide(); maskunusablew->show(); @@ -4096,12 +4113,12 @@ void LocallabContrast::updateGUIToMode(const modeType new_type) if (enalcMask->get_active()) { maskusablew->show(); maskunusablew->hide(); - + } else { maskusablew->hide(); maskunusablew->show(); } - + } } @@ -4335,7 +4352,7 @@ void LocallabContrast::enalcMaskChanged() maskusablew->hide(); maskunusablew->show(); } - + if (isLocActivated && exp->getEnabled()) { if (listener) { if (enalcMask->get_active()) { @@ -4474,7 +4491,7 @@ LocallabCBDL::LocallabCBDL(): lumacontrastPlusButton(Gtk::manage(new Gtk::Button(M("TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS")))) { set_orientation(Gtk::ORIENTATION_VERTICAL); - + const LocallabParams::LocallabSpot defSpot; // Parameter CBDL specific widgets @@ -4911,7 +4928,7 @@ void LocallabCBDL::adjusterChanged(Adjuster* a, double newval) } if (a == recothrescb) { - + if (listener) { listener->panelChanged(Evlocallabrecothrescb, recothrescb->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")"); @@ -5100,7 +5117,7 @@ void LocallabCBDL::updateGUIToMode(const modeType new_type) if (enacbMask->get_active()) { maskusablecb->show(); maskunusablecb->hide(); - + } else { maskusablecb->hide(); maskunusablecb->show(); @@ -5118,7 +5135,7 @@ void LocallabCBDL::updateGUIToMode(const modeType new_type) if (enacbMask->get_active()) { maskusablecb->show(); maskunusablecb->hide(); - + } else { maskusablecb->hide(); maskunusablecb->show(); @@ -5166,7 +5183,7 @@ void LocallabCBDL::enacbMaskChanged() maskusablecb->hide(); maskunusablecb->show(); } - + if (isLocActivated && exp->getEnabled()) { if (listener) { if (enacbMask->get_active()) { @@ -5234,7 +5251,7 @@ LocallabLog::LocallabLog(): log2Frame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LOG2FRA")))), targetGray(Gtk::manage(new Adjuster(M("TP_LOCALLAB_TARGET_GRAY"), 4.0, 80.0, 0.1, 18.0))), detail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DETAIL"), 0., 1., 0.01, 0.6))), - catad(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CATAD"), -100., 100., 0.5, 0., Gtk::manage(new RTImage("circle-blue-small.png")), Gtk::manage(new RTImage("circle-orange-small.png"))))), + catad(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CATAD"), -100., 100., 0.5, 0., Gtk::manage(new RTImage("circle-blue-small")), Gtk::manage(new RTImage("circle-orange-small"))))), lightl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGLIGHTL"), -100., 100., 0.5, 0.))), lightq(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGLIGHTQ"), -100., 100., 0.5, 0.))), contl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGCONTL"), -100., 100., 0.5, 0.))), @@ -5249,7 +5266,7 @@ LocallabLog::LocallabLog(): targabs(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOURCE_ABS"), 0.01, 16384.0, 0.01, 16.0))), surround(Gtk::manage (new MyComboBoxText ())), surrHBox(Gtk::manage(new Gtk::Box())), - baselog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BASELOG"), 1.3, 3., 0.05, 2.))),//, Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), + baselog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BASELOG"), 1.3, 3., 0.05, 2.))),//, Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))), exprecovl(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI2_EXP")))), maskusablel(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUSABLE")))), maskunusablel(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUNUSABLE")))), @@ -5275,11 +5292,11 @@ LocallabLog::LocallabLog(): chromaskL(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))), mask2CurveEditorL(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))), LmaskshapeL(static_cast(mask2CurveEditorL->addCurve(CT_Diagonal, "L(L)"))) - - + + { set_orientation(Gtk::ORIENTATION_VERTICAL); - + // Parameter Log encoding specific widgets autoconn = autocompute->signal_toggled().connect(sigc::mem_fun(*this, &LocallabLog::autocomputeToggled)); const LocallabParams::LocallabSpot defSpot; @@ -5350,7 +5367,7 @@ LocallabLog::LocallabLog(): strlog->setAdjusterListener(this); anglog->setAdjusterListener(this); - + surHBox->set_spacing (2); surHBox->set_tooltip_markup (M ("TP_LOCALLAB_LOGSURSOUR_TOOLTIP")); Gtk::Label* surLabel = Gtk::manage (new Gtk::Label (M ("TP_COLORAPP_SURROUND") + ":")); @@ -5457,11 +5474,11 @@ LocallabLog::LocallabLog(): logP11Box->pack_start(*colorfl); expL->add(*logP11Box, false); logP1Box->pack_start(*expL, false, false); - + // logP1Box->pack_start(*CurveEditorL, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor log1Frame->add(*logP1Box); pack_start(*log1Frame); - log2Frame->set_label_align(0.025, 0.5); + log2Frame->set_label_align(0.025, 0.5); ToolParamBlock* const logP2Box = Gtk::manage(new ToolParamBlock()); logP2Box->pack_start(*targetGray); logP2Box->pack_start(*targabs); @@ -5476,7 +5493,7 @@ LocallabLog::LocallabLog(): logBox3->pack_start(*decayl); // colBox3->pack_start(*invmaskc); exprecovl->add(*logBox3, false); - + ToolParamBlock* const logP3Box = Gtk::manage(new ToolParamBlock()); logP3Box->pack_start(*showmaskLMethod, Gtk::PACK_SHRINK, 4); logP3Box->pack_start(*enaLMask, Gtk::PACK_SHRINK, 0); @@ -5491,11 +5508,11 @@ LocallabLog::LocallabLog(): log2Frame->add(*logP2Box); pack_start(*log2Frame); pack_start(*exprecovl, false, false); - + // pack_start(*baselog); // pack_start(*sensilog); pack_start(*expmaskL, false, false); - + // Gtk::Frame* const gradlogFrame = Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_GRADLOGFRA"))); gradlogFrame->set_label_align(0.025, 0.5); ToolParamBlock* const gradlogBox = Gtk::manage(new ToolParamBlock()); @@ -5510,7 +5527,7 @@ LocallabLog::~LocallabLog() delete maskCurveEditorL; delete mask2CurveEditorL; //delete CurveEditorL; - + } void LocallabLog::setDefaultExpanderVisibility() @@ -5549,8 +5566,8 @@ void LocallabLog::updateAdviceTooltips(const bool showTooltips) contq->set_tooltip_text(M("TP_LOCALLAB_LOGCONTQ_TOOLTIP")); contthres->set_tooltip_text(M("TP_LOCALLAB_LOGCONTTHRES_TOOLTIP")); colorfl->set_tooltip_text(M("TP_LOCALLAB_LOGCOLORF_TOOLTIP")); - lightl->set_tooltip_text(M("TP_LOCALLAB_LOGLIGHTL_TOOLTIP")); - lightq->set_tooltip_text(M("TP_LOCALLAB_LOGLIGHTQ_TOOLTIP")); + lightl->set_tooltip_text(M("TP_LOCALLAB_LOGLIGHTL_TOOLTIP")); + lightq->set_tooltip_text(M("TP_LOCALLAB_LOGLIGHTQ_TOOLTIP")); saturl->set_tooltip_text(M("TP_LOCALLAB_LOGSATURL_TOOLTIP")); chroml->set_tooltip_text(M("TP_COLORAPP_CHROMA_TOOLTIP")); detail->set_tooltip_text(M("TP_LOCALLAB_LOGDETAIL_TOOLTIP")); @@ -5747,7 +5764,7 @@ void LocallabLog::read(const rtengine::procparams::ProcParams* pp, const ParamsE chromaskL->setValue(spot.chromaskL); LmaskshapeL->setCurve(spot.LmaskcurveL); - + } // Enable all listeners @@ -5831,7 +5848,7 @@ void LocallabLog::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedi } else if (surround->get_active_row_number() == 3) { spot.surround = "ExtremelyDark"; } - + } // Note: No need to manage pedited as batch mode is deactivated for Locallab @@ -5847,7 +5864,7 @@ void LocallabLog::enaLMaskChanged() maskusablel->hide(); maskunusablel->show(); } - + if (isLocActivated && exp->getEnabled()) { if (listener) { if (enaLMask->get_active()) { @@ -5917,12 +5934,12 @@ void LocallabLog::updateGUIToMode(const modeType new_type) if (enaLMask->get_active()) { maskusablel->show(); maskunusablel->hide(); - + } else { maskusablel->hide(); maskunusablel->show(); } - + exprecovl->show(); decayl->hide(); @@ -5951,7 +5968,7 @@ void LocallabLog::updateGUIToMode(const modeType new_type) if (enaLMask->get_active()) { maskusablel->show(); maskunusablel->hide(); - + } else { maskusablel->hide(); maskunusablel->show(); @@ -6242,7 +6259,7 @@ void LocallabLog::adjusterChanged(Adjuster* a, double newval) } if (a == recothresl) { - + if (listener) { listener->panelChanged(Evlocallabrecothresl, recothresl->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")"); @@ -6291,7 +6308,7 @@ void LocallabLog::adjusterChanged(Adjuster* a, double newval) anglog->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")"); } } - + if (a == blendmaskL) { if (listener) { listener->panelChanged(EvLocallabblendmaskL, @@ -6313,7 +6330,7 @@ void LocallabLog::adjusterChanged(Adjuster* a, double newval) } } - + } } @@ -6403,7 +6420,7 @@ void LocallabLog::ciecamChanged() targabs->set_sensitive(true); catad->set_sensitive(true); surrHBox->set_sensitive(true); - + sourceabs->show(); targabs->show(); catad->show(); @@ -6515,7 +6532,7 @@ void LocallabLog::updateLogGUI2() void LocallabLog::updateLogGUI() { const int mode = complexity->get_active_row_number(); - + if (autocompute->get_active()) { blackEv->set_sensitive(false); whiteEv->set_sensitive(false); @@ -6538,7 +6555,7 @@ void LocallabLog::updateLogGUI() if (mode == Expert || mode == Normal) { // Keep widget hidden in Simple mode exprecovl->show(); } - + } @@ -6583,9 +6600,9 @@ LocallabMask::LocallabMask(): str_mask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTR"), -2., 2., 0.05, 0.))), ang_mask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -180., 180., 0.1, 0.))) { - + set_orientation(Gtk::ORIENTATION_VERTICAL); - + const LocallabParams::LocallabSpot defSpot; // Parameter Mask common specific widgets @@ -7281,7 +7298,7 @@ void LocallabMask::updateGUIToMode(const modeType new_type) csThresholdmask->show(); gradFramemask->show(); } - + } void LocallabMask::updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz) @@ -7446,14 +7463,14 @@ Locallabcie::Locallabcie(): sigmoidFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SIGFRA")))), sigq(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGFRA")))), sigmoidldacie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDLAMBDA"), 0.0, 1., 0.01, 0.5))), - sigmoidthcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDTH"), 0.1, 4., 0.01, 1., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), + sigmoidthcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDTH"), 0.1, 4., 0.01, 1., Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))), sigmoidblcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDBL"), 0.5, 1.5, 0.01, 1.))), sigmoidqjcie(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGMOIDQJ")))), logcie(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_LOGCIE")))), sigmoidjzFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SIGJZFRA")))), sigjz(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGJZFRA")))), sigmoidldajzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDLAMBDA"), 0., 1.0, 0.01, 0.5))), - sigmoidthjzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDTH"), 0.1, 4., 0.01, 1., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), + sigmoidthjzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDTH"), 0.1, 4., 0.01, 1., Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))), sigmoidbljzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDBL"), 0.5, 1.5, 0.01, 1.))), colorflcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGCOLORFL"), -100., 100., 0.5, 0.))), saturlcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SATURV"), -100., 100., 0.5, 0.))), @@ -7486,7 +7503,7 @@ Locallabcie::Locallabcie(): thrhjzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_JZTHRHCIE"), 40., 150., 0.5, 60.))), chjzcie(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_JZCH")))), strsoftjzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_JZSTRSOFTCIE"), 0, 100., 0.5, 100.))), - + /* ciezFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_ZCAMFRA")))), @@ -7498,13 +7515,13 @@ Locallabcie::Locallabcie(): colorflzcam(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGCOLORFL"), -100., 100., 0.5, 0.))), saturzcam(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SATURV"), -100., 100., 0.5, 0.))), chromzcam(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROML"), -100., 100., 0.5, 0.))), -*/ +*/ expLcie(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_CIETOOLEXP")))), cie2Frame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LOG2FRA")))), targetGraycie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_TARGET_GRAY"), 5.0, 80.0, 0.1, 18.0))), targabscie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOURCE_ABS"), 0.01, 16384.0, 0.01, 16.0))), detailcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DETAIL"), 0., 100., 0.1, 0.))), - catadcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CATAD"), -100., 100., 0.5, 0., Gtk::manage(new RTImage("circle-blue-small.png")), Gtk::manage(new RTImage("circle-orange-small.png"))))), + catadcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CATAD"), -100., 100., 0.5, 0., Gtk::manage(new RTImage("circle-blue-small")), Gtk::manage(new RTImage("circle-orange-small"))))), surroundcie(Gtk::manage (new MyComboBoxText ())), surrHBoxcie(Gtk::manage(new Gtk::Box())), exprecovcie(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI2_EXP")))), @@ -7530,11 +7547,11 @@ Locallabcie::Locallabcie(): slomaskcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOMASKCOL"), 0.0, 15.0, 0.1, 0.))), mask2cieCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))), Lmaskcieshape(static_cast(mask2cieCurveEditorG->addCurve(CT_Diagonal, "L(L)"))) - - + + { set_orientation(Gtk::ORIENTATION_VERTICAL); - + // Parameter Ciecam specific widgets const LocallabParams::LocallabSpot defSpot; reparcie->setAdjusterListener(this); @@ -7617,12 +7634,12 @@ Locallabcie::Locallabcie(): sigmoidFrame->set_label_widget(*sigq); ToolParamBlock* const sigBox = Gtk::manage(new ToolParamBlock()); Gtk::Separator* const separatorsig = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL)); - + sigBox->pack_start(*sigmoidldacie); sigBox->pack_start(*sigmoidthcie); sigBox->pack_start(*sigmoidblcie); sigBox->pack_start(*sigmoidqjcie); - sigBox->pack_start(*separatorsig); + sigBox->pack_start(*separatorsig); sigBox->pack_start(*logcie); sigmoidFrame->add(*sigBox); cieFBox->pack_start(*sigmoidFrame); @@ -7636,10 +7653,10 @@ Locallabcie::Locallabcie(): sigjzBox->pack_start(*sigmoidbljzcie); sigjzBox->pack_start(*forcebw); sigmoidjzFrame->add(*sigjzBox); - + // jzBox->pack_start(*sigmoidjzFrame); cieFBox->pack_start(*sigmoidjzFrame); - + cieFBox->pack_start (*surHBoxcie); cieFrame->add(*cieFBox); pack_start(*cieFrame); @@ -7734,7 +7751,7 @@ Locallabcie::Locallabcie(): jz3CurveEditorG->curveListComplete(); - + jzFrame->set_label_align(0.025, 0.5); ToolParamBlock* const jzBox = Gtk::manage(new ToolParamBlock()); jzBox->pack_start(*qtoj); @@ -7752,7 +7769,7 @@ Locallabcie::Locallabcie(): ciePzcolorBox->pack_start(*huejzcie); czcolorFrame->add(*ciePzcolorBox); jzBox->pack_start(*czcolorFrame); - + jzBox->pack_start(*jz1CurveEditorG, Gtk::PACK_SHRINK, 4); HFramejz->set_label_align(0.025, 0.5); ToolParamBlock* const jzHHBox = Gtk::manage(new ToolParamBlock()); @@ -7763,7 +7780,7 @@ Locallabcie::Locallabcie(): jzHBox->pack_start(*thrhjzcie); JzHFramejz->add(*jzHBox); jzHHBox->pack_start(*JzHFramejz); - + jzHHBox->pack_start(*jz3CurveEditorG, Gtk::PACK_SHRINK, 4); // jzBox->pack_start(*adapjzcie); jzHHBox->pack_start(*softjzcie); HFramejz->add(*jzHHBox); @@ -7776,9 +7793,9 @@ Locallabcie::Locallabcie(): sigjzBox->pack_start(*sigmoidbljzcie); sigjzBox->pack_start(*jabcie); sigmoidjzFrame->add(*sigjzBox); - + // jzBox->pack_start(*sigmoidjzFrame); - */ + */ jzshFrame->set_label_align(0.025, 0.5); ToolParamBlock* const jzshBox = Gtk::manage(new ToolParamBlock()); jzshBox->pack_start(*hljzcie); @@ -7812,7 +7829,7 @@ Locallabcie::Locallabcie(): clarilresjz->setAdjusterListener(this); claricresjz->setAdjusterListener(this); clarisoftjz->setAdjusterListener(this); - + clariFramejz->set_label_align(0.025, 0.5); ToolParamBlock* const coBox3jz = Gtk::manage(new ToolParamBlock()); coBox3jz->pack_start(*clarilresjz); @@ -7821,13 +7838,13 @@ Locallabcie::Locallabcie(): clariFramejz->add(*coBox3jz); coBox2jz->pack_start(*clariFramejz); expwavjz->add(*coBox2jz, false); - + jzBox->pack_start(*expwavjz, false, false); jzallBox->add(*jzBox); expjz->add(*jzallBox, false); - + jabcieConn = jabcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::jabcieChanged)); AutograycieConn = Autograycie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::AutograycieChanged)); sigmoidqjcieconn = sigmoidqjcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::sigmoidqjcieChanged)); @@ -7876,7 +7893,7 @@ Locallabcie::Locallabcie(): shapecie2->setBottomBarColorProvider (this, 1); shapecie2->setLeftBarColorProvider (this, 1); shapecie2->setRangeDefaultMilestones (0.05, 0.2, 0.58); - + std::vector shape2Milestones; // float R, G, B; @@ -7890,7 +7907,7 @@ Locallabcie::Locallabcie(): shapecie2->setLeftBarBgGradient (shape2Milestones); shapecie2->setRangeDefaultMilestones (0.05, 0.2, 0.58); - + cieCurveEditorG2->curveListComplete(); @@ -8006,7 +8023,7 @@ Locallabcie::Locallabcie(): /* sigmoidFrame->set_label_align(0.025, 0.5); ToolParamBlock* const sigBox = Gtk::manage(new ToolParamBlock()); - + sigBox->pack_start(*sigmoidldacie); sigBox->pack_start(*sigmoidthcie); sigBox->pack_start(*sigmoidblcie); @@ -8022,9 +8039,9 @@ Locallabcie::Locallabcie(): // cie1Frame->add(*cieP1Box); // expcam16->pack_start(*cie1Frame); expcam16->add(*cieP1Box, false); - + pack_start(*expcam16, false, false); - + pack_start(*expjz, false, false); /* ciezFrame->set_label_align(0.025, 0.5); @@ -8040,8 +8057,8 @@ Locallabcie::Locallabcie(): ciezFrame->add(*ciePzBox); pack_start(*ciezFrame); */ - - cie2Frame->set_label_align(0.025, 0.5); + + cie2Frame->set_label_align(0.025, 0.5); ToolParamBlock* const cieP2Box = Gtk::manage(new ToolParamBlock()); cieP2Box->pack_start(*targetGraycie); cieP2Box->pack_start(*targabscie); @@ -8049,7 +8066,7 @@ Locallabcie::Locallabcie(): cieP2Box->pack_start(*surrHBoxcie); // cieP2Box->pack_start(*detailcie); // cieP2Box->pack_start(*jabcie); - + cie2Frame->add(*cieP2Box); pack_start(*cie2Frame); @@ -8070,7 +8087,7 @@ Locallabcie::Locallabcie(): showmaskcieMethod->set_active(0); showmaskcieMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP")); showmaskcieMethodConn = showmaskcieMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallabcie::showmaskcieMethodChanged)); - + enacieMaskConn = enacieMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::enacieMaskChanged)); maskcieCurveEditorG->setCurveListener(this); @@ -8127,8 +8144,8 @@ Locallabcie::Locallabcie(): maskcieBox->pack_start(*mask2cieCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor expmaskcie->add(*maskcieBox, false); pack_start(*expmaskcie, false, false); - - + + } Locallabcie::~Locallabcie() @@ -8180,7 +8197,7 @@ void Locallabcie::updateAdviceTooltips(const bool showTooltips) cieFrame->set_tooltip_text(M("TP_LOCALLAB_LOGSCENE_TOOLTIP")); PQFrame->set_tooltip_text(M("TP_LOCALLAB_JZPQFRA_TOOLTIP")); qtoj->set_tooltip_text(M("TP_LOCALLAB_JZQTOJ_TOOLTIP")); - logcie->set_tooltip_text(M("TP_LOCALLAB_LOGCIE_TOOLTIP")); + logcie->set_tooltip_text(M("TP_LOCALLAB_LOGCIE_TOOLTIP")); modecam->set_tooltip_text(M("TP_LOCALLAB_JZMODECAM_TOOLTIP")); adapjzcie->set_tooltip_text(M("TP_LOCALLAB_JABADAP_TOOLTIP")); jz100->set_tooltip_text(M("TP_LOCALLAB_JZ100_TOOLTIP")); @@ -8364,7 +8381,7 @@ void Locallabcie::enacieMaskChanged() maskusablecie->hide(); maskunusablecie->show(); } - + if (isLocActivated && exp->getEnabled()) { if (listener) { if (enacieMask->get_active()) { @@ -8430,7 +8447,7 @@ void Locallabcie::read(const rtengine::procparams::ProcParams* pp, const ParamsE } else if (spot.toneMethodcie2 == "thrc") { toneMethodcie2->set_active(2); } - + Autograycie->set_active(spot.Autograycie); forcejz->set_active(spot.forcejz); forcebw->set_active(spot.forcebw); @@ -8447,7 +8464,7 @@ void Locallabcie::read(const rtengine::procparams::ProcParams* pp, const ParamsE jabcie->set_active(spot.jabcie); jabcieChanged(); modecamChanged(); - + if(logcie->get_active()) { sigmoidldacie->set_sensitive(false); sigmoidthcie->set_sensitive(false); @@ -8459,7 +8476,7 @@ void Locallabcie::read(const rtengine::procparams::ProcParams* pp, const ParamsE sigmoidblcie->set_sensitive(true); sigmoidqjcie->set_sensitive(true); } - + if (spot.sursourcie == "Average") { sursourcie->set_active (0); } else if (spot.sursourcie == "Dim") { @@ -8559,7 +8576,7 @@ void Locallabcie::read(const rtengine::procparams::ProcParams* pp, const ParamsE higthrescie->setValue((double)spot.higthrescie); decaycie->setValue((double)spot.decaycie); - + } enableListener(); // Update GUI according to complexity mode @@ -8707,7 +8724,7 @@ void Locallabcie::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedi spot.lightlzcam = lightlzcam->getValue(); spot.lightqzcam = lightqzcam->getValue(); spot.contlzcam = contlzcam->getValue(); - spot.contqzcam = contqzcam->getValue(); + spot.contqzcam = contqzcam->getValue(); spot.contthreszcam = contthreszcam->getValue(); spot.colorflzcam = colorflzcam->getValue(); spot.saturzcam = saturzcam->getValue(); @@ -8780,7 +8797,7 @@ void Locallabcie::updateMaskBackground(const double normChromar, const double no void Locallabcie::updateAutocompute(const float blackev, const float whiteev, const float sourceg, const float sourceab, const float targetg, const float jz1) -{ +{ if (Autograycie->get_active()) { idle_register.add( @@ -8889,7 +8906,7 @@ void Locallabcie::qtojChanged() } void Locallabcie::jabcieChanged() -{ +{ if (isLocActivated && exp->getEnabled()) { if (listener) { if (jabcie->get_active()) { @@ -8920,7 +8937,7 @@ void Locallabcie::sigmoidqjcieChanged() void Locallabcie::logcieChanged() { - + if(logcie->get_active()) { sigmoidldacie->set_sensitive(false); sigmoidthcie->set_sensitive(false); @@ -8932,7 +8949,7 @@ void Locallabcie::logcieChanged() sigmoidblcie->set_sensitive(true); sigmoidqjcie->set_sensitive(true); } - + if (isLocActivated && exp->getEnabled()) { if (listener) { if (logcie->get_active()) { @@ -9014,7 +9031,7 @@ void Locallabcie::chjzcieChanged() void Locallabcie::modecamChanged() { const int mode = complexity->get_active_row_number(); - + if (modecam->get_active_row_number() == 1 || modecam->get_active_row_number() == 2) { expjz->show(); jzFrame->show(); @@ -9028,7 +9045,7 @@ void Locallabcie::modecamChanged() sigmoidjzFrame->show(); sigmoidFrame->hide(); forcejz->hide(); - + } else { expjz->hide(); jzFrame->hide(); @@ -9039,7 +9056,7 @@ void Locallabcie::modecamChanged() jabcie->hide(); PQFrame->hide(); logjzFrame->hide(); - if (modecam->get_active_row_number() == 0){ + if (modecam->get_active_row_number() == 0){ bevwevFrame->show(); sigmoidFrame->show(); } @@ -9071,7 +9088,7 @@ void Locallabcie::modecamChanged() exprecovcie->show(); expmaskcie->show(); } - + } if (modecam->get_active_row_number() == 3) { if(mode == Expert) { @@ -9101,7 +9118,7 @@ void Locallabcie::modecamChanged() cie2Frame->hide(); } - } + } if(mode != Expert) { expjz->hide(); @@ -9115,7 +9132,7 @@ void Locallabcie::modecamChanged() sigmoidjzFrame->hide(); sigmoidFrame->hide(); bevwevFrame->hide(); - if (modecam->get_active_row_number() == 0){ + if (modecam->get_active_row_number() == 0){ bevwevFrame->show(); sigmoidFrame->show(); } @@ -9137,10 +9154,10 @@ void Locallabcie::modecamChanged() } else { cieFrame->show(); cie2Frame->show(); - if (modecam->get_active_row_number() == 0){ + if (modecam->get_active_row_number() == 0){ bevwevFrame->show(); sigmoidjzFrame->hide(); - + } if (modecam->get_active_row_number() == 1) { targetGraycie->hide(); @@ -9160,8 +9177,8 @@ void Locallabcie::modecamChanged() } else { thrhjzcie->set_sensitive(false); } - - + + } if (modecam->get_active_row_number() == 3) { cieFrame->show(); @@ -9179,7 +9196,7 @@ void Locallabcie::modecamChanged() catadcie->hide(); cie2Frame->hide(); } - + } if (modecam->get_active_row_number() == 0 || modecam->get_active_row_number() == 2) { targetGraycie->show(); @@ -9188,7 +9205,7 @@ void Locallabcie::modecamChanged() cie2Frame->show(); pqremapcam16->show(); } - + if (isLocActivated && exp->getEnabled()) { @@ -9204,17 +9221,17 @@ void Locallabcie::modecamChanged() void Locallabcie::modecieChanged() { if (isLocActivated && exp->getEnabled()) { - + const int mode = complexity->get_active_row_number(); exprecovcie->show(); expmaskcie->show(); - + if (modecie->get_active_row_number() > 0) { sensicie->hide(); reparcie->hide(); exprecovcie->hide(); expmaskcie->hide(); - + } else { sensicie->show(); reparcie->show(); @@ -9224,11 +9241,11 @@ void Locallabcie::modecieChanged() } } if (mode == Simple || mode == Normal) { // Keep widget hidden in Normal and Simple mode - + modecie->set_active (0); sensicie->show(); reparcie->show(); - + } if (listener) { @@ -9286,7 +9303,7 @@ void Locallabcie::updateGUIToMode(const modeType new_type) sensicie->show(); reparcie->show(); sigmoidblcie->hide(); - + expjz->hide(); jzFrame->hide(); adapjzcie->hide(); @@ -9314,7 +9331,7 @@ void Locallabcie::updateGUIToMode(const modeType new_type) bevwevFrame->hide(); sigmoidFrame->hide(); } - if (modecam->get_active_row_number() == 0){ + if (modecam->get_active_row_number() == 0){ bevwevFrame->show(); sigmoidFrame->show(); } @@ -9347,7 +9364,7 @@ void Locallabcie::updateGUIToMode(const modeType new_type) logjzFrame->hide(); catadcie->hide(); } - + break; case Normal: // Expert mode widgets are hidden in Normal mode @@ -9397,12 +9414,12 @@ void Locallabcie::updateGUIToMode(const modeType new_type) if (enacieMask->get_active()) { maskusablecie->show(); maskunusablecie->hide(); - + } else { maskusablecie->hide(); maskunusablecie->show(); } - if (modecam->get_active_row_number() == 0){ + if (modecam->get_active_row_number() == 0){ bevwevFrame->show(); sigmoidFrame->show(); } @@ -9431,7 +9448,7 @@ void Locallabcie::updateGUIToMode(const modeType new_type) expmaskcie->hide(); maskusablecie->hide(); maskunusablecie->hide(); - + } if (modecam->get_active_row_number() == 3) { cieFrame->hide(); @@ -9489,12 +9506,12 @@ void Locallabcie::updateGUIToMode(const modeType new_type) if (enacieMask->get_active()) { maskusablecie->show(); maskunusablecie->hide(); - + } else { maskusablecie->hide(); maskunusablecie->show(); } - if (modecam->get_active_row_number() == 0){ + if (modecam->get_active_row_number() == 0){ bevwevFrame->show(); } @@ -9511,7 +9528,7 @@ void Locallabcie::updateGUIToMode(const modeType new_type) sigmoidjzFrame->show(); sigmoidFrame->hide(); forcejz->hide(); - + } cieFrame->show(); cie2Frame->show(); @@ -9525,11 +9542,11 @@ void Locallabcie::updateGUIToMode(const modeType new_type) logjzFrame->hide(); sigmoidjzFrame->hide(); bevwevFrame->hide(); - if (modecam->get_active_row_number() == 0){ + if (modecam->get_active_row_number() == 0){ bevwevFrame->show(); sigmoidFrame->show(); } - + } if (modecam->get_active_row_number() == 2) { PQFrame->show(); @@ -9560,9 +9577,9 @@ void Locallabcie::updateGUIToMode(const modeType new_type) } else { thrhjzcie->set_sensitive(false); } - + } - + if (modecam->get_active_row_number() == 3) { cieFrame->show(); cie1Frame->hide(); @@ -9583,7 +9600,7 @@ void Locallabcie::updateGUIToMode(const modeType new_type) if (modecie->get_active_row_number() > 0) { exprecovcie->hide(); expmaskcie->hide(); - } + } } } @@ -9608,10 +9625,10 @@ void Locallabcie::updatecieGUI() cie1Frame->show(); cie2Frame->show(); expcam16->show(); - if (modecam->get_active_row_number() == 0){ + if (modecam->get_active_row_number() == 0){ bevwevFrame->show(); } - + if (modecam->get_active_row_number() == 2 && mode == Expert) { PQFrame->show(); logjzFrame->show(); @@ -9624,7 +9641,7 @@ void Locallabcie::updatecieGUI() if (enacieMask->get_active() && mode != Simple) { maskusablecie->show(); maskunusablecie->hide(); - + } else { maskusablecie->hide(); maskunusablecie->show(); @@ -9655,7 +9672,7 @@ void Locallabcie::updatecieGUI() sigmoidjzFrame->hide(); sigmoidFrame->hide(); bevwevFrame->hide(); - if (modecam->get_active_row_number() == 0){ + if (modecam->get_active_row_number() == 0){ bevwevFrame->show(); sigmoidFrame->show(); } @@ -9718,7 +9735,7 @@ void Locallabcie::updatecieGUI() exprecovcie->hide(); expmaskcie->hide(); } - + } @@ -9778,10 +9795,10 @@ void Locallabcie::convertParamToNormal() lapmaskcie->setValue(defSpot.lapmaskcie); gammaskcie->setValue(defSpot.gammaskcie); slomaskcie->setValue(defSpot.slomaskcie); - + // Enable all listeners enableListener(); - + } void Locallabcie::setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited) @@ -9875,13 +9892,13 @@ void Locallabcie::curveChanged(CurveEditor* ce) listener->panelChanged(Evlocallabshapeczjz, spName); } } - + if (ce == HHshapejz) { if (listener) { listener->panelChanged(EvlocallabHHshapejz, spName); } } - + if (ce == CHshapejz) { if (listener) { listener->panelChanged(EvlocallabCHshapejz, spName); @@ -9905,7 +9922,7 @@ void Locallabcie::curveChanged(CurveEditor* ce) listener->panelChanged(Evlocallabshapecie2, spName); } } - + if (ce == CCmaskcieshape) { if (listener) { listener->panelChanged(EvlocallabCCmaskcieshape, @@ -9989,7 +10006,7 @@ void Locallabcie::adjusterChanged(Adjuster* a, double newval) float pal = std::max(10. * (double) sqrt(sour), 1.5); adapjzcie->setValue(pal);//max to 10 if La > 10000 and mini to 1.5 jz100->setValue(defSpot.jz100); - + if (listener) { listener->panelChanged(Evlocallabsourceabscie, sourceabscie->getTextValue() + spName ); @@ -10361,7 +10378,7 @@ void Locallabcie::adjusterChanged(Adjuster* a, double newval) detailcie->getTextValue() + spName); } } - + if (a == blendmaskcie) { if (listener) { listener->panelChanged(Evlocallabblendmaskcie, @@ -10405,7 +10422,7 @@ void Locallabcie::adjusterChanged(Adjuster* a, double newval) } if (a == recothrescie) { - + if (listener) { listener->panelChanged(Evlocallabrecothrescie, recothrescie->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")"); diff --git a/rtgui/lockablecolorpicker.cc b/rtgui/lockablecolorpicker.cc index 0a08bb945..4a8529c38 100644 --- a/rtgui/lockablecolorpicker.cc +++ b/rtgui/lockablecolorpicker.cc @@ -20,15 +20,23 @@ #include "lockablecolorpicker.h" #include "options.h" #include "../rtengine/color.h" +#include "../rtengine/improcfun.h" #include "../rtengine/rt_math.h" #include "../rtengine/utils.h" #include "imagearea.h" #include "multilangmgr.h" #include "navigator.h" -LockableColorPicker::LockableColorPicker (CropWindow* cropWindow, Glib::ustring *oProfile, Glib::ustring *wProfile) +namespace +{ + +const rtengine::procparams::ColorManagementParams DEFAULT_CMP; + +} + +LockableColorPicker::LockableColorPicker (CropWindow* cropWindow, rtengine::procparams::ColorManagementParams *color_management_params) : cropWindow(cropWindow), displayedValues(ColorPickerType::RGB), position(0, 0), size(Size::S15), - outputProfile(oProfile), workingProfile(wProfile), validity(Validity::OUTSIDE), + color_management_params(color_management_params), validity(Validity::OUTSIDE), r(0.f), g(0.f), b(0.f), rpreview(0.f), gpreview(0.f), bpreview(0.f), hue(0.f), sat(0.f), val(0.f), L(0.f), a(0.f), bb(0.f) {} @@ -45,10 +53,13 @@ void LockableColorPicker::updateBackBuffer () Gtk::DrawingArea *iArea = cropWindow->getImageArea(); Glib::RefPtr pangoContext = iArea->get_pango_context (); - Pango::FontDescription fontd = pangoContext->get_font_description(); + Pango::FontDescription fontd = iArea->get_style_context()->get_font(); // set font family and size fontd.set_family(options.CPFontFamily == "default" ? "sans" : options.CPFontFamily); - fontd.set_size((options.CPFontFamily == "default" ? 8 : options.CPFontSize) * Pango::SCALE); + const int fontSize = options.CPFontFamily == "default" ? 8 : options.CPFontSize; // pt + // Non-absolute size is defined in "Pango units" and shall be multiplied by + // Pango::SCALE from "pt": + fontd.set_size (fontSize * Pango::SCALE); fontd.set_weight(Pango::WEIGHT_NORMAL); pangoContext->set_font_description (fontd); @@ -277,7 +288,16 @@ void LockableColorPicker::setRGB (const float R, const float G, const float B, c bpreview = previewB; rtengine::Color::rgb2hsv01(r, g, b, hue, sat, val); - rtengine::Color::rgb2lab01(*outputProfile, *workingProfile, r, g, b, L, a, bb, options.rtSettings.HistogramWorking); // TODO: Really sure this function works? + rtengine::ImProcFunctions::rgb2lab( + static_cast(255 * r), + static_cast(255 * g), + static_cast(255 * b), + L, a, bb, + color_management_params != nullptr ? *color_management_params : DEFAULT_CMP, + true); + L /= 327.68f; + a /= 327.68f; + bb /= 327.68f; if (validity != Validity::OUTSIDE) { setDirty(true); diff --git a/rtgui/lockablecolorpicker.h b/rtgui/lockablecolorpicker.h index baeea41ef..3de6256e9 100644 --- a/rtgui/lockablecolorpicker.h +++ b/rtgui/lockablecolorpicker.h @@ -24,6 +24,18 @@ class CropWindow; +namespace rtengine +{ + +namespace procparams +{ + +struct ColorManagementParams; + +} + +} + class LockablePickerToolListener { public: @@ -60,8 +72,7 @@ private: rtengine::Coord position; // Coordinate in image space rtengine::Coord anchorOffset; Size size; - Glib::ustring *outputProfile; - Glib::ustring *workingProfile; + rtengine::procparams::ColorManagementParams *color_management_params; Validity validity; float r, g, b; // red green blue in [0;1] range float rpreview, gpreview, bpreview; @@ -72,7 +83,7 @@ private: public: - LockableColorPicker (CropWindow* cropWindow, Glib::ustring *oProfile, Glib::ustring *wProfile); + LockableColorPicker (CropWindow* cropWindow, rtengine::procparams::ColorManagementParams *color_management_params); void draw (const Cairo::RefPtr &cr); diff --git a/rtgui/lwbutton.cc b/rtgui/lwbutton.cc index 26d36f9e0..cd6678ed5 100644 --- a/rtgui/lwbutton.cc +++ b/rtgui/lwbutton.cc @@ -20,19 +20,19 @@ #include "guiutils.h" #include "rtsurface.h" -LWButton::LWButton (Cairo::RefPtr i, int aCode, void* aData, Alignment ha, Alignment va, Glib::ustring* tooltip) +LWButton::LWButton (std::shared_ptr i, int aCode, void* aData, Alignment ha, Alignment va, Glib::ustring* tooltip) : xpos(0), ypos(0), halign(ha), valign(va), icon(i), bgr(0.0), bgg(0.0), bgb(0.0), fgr(0.0), fgg(0.0), fgb(0.0), state(Normal), listener(nullptr), actionCode(aCode), actionData(aData), toolTip(tooltip) { if (i) { - w = i->getWidth () + 2; - h = i->getHeight () + 2; + w = i->getWidth (); + h = i->getHeight (); } else { w = h = 2; } } -void LWButton::getSize (int& minw, int& minh) const +void LWButton::getSize (int& minw, int& minh) const { minw = w; @@ -59,20 +59,20 @@ void LWButton::getPosition (int& x, int& y) const y = ypos; } -void LWButton::setIcon (Cairo::RefPtr i) +void LWButton::setIcon (std::shared_ptr i) { icon = i; if (i) { - w = i->getWidth () + 2; - h = i->getHeight () + 2; + w = i->getWidth (); + h = i->getHeight (); } else { w = h = 2; } } -Cairo::RefPtr LWButton::getIcon () const +std::shared_ptr LWButton::getIcon () const { return icon; @@ -186,9 +186,9 @@ void LWButton::redraw (Cairo::RefPtr context) { GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected - context->set_line_width (1.0); + context->set_line_width (2.0); // Line width shall be even to avoid blur effect when upscaling context->set_antialias (Cairo::ANTIALIAS_SUBPIXEL); - context->rectangle (xpos + 0.5, ypos + 0.5, w - 1.0, h - 1.0); + context->rectangle (xpos, ypos, w, h); if (state == Pressed_In) { context->set_source_rgb (fgr, fgg, fgb); @@ -205,13 +205,13 @@ void LWButton::redraw (Cairo::RefPtr context) } context->stroke (); - int dilat = 1; + int dilat = 0; if (state == Pressed_In) { dilat++; } - if (icon) { + if (icon && icon->hasSurface()) { context->set_source (icon->get(), xpos + dilat, ypos + dilat); context->paint (); } diff --git a/rtgui/lwbutton.h b/rtgui/lwbutton.h index a98f1fe46..43c3ffe06 100644 --- a/rtgui/lwbutton.h +++ b/rtgui/lwbutton.h @@ -40,7 +40,7 @@ public: private: int xpos, ypos, w, h; Alignment halign, valign; - Cairo::RefPtr icon; + std::shared_ptr icon; double bgr, bgg, bgb; double fgr, fgg, fgb; State state; @@ -50,7 +50,7 @@ private: Glib::ustring* toolTip; public: - LWButton (Cairo::RefPtr i, int aCode, void* aData, Alignment ha = Left, Alignment va = Center, Glib::ustring* tooltip = nullptr); + LWButton (std::shared_ptr i, int aCode, void* aData, Alignment ha = Left, Alignment va = Center, Glib::ustring* tooltip = nullptr); void getSize (int& minw, int& minh) const; void getAlignment (Alignment& ha, Alignment& va) const; @@ -58,8 +58,8 @@ public: void addPosition (int x, int y); void getPosition (int& x, int& y) const; bool inside (int x, int y) const; - void setIcon (Cairo::RefPtr i); - Cairo::RefPtr getIcon () const; + void setIcon (std::shared_ptr i); + std::shared_ptr getIcon () const; void setColors (const Gdk::RGBA& bg, const Gdk::RGBA& fg); void setToolTip (Glib::ustring* tooltip); 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..fb29e9c4c 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 @@ -68,30 +69,9 @@ Glib::ustring argv2; bool simpleEditor = false; bool gimpPlugin = false; 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 +120,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 +166,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 +209,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)) { @@ -250,7 +230,7 @@ void cleanup_rt() RTWindow *create_rt_window() { - Glib::ustring icon_path = Glib::build_filename (argv0, "images"); + Glib::ustring icon_path = Glib::build_filename (argv0, "icons"); Glib::RefPtr defaultIconTheme = Gtk::IconTheme::get_default(); defaultIconTheme->append_search_path (icon_path); @@ -381,7 +361,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 +372,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 +415,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 @@ -535,16 +515,6 @@ int main (int argc, char **argv) int ret = 0; - if (options.pseudoHiDPISupport) { - // Reading/updating GDK_SCALE early if it exists - const gchar *gscale = g_getenv("GDK_SCALE"); - if (gscale && gscale[0] == '2') { - initialGdkScale = 2; - } - // HOMBRE: On Windows, if resolution is set to 200%, Gtk internal variables are SCALE=2 and DPI=96 - g_setenv("GDK_SCALE", "1", true); - } - gdk_threads_set_lock_functions (G_CALLBACK (myGdkLockEnter), (G_CALLBACK (myGdkLockLeave))); gdk_threads_init(); gtk_init (&argc, &argv); // use the "--g-fatal-warnings" command line flag to make warnings fatal @@ -586,7 +556,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/mycurve.cc b/rtgui/mycurve.cc index d460713fb..6fd689e32 100644 --- a/rtgui/mycurve.cc +++ b/rtgui/mycurve.cc @@ -41,9 +41,7 @@ MyCurve::MyCurve () : snapToValX(0.0), snapToValY(0.0) { - - int s = RTScalable::getScale(); - int pointDiameter = (int)(RADIUS * 2.) * s; + int pointDiameter = (int)(RADIUS * 2.); graphW = get_allocation().get_width() - pointDiameter; graphH = get_allocation().get_height() - pointDiameter; prevGraphW = graphW; @@ -78,13 +76,12 @@ MyCurve::~MyCurve () void MyCurve::calcDimensions () { double newRequestedW, newRequestedH; - double s = (double)RTScalable::getScale(); newRequestedW = newRequestedH = get_allocation().get_width(); - graphX = ((double)RADIUS + (leftBar ? (double)CBAR_WIDTH + 2. + (double)CBAR_MARGIN : 0.)) * s; - graphH = graphW = newRequestedW - graphX - (double)RADIUS * s; - graphY = (double)RADIUS * s + graphW; + graphX = (double)RADIUS + (leftBar ? (double)CBAR_WIDTH + 2. + (double)CBAR_MARGIN : 0.); + graphH = graphW = newRequestedW - graphX - (double)RADIUS; + graphY = (double)RADIUS + graphW; return; } @@ -103,21 +100,19 @@ void MyCurve::get_preferred_height_vfunc (int &minimum_height, int &natural_heig void MyCurve::get_preferred_width_vfunc (int &minimum_width, int &natural_width) const { - int s = RTScalable::getScale(); - natural_width = minimum_width = (GRAPH_SIZE + (int)(RADIUS * 2.) + (leftBar ? (CBAR_WIDTH + 2 + CBAR_MARGIN) : 0)) * s; + natural_width = minimum_width = (GRAPH_SIZE + (int)(RADIUS * 2.) + RTScalable::scalePixelSize(leftBar ? (CBAR_WIDTH + 2 + CBAR_MARGIN) : 0)); } void MyCurve::get_preferred_height_for_width_vfunc (int width, int &minimum_height, int &natural_height) const { minimum_height = width; - int s = RTScalable::getScale(); if (leftBar && !bottomBar) { - minimum_height -= (CBAR_WIDTH + 2 + CBAR_MARGIN) * s; + minimum_height -= CBAR_WIDTH + 2 + CBAR_MARGIN; } if (!leftBar && bottomBar) { - minimum_height += (CBAR_WIDTH + 2 + CBAR_MARGIN) * s; + minimum_height += CBAR_WIDTH + 2 + CBAR_MARGIN; } natural_height = minimum_height; @@ -189,22 +184,11 @@ float MyCurve::getVal(LUTf &curve, int x) void MyCurve::on_style_updated () { - setDirty(true); queue_draw (); } void MyCurve::refresh() { - if (leftBar != nullptr) { - leftBar->setDirty(true); - } - - if (bottomBar != nullptr) { - bottomBar->setDirty(true); - } - - setDirty(true); - Glib::RefPtr win = get_window(); if (win) { diff --git a/rtgui/mycurve.h b/rtgui/mycurve.h index 6bdfe4b66..a6e375aac 100644 --- a/rtgui/mycurve.h +++ b/rtgui/mycurve.h @@ -57,7 +57,7 @@ class MyCurveIdleHelper; class CurveEditor; class EditDataProvider; -class MyCurve : public Gtk::DrawingArea, public BackBuffer, public ColorCaller, public CoordinateProvider, public rtengine::NonCopyable +class MyCurve : public Gtk::DrawingArea, public ColorCaller, public CoordinateProvider, public rtengine::NonCopyable { friend class MyCurveIdleHelper; @@ -150,6 +150,6 @@ public: void clearPixmap () { - myCurve->setDirty(true); + myCurve->queue_draw(); } }; diff --git a/rtgui/mydiagonalcurve.cc b/rtgui/mydiagonalcurve.cc index 4f9422c69..4bf8580b5 100644 --- a/rtgui/mydiagonalcurve.cc +++ b/rtgui/mydiagonalcurve.cc @@ -23,7 +23,6 @@ #include "mydiagonalcurve.h" #include "editcallbacks.h" -#include "rtscalable.h" #include "../rtengine/curves.h" @@ -150,8 +149,7 @@ void MyDiagonalCurve::updateLocallabBackground(double ref) return false; } - mcih->clearPixmap(); - mcih->myCurve->queue_draw(); + mcih->clearPixmap(); --mcih->pending; @@ -250,24 +248,18 @@ void MyDiagonalCurve::interpolate () curveIsDirty = false; } -void MyDiagonalCurve::draw (int handle) +void MyDiagonalCurve::updateDrawingArea (const int handle, const ::Cairo::RefPtr< Cairo::Context> &cr) { - if (!isDirty()) { + if (!get_realized()) { return; } - if (!surfaceCreated()) { - return; - } - - const double s = (double)RTScalable::getScale(); - // re-calculate curve if dimensions changed int currLUTSize = point.getUpperBound(); if (curveIsDirty - || (currLUTSize == (GRAPH_SIZE * s) && (graphW > (GRAPH_SIZE * s))) - || (currLUTSize > (GRAPH_SIZE * s) && (graphW <= (GRAPH_SIZE * s) || graphW != currLUTSize)) ) + || (currLUTSize == GRAPH_SIZE && (graphW > GRAPH_SIZE)) + || (currLUTSize > GRAPH_SIZE && (graphW <= GRAPH_SIZE || graphW != currLUTSize)) ) { interpolate (); } @@ -277,20 +269,17 @@ void MyDiagonalCurve::draw (int handle) Gtk::StateFlags state = !is_sensitive() ? Gtk::STATE_FLAG_INSENSITIVE : Gtk::STATE_FLAG_NORMAL; Glib::RefPtr style = get_style_context(); - Cairo::RefPtr cr = getContext(); - cr->set_line_cap(Cairo::LINE_CAP_SQUARE); - // clear background - cr->set_source_rgba (0., 0., 0., 0.); - cr->set_operator (Cairo::OPERATOR_CLEAR); - cr->paint (); + // Setup drawing + cr->set_line_cap(Cairo::LINE_CAP_SQUARE); cr->set_operator (Cairo::OPERATOR_OVER); + // Render background style->render_background(cr, graphX, graphY-graphH, graphW, graphH); Gdk::RGBA c; - cr->set_line_width (1.0 * s); + cr->set_line_width (1.0); // Draw Locallab reference value in the background if (locallabRef > 0.0) { @@ -309,28 +298,26 @@ void MyDiagonalCurve::draw (int handle) // draw the left colored bar if (leftBar) { // first the background - BackBuffer *bb = this; - leftBar->setDrawRectangle(1. * s, graphY - graphH - 0.5, CBAR_WIDTH * s, graphH); - leftBar->expose(*this, bb); + leftBar->setColoredBarSize(1., graphY - graphH - 0.5, CBAR_WIDTH, graphH); + leftBar->updateColoredBar(cr); // now the border c = style->get_border_color(state); cr->set_source_rgb (c.get_red(), c.get_green(), c.get_blue()); - cr->rectangle(0.5 * s, graphY - graphH - 0.5 - 0.5 * s, (CBAR_WIDTH + 1) * s, (double)graphH + 1. + 1. * s); + cr->rectangle(0.5, graphY - graphH - 0.5 - 0.5, CBAR_WIDTH + 1, (double)graphH + 1. + 1.); cr->stroke(); } // draw the bottom colored bar if (bottomBar) { // first the background - BackBuffer *bb = this; - bottomBar->setDrawRectangle(graphX - 0.5, graphY + (RADIUS + CBAR_MARGIN + 1.) * s, graphW + 1., CBAR_WIDTH * s); - bottomBar->expose(*this, bb); + bottomBar->setColoredBarSize(graphX - 0.5, graphY + RADIUS + CBAR_MARGIN + 1., graphW + 1., CBAR_WIDTH); + bottomBar->updateColoredBar(cr); // now the border c = style->get_border_color (state); cr->set_source_rgb (c.get_red(), c.get_green(), c.get_blue()); - cr->rectangle(graphX - 0.5 - 0.5 * s, graphY + (RADIUS + CBAR_MARGIN + 0.5) * s, graphW + 1. + 0.5 * s, (CBAR_WIDTH + 1.) * s); + cr->rectangle(graphX - 0.5 - 0.5, graphY + CBAR_MARGIN + 0.5, graphW + 1. + 0.5, CBAR_WIDTH + 1.); cr->stroke(); } @@ -345,7 +332,7 @@ void MyDiagonalCurve::draw (int handle) } // draw histogram - cr->set_line_width (1.0 * s); + cr->set_line_width (1.0); double stepSize = graphW / 255.0; cr->move_to (graphX, graphY); c = style->get_color(state); @@ -367,18 +354,18 @@ void MyDiagonalCurve::draw (int handle) } // draw the grid lines: - cr->set_line_width (1.0 * s); + cr->set_line_width (1.0); c = style->get_border_color(state); cr->set_source_rgba (c.get_red(), c.get_green(), c.get_blue(), 0.3); cr->set_antialias (Cairo::ANTIALIAS_NONE); for (int i = 0; i <= 10; i++) { // horizontal lines - cr->move_to (graphX - 0.5 - 0.5 * s, graphY + 0.5 + 0.5 * s - (graphH + 1. + 1. * s) * (double)i / 10.); - cr->rel_line_to (graphW + 1. + 1. * s, 0.); + cr->move_to (graphX - 0.5 - 0.5, graphY + 0.5 + 0.5 - (graphH + 1. + 1.) * (double)i / 10.); + cr->rel_line_to (graphW + 1. + 1., 0.); // vertical lines - cr->move_to (graphX - 0.5 - 0.5 * s + (graphW + 1. + 1. * s) * (double)i / 10., graphY + 0.5 + 0.5 * s); - cr->rel_line_to (0., -graphH - 1. - 1. * s); + cr->move_to (graphX - 0.5 - 0.5 + (graphW + 1. + 1.) * (double)i / 10., graphY + 0.5 + 0.5); + cr->rel_line_to (0., -graphH - 1. - 1.); } cr->stroke (); @@ -390,16 +377,15 @@ void MyDiagonalCurve::draw (int handle) cr->set_source_rgb (c.get_red(), c.get_green(), c.get_blue()); } - std::valarray ds (1); - ds[0] = 4 * s; + const std::valarray ds = {4.}; cr->set_dash (ds, 0); - cr->move_to (graphX - 0.5 - 0.5 * s, graphY + 0.5 + 0.5 * s); - cr->rel_line_to (graphW + 1. + 1. * s, -(graphH + 1. + 1. * s)); + cr->move_to (graphX - 0.5 - 0.5, graphY + 0.5 + 0.5); + cr->rel_line_to (graphW + 1. + 1., -(graphH + 1. + 1.)); cr->stroke (); cr->unset_dash (); cr->set_antialias (Cairo::ANTIALIAS_SUBPIXEL); - cr->set_line_width (1.0 * s); + cr->set_line_width (1.0); // draw upper and lower bounds if (curve.type == DCT_Parametric && activeParam > 0 && lpoint.getUpperBound() > 1 && upoint.getUpperBound() > 1) { @@ -436,34 +422,34 @@ void MyDiagonalCurve::draw (int handle) if (n > 1) { if (pipetteR > -1.f) { cr->set_source_rgba (1., 0., 0., 0.5); // WARNING: assuming that red values are stored in pipetteR, which might not be the case! - cr->move_to (graphX + graphW * static_cast(pipetteR), graphY + 1. * s); - cr->rel_line_to (0, -graphH - 1. * s); + cr->move_to (graphX + graphW * static_cast(pipetteR), graphY + 1.); + cr->rel_line_to (0, -graphH - 1.); cr->stroke (); } if (pipetteG > -1.f) { cr->set_source_rgba (0., 1., 0., 0.5); // WARNING: assuming that green values are stored in pipetteG, which might not be the case! - cr->move_to (graphX + graphW * static_cast(pipetteG), graphY + 1. * s); - cr->rel_line_to (0, -graphH - 1. * s); + cr->move_to (graphX + graphW * static_cast(pipetteG), graphY + 1.); + cr->rel_line_to (0, -graphH - 1.); cr->stroke (); } if (pipetteB > -1.f) { cr->set_source_rgba (0., 0., 1., 0.5); // WARNING: assuming that blue values are stored in pipetteB, which might not be the case! - cr->move_to (graphX + graphW * static_cast(pipetteB), graphY + 1. * s); - cr->rel_line_to (0, -graphH - 1. * s); + cr->move_to (graphX + graphW * static_cast(pipetteB), graphY + 1.); + cr->rel_line_to (0, -graphH - 1.); cr->stroke (); } } if (pipetteVal > -1.f) { - cr->set_line_width (2. * s); + cr->set_line_width (2.); c = style->get_color (state); cr->set_source_rgb (c.get_red(), c.get_green(), c.get_blue()); - cr->move_to (graphX + graphW * static_cast(pipetteVal), graphY + 1. * s); - cr->rel_line_to (0, -graphH - 1. * s); + cr->move_to (graphX + graphW * static_cast(pipetteVal), graphY + 1.); + cr->rel_line_to (0, -graphH - 1.); cr->stroke (); - cr->set_line_width (1. * s); + cr->set_line_width (1.); } } @@ -472,10 +458,9 @@ void MyDiagonalCurve::draw (int handle) // draw the cage of the NURBS curve if (curve.type == DCT_NURBS) { unsigned int nbPoints; - std::valarray ch_ds (1); - ch_ds[0] = 2 * s; + const std::valarray ch_ds = {2.}; cr->set_dash (ch_ds, 0); - cr->set_line_width (0.75 * s); + cr->set_line_width (0.75); cr->set_source_rgb (c.get_red(), c.get_green(), c.get_blue()); std::vector points = getPoints(); nbPoints = ((int)points.size() - 1) / 2; @@ -501,7 +486,7 @@ void MyDiagonalCurve::draw (int handle) } cr->unset_dash (); - cr->set_line_width (1.0 * s); + cr->set_line_width (1.0); } // draw curve @@ -542,40 +527,26 @@ void MyDiagonalCurve::draw (int handle) double x = graphX + graphW * curve.x.at(i); // project (curve.x.at(i), 0, 1, graphW); double y = graphY - graphH * curve.y.at(i); // project (curve.y.at(i), 0, 1, graphH); - cr->arc (x, y, RADIUS * s + 0.5, 0, 2 * rtengine::RT_PI); + cr->arc (x, y, RADIUS + 0.5, 0, 2 * rtengine::RT_PI); cr->fill (); if (i == edited_point) { - cr->set_line_width(2. * s); - cr->arc (x, y, (RADIUS + 2.) * s, 0, 2 * rtengine::RT_PI); + cr->set_line_width(2.); + cr->arc (x, y, RADIUS + 2., 0, 2 * rtengine::RT_PI); cr->stroke(); - cr->set_line_width(1. * s); + cr->set_line_width(1.); } } } - - setDirty(false); - queue_draw(); } bool MyDiagonalCurve::on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr) { - Gtk::Allocation allocation = get_allocation(); - allocation.set_x(0); - allocation.set_y(0); + // Draw drawing area + // Note: As drawing area surface is updated inside on_draw function, hidpi is automatically supported + updateDrawingArea(lit_point, cr); - // setDrawRectangle will allocate the backbuffer Surface - if (setDrawRectangle(Cairo::FORMAT_ARGB32, allocation)) { - setDirty(true); - - if (prevGraphW > GRAPH_SIZE || graphW > GRAPH_SIZE) { - curveIsDirty = true; - } - } - - draw (lit_point); - copySurface(cr); return false; } @@ -594,10 +565,8 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event) return false; } - double s = RTScalable::getScale(); - - double minDistanceX = double(MIN_DISTANCE) / graphW * s; - double minDistanceY = double(MIN_DISTANCE) / graphH * s; + double minDistanceX = double(MIN_DISTANCE) / graphW; + double minDistanceY = double(MIN_DISTANCE) / graphH; switch (event->type) { case GDK_BUTTON_PRESS: @@ -644,8 +613,7 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event) curve.y.at(closest_point) = clampedY; curveIsDirty = true; - setDirty(true); - draw (closest_point); + queue_draw(); notifyListener (); } @@ -680,8 +648,7 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event) editedPos.at(1) = curve.y.at(edited_point); coordinateAdjuster->setPos(editedPos); coordinateAdjuster->startNumericalAdjustment(newBoundaries); - setDirty(true); - draw (lit_point); + queue_draw(); new_type = CSArrow; } } @@ -701,8 +668,7 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event) if (lit_point != edited_point) { edited_point = lit_point; curveIsDirty = true; - setDirty(true); - draw (lit_point); + queue_draw(); std::vector newBoundaries; newBoundaries.resize(2); int size = curve.x.size(); @@ -774,8 +740,7 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event) curve.x.push_back (0); curve.y.push_back (0); curveIsDirty = true; - setDirty(true); - draw (lit_point); + queue_draw(); } } @@ -788,8 +753,7 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event) } if (lit_point != previous_lit_point) { - setDirty(true); - draw (lit_point); + queue_draw(); } grab_point = -1; @@ -809,8 +773,7 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event) new_type = CSArrow; lit_point = -1; pipetteR = pipetteG = pipetteB = -1.f; - setDirty(true); - draw (lit_point); + queue_draw(); } } @@ -854,8 +817,7 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event) } if (lit_point != previous_lit_point) { - setDirty(true); - draw (lit_point); + queue_draw(); if (lit_point > -1) { editedPos.at(0) = curve.x.at(lit_point); @@ -884,8 +846,7 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event) } if (lit_point != previous_lit_point) { - setDirty(true); - draw (lit_point); + queue_draw(); } } } else { @@ -986,8 +947,7 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event) if (curve.x.at(grab_point) != prevPosX || curve.y.at(grab_point) != prevPosY) { // we recalculate the curve only if we have to curveIsDirty = true; - setDirty(true); - draw (lit_point); + queue_draw(); notifyListener (); if (coordinateAdjuster->is_visible()) { @@ -1069,8 +1029,7 @@ void MyDiagonalCurve::pipetteMouseOver (CurveEditor *ce, EditDataProvider *provi return; } - double s = (double)RTScalable::getScale(); - double minDistanceX = MIN_DISTANCE / graphW * s; + double minDistanceX = MIN_DISTANCE / graphW; if (curve.type == DCT_Linear || curve.type == DCT_Spline || curve.type == DCT_NURBS || curve.type == DCT_CatumullRom) { // get the pointer position @@ -1092,12 +1051,11 @@ void MyDiagonalCurve::pipetteMouseOver (CurveEditor *ce, EditDataProvider *provi } if (lit_point != previous_lit_point) { - setDirty(true); - draw (lit_point); + queue_draw(); } } } else { - draw(lit_point); + queue_draw(); } if (edited_point == -1) { @@ -1124,8 +1082,7 @@ bool MyDiagonalCurve::pipetteButton1Pressed(EditDataProvider *provider, int modi return false; } - double s = (double)RTScalable::getScale(); - double minDistanceX = double(MIN_DISTANCE) * s / graphW; + double minDistanceX = double(MIN_DISTANCE) / graphW; snapToElmt = -100; @@ -1172,8 +1129,7 @@ bool MyDiagonalCurve::pipetteButton1Pressed(EditDataProvider *provider, int modi } curveIsDirty = true; - setDirty(true); - draw (lit_point); + queue_draw(); notifyListener (); } @@ -1201,8 +1157,7 @@ void MyDiagonalCurve::pipetteButton1Released(EditDataProvider *provider) return; } - double s = (double)RTScalable::getScale(); - double minDistanceX = double(MIN_DISTANCE) * s / graphW; + double minDistanceX = double(MIN_DISTANCE) / graphW; snapToElmt = -100; @@ -1221,8 +1176,7 @@ void MyDiagonalCurve::pipetteButton1Released(EditDataProvider *provider) } if (lit_point != previous_lit_point) { - setDirty(true); - draw (lit_point); + queue_draw(); } grab_point = -1; @@ -1309,8 +1263,7 @@ void MyDiagonalCurve::pipetteDrag(EditDataProvider *provider, int modifierKey) if (curve.x.at(grab_point) != prevPosX || curve.y.at(grab_point) != prevPosY) { // we recalculate the curve only if we have to curveIsDirty = true; - setDirty(true); - draw (lit_point); + queue_draw(); notifyListener (); if (lit_point > -1 && coordinateAdjuster->is_visible()) { @@ -1505,7 +1458,6 @@ void MyDiagonalCurve::setPoints (const std::vector& p) } curveIsDirty = true; - setDirty(true); queue_draw (); } @@ -1520,8 +1472,7 @@ void MyDiagonalCurve::setPos(double pos, int chanIdx) } curveIsDirty = true; - setDirty(true); - draw(lit_point); + queue_draw(); notifyListener (); } @@ -1530,8 +1481,7 @@ void MyDiagonalCurve::stopNumericalAdjustment() if (edited_point > -1) { edited_point = grab_point = lit_point = -1; coordinateAdjuster->stopNumericalAdjustment(); - setDirty(true); - draw(lit_point); + queue_draw(); } } @@ -1539,13 +1489,12 @@ void MyDiagonalCurve::setType (DiagonalCurveType t) { curve.type = t; - setDirty(true); + queue_draw(); } void MyDiagonalCurve::setActiveParam (int ac) { activeParam = ac; - setDirty(true); queue_draw (); } @@ -1579,7 +1528,6 @@ void MyDiagonalCurve::updateBackgroundHistogram (const LUTu & hist) } mcih->clearPixmap(); - mcih->myCurve->queue_draw(); --mcih->pending; @@ -1632,6 +1580,5 @@ void MyDiagonalCurve::reset(const std::vector &resetCurve, double identi break; } - setDirty(true); - draw(-1); + queue_draw(); } diff --git a/rtgui/mydiagonalcurve.h b/rtgui/mydiagonalcurve.h index 0eb173f70..76c9c1ec0 100644 --- a/rtgui/mydiagonalcurve.h +++ b/rtgui/mydiagonalcurve.h @@ -64,7 +64,7 @@ protected: bool bghistvalid; double locallabRef; // Locallab reference value to display in the background - void draw (int handle); + void updateDrawingArea (const int handle, const ::Cairo::RefPtr< Cairo::Context> &cr); void interpolate (); void findClosestPoint(); CursorShape motionNotify(CursorShape type, double minDistanceX, double minDistanceY, int num); diff --git a/rtgui/myflatcurve.cc b/rtgui/myflatcurve.cc index 11d89ebd8..dc79a400b 100644 --- a/rtgui/myflatcurve.cc +++ b/rtgui/myflatcurve.cc @@ -23,7 +23,6 @@ #include "myflatcurve.h" #include "editcallbacks.h" -#include "rtscalable.h" #include "../rtengine/curves.h" @@ -130,24 +129,18 @@ void MyFlatCurve::interpolate () curveIsDirty = false; } -void MyFlatCurve::draw () +void MyFlatCurve::updateDrawingArea (const ::Cairo::RefPtr< Cairo::Context> &cr) { - if (!isDirty()) { + if (!get_realized()) { return; } - if (!surfaceCreated()) { - return; - } - - double s = (double)RTScalable::getScale(); - // re-calculate curve if dimensions changed int currLUTSize = point.getUpperBound(); if (curveIsDirty - || (currLUTSize == (GRAPH_SIZE * s) && (graphW > (GRAPH_SIZE * s))) - || (currLUTSize > (GRAPH_SIZE * s) && (graphW <= (GRAPH_SIZE * s) || graphW != currLUTSize)) ) + || (currLUTSize == GRAPH_SIZE && (graphW > GRAPH_SIZE)) + || (currLUTSize > GRAPH_SIZE && (graphW <= GRAPH_SIZE || graphW != currLUTSize)) ) { interpolate (); } @@ -155,20 +148,17 @@ void MyFlatCurve::draw () Gtk::StateFlags state = !is_sensitive() ? Gtk::STATE_FLAG_INSENSITIVE : Gtk::STATE_FLAG_NORMAL; Glib::RefPtr style = get_style_context(); - Cairo::RefPtr cr = getContext(); - cr->set_line_cap(Cairo::LINE_CAP_SQUARE); - // clear background - cr->set_source_rgba (0., 0., 0., 0.); - cr->set_operator (Cairo::OPERATOR_CLEAR); - cr->paint (); + // Setup drawing + cr->set_line_cap(Cairo::LINE_CAP_SQUARE); cr->set_operator (Cairo::OPERATOR_OVER); + // Render background style->render_background(cr, graphX, graphY-graphH, graphW, graphH); Gdk::RGBA c; - cr->set_line_width (1.0 * s); + cr->set_line_width (1.0); // Draw Locallab reference value in the background if (locallabRef > 0.0) { @@ -187,49 +177,46 @@ void MyFlatCurve::draw () // draw the left colored bar if (leftBar) { // first the background - BackBuffer *bb = this; - leftBar->setDrawRectangle(1. * s, graphY - graphH - 0.5, CBAR_WIDTH * s, graphH); - leftBar->expose(*this, bb); + leftBar->setColoredBarSize(1., graphY - graphH - 0.5, CBAR_WIDTH, graphH); + leftBar->updateColoredBar(cr); // now the border c = style->get_border_color(state); cr->set_source_rgb (c.get_red(), c.get_green(), c.get_blue()); - cr->rectangle(0.5 * s, graphY - graphH - 0.5 - 0.5 * s, (CBAR_WIDTH + 1) * s, (double)graphH + 1. + 1. * s); + cr->rectangle(0.5, graphY - graphH - 0.5 - 0.5, CBAR_WIDTH + 1, (double)graphH + 1.); cr->stroke(); } // draw the bottom colored bar if (bottomBar) { // first the background - BackBuffer *bb = this; - bottomBar->setDrawRectangle(graphX - 0.5, graphY + (RADIUS + CBAR_MARGIN + 1.) * s, graphW + 1., CBAR_WIDTH * s); - bottomBar->expose(*this, bb); + bottomBar->setColoredBarSize(graphX - 0.5, graphY + RADIUS + CBAR_MARGIN + 1., graphW + 1., CBAR_WIDTH); + bottomBar->updateColoredBar(cr); // now the border c = style->get_border_color(state); cr->set_source_rgb (c.get_red(), c.get_green(), c.get_blue()); - cr->rectangle(graphX - 0.5 - 0.5 * s, graphY + (RADIUS + CBAR_MARGIN + 0.5) * s, graphW + 1. + 0.5 * s, (CBAR_WIDTH + 1.) * s); + cr->rectangle(graphX - 0.5 - 0.5, graphY + RADIUS + CBAR_MARGIN + 0.5, graphW + 1. + 1., CBAR_WIDTH + 1.); cr->stroke(); } // draw f(x)=0.5 line c = style->get_border_color(state); cr->set_source_rgb (c.get_red(), c.get_green(), c.get_blue()); - std::valarray ds (1); - ds[0] = 4 * s; + const std::valarray ds = {4.}; cr->set_dash (ds, 0); - cr->move_to (graphX - 1. * s, graphY - graphH / 2.); - cr->rel_line_to (graphW + 2 * s, 0.); + cr->move_to (graphX - 1., graphY - graphH / 2.); + cr->rel_line_to (graphW + 2, 0.); cr->stroke (); cr->unset_dash (); cr->set_antialias (Cairo::ANTIALIAS_SUBPIXEL); - cr->set_line_width (1.0 * s); + cr->set_line_width (1.0); cr->set_line_cap(Cairo::LINE_CAP_BUTT); // draw the pipette values if (pipetteR > -1.f || pipetteG > -1.f || pipetteB > -1.f) { - cr->set_line_width (0.75 * s); + cr->set_line_width (0.75); cr->set_source_rgb (c.get_red(), c.get_green(), c.get_blue()); int n = 0; @@ -248,34 +235,34 @@ void MyFlatCurve::draw () if (n > 1) { if (pipetteR > -1.f) { cr->set_source_rgba (1., 0., 0., 0.5); // WARNING: assuming that red values are stored in pipetteR, which might not be the case! - cr->move_to (graphX + graphW * static_cast(pipetteR), graphY + 1. * s); - cr->rel_line_to (0, -graphH - 1. * s); + cr->move_to (graphX + graphW * static_cast(pipetteR), graphY + 1.); + cr->rel_line_to (0, -graphH - 1.); cr->stroke (); } if (pipetteG > -1.f) { cr->set_source_rgba (0., 1., 0., 0.5); // WARNING: assuming that green values are stored in pipetteG, which might not be the case! - cr->move_to (graphX + graphW * static_cast(pipetteG), graphY + 1. * s); - cr->rel_line_to (0, -graphH - 1. * s); + cr->move_to (graphX + graphW * static_cast(pipetteG), graphY + 1.); + cr->rel_line_to (0, -graphH - 1.); cr->stroke (); } if (pipetteB > -1.f) { cr->set_source_rgba (0., 0., 1., 0.5); // WARNING: assuming that blue values are stored in pipetteB, which might not be the case! - cr->move_to (graphX + graphW * static_cast(pipetteB), graphY + 1. * s); - cr->rel_line_to (0, -graphH - 1. * s); + cr->move_to (graphX + graphW * static_cast(pipetteB), graphY + 1.); + cr->rel_line_to (0, -graphH - 1.); cr->stroke (); } } if (pipetteVal > -1.f) { - cr->set_line_width (2. * s); + cr->set_line_width (2.); c = style->get_color (state); cr->set_source_rgb (c.get_red(), c.get_green(), c.get_blue()); - cr->move_to (graphX + graphW * static_cast(pipetteVal), graphY + 1. * s); - cr->rel_line_to (0, -graphH - 1. * s); + cr->move_to (graphX + graphW * static_cast(pipetteVal), graphY + 1.); + cr->rel_line_to (0, -graphH - 1.); cr->stroke (); - cr->set_line_width (1. * s); + cr->set_line_width (1.); } } @@ -286,7 +273,7 @@ void MyFlatCurve::draw () for (int i = 0; i < (int)curve.x.size(); ++i) { if (curve.x.at(i) != -1.) { - double coloredLineWidth = rtengine::min( rtengine::max(75. * s, graphW) / (75. * s), 8. * s); + double coloredLineWidth = rtengine::min( rtengine::max(75., graphW) / 75., 8.); cr->set_line_width (coloredLineWidth); colorProvider->colorForValue(curve.x.at(i), curve.y.at(i), CCET_VERTICAL_BAR, colorCallerId, this); @@ -296,8 +283,8 @@ void MyFlatCurve::draw () cr->set_line_width (2 * coloredLineWidth); } - cr->move_to (graphX + graphW * curve.x.at(i), graphY + 0.5 + 0.5 * s ); - cr->rel_line_to (0., -graphH - 1. - s); + cr->move_to (graphX + graphW * curve.x.at(i), graphY + 0.5 + 0.5); + cr->rel_line_to (0., -graphH - 1. - 1.); cr->stroke (); cr->set_line_width (coloredLineWidth); @@ -323,39 +310,39 @@ void MyFlatCurve::draw () colorProvider->colorForValue(curve.x.at(i), curve.y.at(i), CCET_HORIZONTAL_BAR, colorCallerId, this); cr->set_source_rgb (ccRed, ccGreen, ccBlue); - cr->move_to (graphX - 0.5 - 0.5 * s , graphY - graphH * curve.y.at(point)); - cr->rel_line_to (graphW + 1. + s, 0.); + cr->move_to (graphX - 0.5 - 0.5 , graphY - graphH * curve.y.at(point)); + cr->rel_line_to (graphW + 1. + 1., 0.); cr->stroke (); } } } // endif - cr->set_line_width (1.0 * s); + cr->set_line_width (1.0); } else { cr->set_source_rgb (0.5, 0.0, 0.0); if (edited_point > -1 || ((lit_point > -1) && ((area & (FCT_Area_H | FCT_Area_V | FCT_Area_Point)) || editedHandle == FCT_EditedHandle_CPointUD)) ) { // draw the lit_point's vertical line if (edited_point > -1 || (editedHandle & (FCT_EditedHandle_CPointUD | FCT_EditedHandle_CPoint | FCT_EditedHandle_CPointY))) { - cr->set_line_width (2.0 * s); + cr->set_line_width (2.0); } int point = edited_point > -1 ? edited_point : lit_point; - cr->move_to (graphX + graphW * curve.x.at(point), graphY + 0.5 + 0.5 * s ); - cr->rel_line_to (0., -graphH - 1. - s); + cr->move_to (graphX + graphW * curve.x.at(point), graphY + 0.5 + 0.5); + cr->rel_line_to (0., -graphH - 1. - 1.); cr->stroke (); - cr->set_line_width (1.0 * s); + cr->set_line_width (1.0); // draw the lit_point's horizontal line if (editedHandle & (FCT_EditedHandle_CPointUD | FCT_EditedHandle_CPoint | FCT_EditedHandle_CPointY)) { - cr->set_line_width (2.0 * s); + cr->set_line_width (2.0); } - cr->move_to (graphX - 0.5 - 0.5 * s , graphY - graphH * curve.y.at(point)); - cr->rel_line_to (graphW + 1. + s, 0.); + cr->move_to (graphX - 0.5 - 0.5 , graphY - graphH * curve.y.at(point)); + cr->rel_line_to (graphW + 1. + 1., 0.); cr->stroke (); - cr->set_line_width (1.0 * s); + cr->set_line_width (1.0); } } @@ -364,10 +351,10 @@ void MyFlatCurve::draw () // draw the graph's borders: c = style->get_border_color(state); cr->set_source_rgb (c.get_red(), c.get_green(), c.get_blue()); - cr->rectangle(graphX - 0.5 - 0.5 * s, graphY + 0.5 + 0.5 * s, graphW + 1. + 1. * s, -(graphH + 1. + 1. * s)); + cr->rectangle(graphX - 0.5 - 0.5, graphY + 0.5 + 0.5, graphW + 1. + 1., -(graphH + 1. + 1.)); cr->stroke (); - double lineMinLength = 1. / graphW * (double)(SQUARE) * 0.9 * s; + double lineMinLength = 1. / graphW * (double)(SQUARE) * 0.9; if (tanHandlesDisplayed && lit_point != -1 && getHandles(lit_point) && curve.x.at(lit_point) != -1.) { double x = graphX + graphW * curve.x.at(lit_point); @@ -398,9 +385,9 @@ void MyFlatCurve::draw () cr->move_to (x, y); if (crossingTheFrame) { - cr->line_to (graphX - 0.5 - 0.5 * s, y); + cr->line_to (graphX - 0.5 - 0.5, y); cr->stroke (); - cr->move_to (graphX + graphW + 0.5 + 0.5 * s, y); + cr->move_to (graphX + graphW + 0.5 + 0.5, y); } cr->line_to (x2, y); @@ -408,7 +395,7 @@ void MyFlatCurve::draw () } // draw tangential knot - square = (area == FCT_Area_LeftTan ? SQUARE * 2. : SQUARE) * s; + square = (area == FCT_Area_LeftTan ? SQUARE * 2. : SQUARE); cr->rectangle(x2 - square, y - square, 2.*square, 2.*square); cr->fill(); @@ -434,9 +421,9 @@ void MyFlatCurve::draw () cr->move_to (x, y); if (crossingTheFrame) { - cr->line_to (graphX + graphW + 0.5 + 0.5 * s, y); + cr->line_to (graphX + graphW + 0.5 + 0.5, y); cr->stroke (); - cr->move_to (graphX - 0.5 - 0.5 * s, y); + cr->move_to (graphX - 0.5 - 0.5, y); } cr->line_to (x2, y); @@ -444,7 +431,7 @@ void MyFlatCurve::draw () } // draw tangential knot - square = (area == FCT_Area_RightTan ? SQUARE * 2. : SQUARE) * s; + square = (area == FCT_Area_RightTan ? SQUARE * 2. : SQUARE); cr->rectangle(x2 - square, y - square, 2.*square, 2.*square); cr->fill(); } @@ -483,15 +470,15 @@ void MyFlatCurve::draw () double x = graphX + graphW * curve.x.at(i); // project (curve.x.at(i), 0, 1, graphW); double y = graphY - graphH * curve.y.at(i); // project (curve.y.at(i), 0, 1, graphH); - cr->arc (x, y, RADIUS * s + 0.5, 0, 2 * rtengine::RT_PI); + cr->arc (x, y, RADIUS + 0.5, 0, 2 * rtengine::RT_PI); cr->fill (); if (i == edited_point) { cr->set_source_rgb (1.0, 0.0, 0.0); - cr->set_line_width(2. * s); - cr->arc (x, y, (RADIUS + 2.) * s, 0, 2 * rtengine::RT_PI); + cr->set_line_width(2.); + cr->arc (x, y, RADIUS + 2., 0, 2 * rtengine::RT_PI); cr->stroke(); - cr->set_line_width(1. * s); + cr->set_line_width(1.); } } @@ -524,30 +511,14 @@ void MyFlatCurve::draw () graphW * minDistanceY); cr->fill(); } - - setDirty(false); - queue_draw(); } bool MyFlatCurve::on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr) { - Gtk::Allocation allocation = get_allocation(); - allocation.set_x(0); - allocation.set_y(0); + // Draw drawing area + // Note: As drawing area surface is updated inside on_draw function, hidpi is automatically supported + updateDrawingArea(cr); - int s = RTScalable::getScale(); - - // setDrawRectangle will allocate the backbuffer Surface - if (setDrawRectangle(Cairo::FORMAT_ARGB32, allocation)) { - setDirty(true); - - if (prevGraphW > (GRAPH_SIZE * s) || graphW > (GRAPH_SIZE * s)) { - curveIsDirty = true; - } - } - - draw (); - copySurface(cr); return false; } @@ -619,10 +590,8 @@ bool MyFlatCurve::handleEvents (GdkEvent* event) return false; } - double s = RTScalable::getScale(); - - minDistanceX = double(MIN_DISTANCE) / graphW * s; - minDistanceY = double(MIN_DISTANCE) / graphH * s; + minDistanceX = double(MIN_DISTANCE) / graphW; + minDistanceY = double(MIN_DISTANCE) / graphH; switch (event->type) { @@ -680,8 +649,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event) curve.rightTangent.at(closest_point) = 0.35; curveIsDirty = true; - setDirty(true); - draw (); + queue_draw(); notifyListener (); lit_point = closest_point; @@ -738,8 +706,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event) new_type = CSArrow; tanHandlesDisplayed = false; edited_point = lit_point; - setDirty(true); - draw (); + queue_draw(); std::vector newBoundaries(4); int size = curve.x.size(); @@ -787,8 +754,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event) // the cursor is close to an existing point if (lit_point != edited_point) { edited_point = lit_point; - setDirty(true); - draw (); + queue_draw(); std::vector newBoundaries(4); int size = curve.x.size(); @@ -910,8 +876,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event) break; } - setDirty(true); - draw (); + queue_draw(); retval = true; //notifyListener (); } @@ -1042,8 +1007,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event) } if ((lit_point != previous_lit_point) || (prevArea != area)) { - setDirty(true); - draw (); + queue_draw(); } if (coordinateAdjuster->is_visible() && edited_point == -1) { @@ -1121,8 +1085,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event) if (curve.leftTangent.at(lit_point) != prevValue) { curveIsDirty = true; - setDirty(true); - draw (); + queue_draw(); notifyListener (); if (coordinateAdjuster->is_visible()) { @@ -1153,8 +1116,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event) if (curve.rightTangent.at(lit_point) != prevValue) { curveIsDirty = true; - setDirty(true); - draw (); + queue_draw(); notifyListener (); editedPos.at(3) = curve.rightTangent.at(lit_point); coordinateAdjuster->setPos(editedPos); @@ -1198,8 +1160,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event) lit_point = -1; tanHandlesDisplayed = false; pipetteR = pipetteG = pipetteB = -1.f; - setDirty(true); - draw (); + queue_draw(); } retval = true; @@ -1290,11 +1251,10 @@ void MyFlatCurve::pipetteMouseOver (CurveEditor *ce, EditDataProvider *provider, if (edited_point == -1) { if (editedHandle == FCT_EditedHandle_None && lit_point != previous_lit_point) { - setDirty(true); - draw (); + queue_draw(); } } else { - draw(); + queue_draw(); } if (edited_point == -1) { @@ -1321,13 +1281,11 @@ bool MyFlatCurve::pipetteButton1Pressed(EditDataProvider *provider, int modifier // hide the tangent handles tanHandlesDisplayed = false; - int s = RTScalable::getScale(); - // Action on BUTTON_PRESS and no edited point switch (area) { case (FCT_Area_Insertion): { - rtengine::FlatCurve rtCurve(getPoints(), true, GRAPH_SIZE * s); + rtengine::FlatCurve rtCurve(getPoints(), true, GRAPH_SIZE); std::vector::iterator itx, ity, itlt, itrt; int num = (int)curve.x.size(); @@ -1364,8 +1322,7 @@ bool MyFlatCurve::pipetteButton1Pressed(EditDataProvider *provider, int modifier curve.rightTangent.at(closest_point) = 0.35; curveIsDirty = true; - setDirty(true); - draw (); + queue_draw(); notifyListener (); lit_point = closest_point; @@ -1407,8 +1364,7 @@ void MyFlatCurve::pipetteButton1Released(EditDataProvider *provider) getCursorPosition(Gdk::EventType(Gdk::BUTTON_PRESS), false, px, graphY, Gdk::ModifierType(0)); getMouseOverArea(); - setDirty(true); - draw (); + queue_draw(); //notifyListener (); } @@ -1633,8 +1589,7 @@ void MyFlatCurve::movePoint(bool moveX, bool moveY, bool pipetteDrag) if (curve.x.at(lit_point) != prevPosX || curve.y.at(lit_point) != prevPosY) { // we recompute the curve only if we have to curveIsDirty = true; - setDirty(true); - draw (); + queue_draw(); notifyListener (); } } @@ -1842,7 +1797,6 @@ void MyFlatCurve::setPoints (const std::vector& p) } curveIsDirty = true; - setDirty(true); queue_draw (); } @@ -1869,8 +1823,7 @@ void MyFlatCurve::setPos(double pos, int chanIdx) } curveIsDirty = true; - setDirty(true); - draw(); + queue_draw(); notifyListener (); } @@ -1880,8 +1833,7 @@ void MyFlatCurve::stopNumericalAdjustment() edited_point = lit_point = -1; area = FCT_Area_None; coordinateAdjuster->stopNumericalAdjustment(); - setDirty(true); - draw(); + queue_draw(); } } @@ -1904,8 +1856,7 @@ void MyFlatCurve::updateLocallabBackground(double ref) return false; } - mcih->clearPixmap(); - mcih->myCurve->queue_draw(); + mcih->clearPixmap(); --mcih->pending; @@ -1918,7 +1869,7 @@ void MyFlatCurve::setType (FlatCurveType t) { curve.type = t; - setDirty(true); + queue_draw(); } void MyFlatCurve::reset(const std::vector &resetCurve, double identityValue) @@ -1946,8 +1897,7 @@ void MyFlatCurve::reset(const std::vector &resetCurve, double identityVa break; } - setDirty(true); - draw(); + queue_draw(); } void MyFlatCurve::defaultCurve (double iVal) diff --git a/rtgui/myflatcurve.h b/rtgui/myflatcurve.h index f51586567..18d284e7e 100644 --- a/rtgui/myflatcurve.h +++ b/rtgui/myflatcurve.h @@ -99,7 +99,7 @@ protected: enum MouseOverAreas area; double locallabRef; // Locallab reference value to display in the background - void draw (); + void updateDrawingArea (const ::Cairo::RefPtr< Cairo::Context> &cr); void movePoint(bool moveX, bool moveY, bool pipetteDrag = false); void defaultCurve (double iVal = 0.5); void interpolate (); diff --git a/rtgui/navigator.cc b/rtgui/navigator.cc index 42f605fa2..a02e0aff8 100644 --- a/rtgui/navigator.cc +++ b/rtgui/navigator.cc @@ -21,18 +21,26 @@ #include "previewwindow.h" #include "toolpanel.h" #include "../rtengine/color.h" +#include "../rtengine/improcfun.h" #include "../rtengine/rt_math.h" #include "options.h" using namespace rtengine; +namespace +{ + +const rtengine::procparams::ColorManagementParams DEFAULT_CMP; + +} + Navigator::Navigator() : pointer_moved_delayed_call(50, 100), currentRGBUnit(options.navRGBUnit), currentHSVUnit(options.navHSVUnit) { pointer_moved_delayed_call.setFunction( - [this](bool validPos, Glib::ustring profile, Glib::ustring profileW, int x, int y, int r, int g, int b, bool isRaw) + [this](bool validPos, const rtengine::procparams::ColorManagementParams *cmp, int x, int y, int r, int g, int b, bool isRaw) { if (!validPos) { setInvalid (x, y); @@ -61,7 +69,16 @@ Navigator::Navigator() : S->set_text (s2); V->set_text (s3); - Color::rgb2lab01(profile, profileW, r / 255.f, g / 255.f, b / 255.f, LAB_l, LAB_a, LAB_b, options.rtSettings.HistogramWorking); // TODO: Really sure this function works? + ImProcFunctions::rgb2lab( + static_cast(r), + static_cast(g), + static_cast(b), + LAB_l, LAB_a, LAB_b, + cmp != nullptr ? *cmp : DEFAULT_CMP, + true); + LAB_l /= 327.68f; + LAB_a /= 327.68f; + LAB_b /= 327.68f; getLABText (LAB_l, LAB_a, LAB_b, s1, s2, s3); LAB_L->set_text (s1); LAB_A->set_text (s2); @@ -140,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 @@ -328,9 +345,9 @@ void Navigator::getLABText (float l, float a, float b, Glib::ustring &sL, Glib:: } // if !validPos then x/y contain the full image size -void Navigator::pointerMoved (bool validPos, const Glib::ustring &profile, const Glib::ustring &profileW, int x, int y, int r, int g, int b, bool isRaw) +void Navigator::pointerMoved (bool validPos, const rtengine::procparams::ColorManagementParams &cmp, int x, int y, int r, int g, int b, bool isRaw) { - pointer_moved_delayed_call(validPos, profile, profileW, x, y, r, g, b, isRaw); + pointer_moved_delayed_call(validPos, &cmp, x, y, r, g, b, isRaw); } void Navigator::cycleUnitsRGB (GdkEventButton *event) { diff --git a/rtgui/navigator.h b/rtgui/navigator.h index 4c2a3fd32..c16bf7ac7 100644 --- a/rtgui/navigator.h +++ b/rtgui/navigator.h @@ -34,7 +34,7 @@ class Navigator final : typedef const double (*TMatrix)[3]; private: - DelayedCall pointer_moved_delayed_call; + DelayedCall pointer_moved_delayed_call; Options::NavigatorUnit currentRGBUnit; Options::NavigatorUnit currentHSVUnit; @@ -61,7 +61,7 @@ public: // pointermotionlistener interface // void pointerMoved (bool validPos, int x, int y, int r, int g, int b); - void pointerMoved (bool validPos, const Glib::ustring &profile, const Glib::ustring &profileW, int x, int y, int r, int g, int b, bool raw = false) override; + void pointerMoved(bool validPos, const rtengine::procparams::ColorManagementParams &cmp, int x, int y, int r, int g, int b, bool raw = false) override; void setInvalid (int fullWidth = -1, int fullHeight = -1); void getRGBText (int r, int g, int b, Glib::ustring &sR, Glib::ustring &sG, Glib::ustring &sB, bool isRaw = false) override; diff --git a/rtgui/options.cc b/rtgui/options.cc index f8143996a..81271acde 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -42,7 +42,7 @@ -#ifdef WIN32 +#ifdef _WIN32 #include // for GCC32 #ifndef _WIN32_IE @@ -358,7 +358,6 @@ void Options::setDefaults() fontSize = 10; CPFontFamily = "default"; CPFontSize = 8; - pseudoHiDPISupport = false; lastScale = 5; lastShowAllExif = false; panAccelFactor = 5; @@ -368,7 +367,8 @@ void Options::setDefaults() fbShowDateTime = true; fbShowBasicExif = true; fbShowExpComp = false; -#ifdef WIN32 + maxZoomLimit = MaxZoom::PERCENTS_1600; +#ifdef _WIN32 // use windows setting for visibility of hidden files/folders SHELLFLAGSTATE sft = { 0 }; SHGetSettings(&sft, SSF_SHOWALLOBJECTS); @@ -580,8 +580,8 @@ void Options::setDefaults() rtSettings.flatFieldsPath = ""; rtSettings.cameraProfilesPath = ""; rtSettings.lensProfilesPath = ""; - -#ifdef WIN32 + +#ifdef _WIN32 const gchar* sysRoot = g_getenv("SystemRoot"); // Returns e.g. "c:\Windows" if (sysRoot != NULL) { @@ -635,12 +635,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; @@ -700,6 +701,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) @@ -854,7 +858,7 @@ void Options::readFromFile(Glib::ustring fname) if (keyFile.has_key("External Editor", "CustomEditor")) { customEditorProg = keyFile.get_string("External Editor", "CustomEditor"); } - + if (keyFile.has_key("External Editor", "OutputDir")) { int v = keyFile.get_integer("External Editor", "OutputDir"); if (v < int(EDITOR_OUT_DIR_TEMP) || v > int(EDITOR_OUT_DIR_CUSTOM)) { @@ -875,7 +879,7 @@ void Options::readFromFile(Glib::ustring fname) if (keyFile.has_key("External Editor", "BypassOutputProfile")) { editor_bypass_output_profile = keyFile.get_boolean("External Editor", "BypassOutputProfile"); } - + } if (keyFile.has_group("External Editor")) { @@ -933,7 +937,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 @@ -1228,7 +1232,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"); } @@ -1569,10 +1573,6 @@ void Options::readFromFile(Glib::ustring fname) CPFontSize = keyFile.get_integer("GUI", "CPFontSize"); } - if (keyFile.has_key("GUI", "PseudoHiDPISupport")) { - pseudoHiDPISupport = keyFile.get_boolean("GUI", "PseudoHiDPISupport"); - } - if (keyFile.has_key("GUI", "LastPreviewScale")) { lastScale = keyFile.get_integer("GUI", "LastPreviewScale"); } @@ -1733,11 +1733,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"); } @@ -1745,6 +1745,9 @@ void Options::readFromFile(Glib::ustring fname) if (keyFile.has_key("GUI", "ZoomOnScroll")) { zoomOnScroll = keyFile.get_boolean("GUI", "ZoomOnScroll"); } + if (keyFile.has_key("GUI", "MaxZoom")) { + maxZoomLimit = static_cast(keyFile.get_integer("GUI", "MaxZoom")); + } } if (keyFile.has_group("Crop Settings")) { @@ -1839,6 +1842,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"); @@ -1981,8 +1994,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"); @@ -2266,6 +2279,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(); @@ -2384,7 +2418,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); @@ -2528,7 +2562,6 @@ void Options::saveToFile(Glib::ustring fname) keyFile.set_integer("GUI", "FontSize", fontSize); keyFile.set_string("GUI", "CPFontFamily", CPFontFamily); keyFile.set_integer("GUI", "CPFontSize", CPFontSize); - keyFile.set_boolean("GUI", "PseudoHiDPISupport", pseudoHiDPISupport); keyFile.set_integer("GUI", "LastPreviewScale", lastScale); keyFile.set_boolean("GUI", "LastShowAllExif", lastShowAllExif); keyFile.set_integer("GUI", "PanAccelFactor", panAccelFactor); @@ -2571,6 +2604,7 @@ void Options::saveToFile(Glib::ustring fname) keyFile.set_integer("GUI", "Complexity", complexity); keyFile.set_boolean("GUI", "InspectorWindow", inspectorWindow); keyFile.set_boolean("GUI", "ZoomOnScroll", zoomOnScroll); + keyFile.set_integer("GUI", "MaxZoom", static_cast(maxZoomLimit)); //Glib::ArrayHandle crvopen = crvOpen; //keyFile.set_integer_list ("GUI", "CurvePanelsExpanded", crvopen); @@ -2620,6 +2654,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); @@ -2719,6 +2755,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) { @@ -2756,7 +2811,7 @@ void Options::load(bool lightweight) } } else { -#ifdef WIN32 +#ifdef _WIN32 WCHAR pathW[MAX_PATH] = {0}; if (SHGetSpecialFolderPathW(NULL, pathW, CSIDL_LOCAL_APPDATA, false)) { @@ -2806,7 +2861,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 2e2839723..2b5df3aa6 100644 --- a/rtgui/options.h +++ b/rtgui/options.h @@ -37,10 +37,10 @@ #define STARTUPDIR_CUSTOM 2 #define STARTUPDIR_LAST 3 -#define THEMEREGEXSTR "^(.+)-GTK3-(\\d{1,2})?_(\\d{1,2})?\\.css$" +#define THEMEREGEXSTR "^(.+)\\.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" @@ -254,7 +254,6 @@ public: int fontSize; // RT's main font size (units: pt) Glib::ustring CPFontFamily; // ColorPicker font family int CPFontSize; // ColorPicker font size (units: pt) - bool pseudoHiDPISupport; bool fbOnlyRaw; bool fbShowDateTime; bool fbShowBasicExif; @@ -306,7 +305,7 @@ public: Glib::ustring editor_custom_out_dir; bool editor_float32; bool editor_bypass_output_profile; - + int maxThumbnailHeight; int maxThumbnailWidth; std::size_t maxCacheEntries; @@ -331,7 +330,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; @@ -372,6 +371,22 @@ public: CropGuidesMode cropGuides; bool cropAutoFit; + // Other options + + // Maximum zoom + enum class MaxZoom: int { + PERCENTS_100 = 0, + PERCENTS_200, + PERCENTS_300, + PERCENTS_400, + PERCENTS_500, + PERCENTS_600, + PERCENTS_700, + PERCENTS_800, + PERCENTS_1600, + }; + MaxZoom maxZoomLimit; + // Performance options Glib::ustring clutsDir; int rgbDenoiseThreadLimit; // maximum number of threads for the denoising tool ; 0 = use the maximum available diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index adf462d84..ca705682b 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -267,16 +267,13 @@ 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; + wb.compat_version = v; //colorShift.a = v; //colorShift.b = v; //lumaDenoise.enabled = v; @@ -301,6 +298,7 @@ void ParamsEdited::set(bool v) dirpyrDenoise.chroma = v; dirpyrDenoise.redchro = v; dirpyrDenoise.bluechro = v; + dirpyrDenoise.gain = v; dirpyrDenoise.gamma = v; dirpyrDenoise.passes = v; dirpyrDenoise.dmethod = v; @@ -719,6 +717,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; @@ -984,16 +983,13 @@ 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; + wb.compat_version = wb.compat_version && p.wb.compat_version == other.wb.compat_version; //colorShift.a = colorShift.a && p.colorShift.a == other.colorShift.a; //colorShift.b = colorShift.b && p.colorShift.b == other.colorShift.b; //lumaDenoise.enabled = lumaDenoise.enabled && p.lumaDenoise.enabled == other.lumaDenoise.enabled; @@ -1020,6 +1016,7 @@ void ParamsEdited::initFrom(const std::vector& dirpyrDenoise.chroma = dirpyrDenoise.chroma && p.dirpyrDenoise.chroma == other.dirpyrDenoise.chroma; dirpyrDenoise.redchro = dirpyrDenoise.redchro && p.dirpyrDenoise.redchro == other.dirpyrDenoise.redchro; dirpyrDenoise.bluechro = dirpyrDenoise.bluechro && p.dirpyrDenoise.bluechro == other.dirpyrDenoise.bluechro; + dirpyrDenoise.gain = dirpyrDenoise.gain && p.dirpyrDenoise.autoGain == other.dirpyrDenoise.autoGain; dirpyrDenoise.gamma = dirpyrDenoise.gamma && p.dirpyrDenoise.gamma == other.dirpyrDenoise.gamma; dirpyrDenoise.passes = dirpyrDenoise.passes && p.dirpyrDenoise.passes == other.dirpyrDenoise.passes; dirpyrDenoise.dmethod = dirpyrDenoise.dmethod && p.dirpyrDenoise.dmethod == other.dirpyrDenoise.dmethod; @@ -1268,6 +1265,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).gamm = locallab.spots.at(j).gamm && pSpot.gamm == otherSpot.gamm; locallab.spots.at(j).fatamount = locallab.spots.at(j).fatamount && pSpot.fatamount == otherSpot.fatamount; locallab.spots.at(j).fatdetail = locallab.spots.at(j).fatdetail && pSpot.fatdetail == otherSpot.fatdetail; + locallab.spots.at(j).fatsatur = locallab.spots.at(j).fatsatur && pSpot.fatsatur == otherSpot.fatsatur; locallab.spots.at(j).fatanchor = locallab.spots.at(j).fatanchor && pSpot.fatanchor == otherSpot.fatanchor; locallab.spots.at(j).fatlevel = locallab.spots.at(j).fatlevel && pSpot.fatlevel == otherSpot.fatlevel; locallab.spots.at(j).recothrese = locallab.spots.at(j).recothrese && pSpot.recothrese == otherSpot.recothrese; @@ -1485,6 +1483,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).equilret = locallab.spots.at(j).equilret && pSpot.equilret == otherSpot.equilret; locallab.spots.at(j).loglin = locallab.spots.at(j).loglin && pSpot.loglin == otherSpot.loglin; locallab.spots.at(j).dehazeSaturation = locallab.spots.at(j).dehazeSaturation && pSpot.dehazeSaturation == otherSpot.dehazeSaturation; + locallab.spots.at(j).dehazeblack = locallab.spots.at(j).dehazeblack && pSpot.dehazeblack == otherSpot.dehazeblack; locallab.spots.at(j).softradiusret = locallab.spots.at(j).softradiusret && pSpot.softradiusret == otherSpot.softradiusret; locallab.spots.at(j).CCmaskreticurve = locallab.spots.at(j).CCmaskreticurve && pSpot.CCmaskreticurve == otherSpot.CCmaskreticurve; locallab.spots.at(j).LLmaskreticurve = locallab.spots.at(j).LLmaskreticurve && pSpot.LLmaskreticurve == otherSpot.LLmaskreticurve; @@ -2141,6 +2140,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; @@ -2868,24 +2868,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) { @@ -2896,12 +2880,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) { @@ -2916,6 +2900,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.wb.temperature = dontforceSet && options.baBehav[ADDSET_WB_TEMPERATURE] ? toEdit.wb.temperature + mods.wb.temperature : mods.wb.temperature; } + if (wb.compat_version) { + toEdit.wb.compat_version = mods.wb.compat_version; + } + //if (colorShift.a) toEdit.colorShift.a = dontforceSet && options.baBehav[ADDSET_CS_BLUEYELLOW] ? toEdit.colorShift.a + mods.colorShift.a : mods.colorShift.a; //if (colorShift.b) toEdit.colorShift.b = dontforceSet && options.baBehav[ADDSET_CS_GREENMAGENTA] ? toEdit.colorShift.b + mods.colorShift.b : mods.colorShift.b; //if (lumaDenoise.enabled) toEdit.lumaDenoise.enabled = mods.lumaDenoise.enabled; @@ -3167,6 +3155,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.dirpyrDenoise.bluechro = dontforceSet && options.baBehav[ADDSET_DIRPYRDN_CHROMABLUE] ? toEdit.dirpyrDenoise.bluechro + mods.dirpyrDenoise.bluechro : mods.dirpyrDenoise.bluechro; } + if (dirpyrDenoise.gain) { + toEdit.dirpyrDenoise.autoGain = mods.dirpyrDenoise.autoGain; + } + if (dirpyrDenoise.gamma) { toEdit.dirpyrDenoise.gamma = dontforceSet && options.baBehav[ADDSET_DIRPYRDN_GAMMA] ? toEdit.dirpyrDenoise.gamma + mods.dirpyrDenoise.gamma : mods.dirpyrDenoise.gamma; } @@ -4118,6 +4110,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).fatdetail = mods.locallab.spots.at(i).fatdetail; } + if (locallab.spots.at(i).fatsatur) { + toEdit.locallab.spots.at(i).fatsatur = mods.locallab.spots.at(i).fatsatur; + } + if (locallab.spots.at(i).fatanchor) { toEdit.locallab.spots.at(i).fatanchor = mods.locallab.spots.at(i).fatanchor; } @@ -4955,6 +4951,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).dehazeSaturation = mods.locallab.spots.at(i).dehazeSaturation; } + if (locallab.spots.at(i).dehazeblack) { + toEdit.locallab.spots.at(i).dehazeblack = mods.locallab.spots.at(i).dehazeblack; + } + if (locallab.spots.at(i).softradiusret) { toEdit.locallab.spots.at(i).softradiusret = mods.locallab.spots.at(i).softradiusret; } @@ -7430,6 +7430,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; } @@ -7467,15 +7471,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; } } } @@ -7671,6 +7675,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : fatdetail(v), fatanchor(v), fatlevel(v), + fatsatur(v), recothrese(v), lowthrese(v), higthrese(v), @@ -7882,6 +7887,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : equilret(v), loglin(v), dehazeSaturation(v), + dehazeblack(v), softradiusret(v), CCmaskreticurve(v), LLmaskreticurve(v), @@ -8361,6 +8367,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) gamm = v; fatamount = v; fatdetail = v; + fatsatur = v; fatanchor = v; fatlevel = v; recothrese = v; @@ -8577,6 +8584,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) equilret = v; loglin = v; dehazeSaturation = v; + dehazeblack = v; softradiusret = v; CCmaskreticurve = v; LLmaskreticurve = v; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 3c8a70b74..260779a7f 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -249,16 +249,13 @@ 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; + bool compat_version; }; @@ -330,6 +327,7 @@ struct DirPyrDenoiseParamsEdited { bool chroma; bool redchro; bool bluechro; + bool gain; bool gamma; bool lcurve; bool cccurve; @@ -569,6 +567,7 @@ public: bool fatdetail; bool fatanchor; bool fatlevel; + bool fatsatur; bool recothrese; bool lowthrese; bool higthrese; @@ -780,6 +779,7 @@ public: bool equilret; bool loglin; bool dehazeSaturation; + bool dehazeblack; bool softradiusret; bool CCmaskreticurve; bool LLmaskreticurve; @@ -1532,6 +1532,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/perspective.cc b/rtgui/perspective.cc index 648db44be..e46598912 100644 --- a/rtgui/perspective.cc +++ b/rtgui/perspective.cc @@ -113,29 +113,29 @@ PerspCorrection::PerspCorrection () : FoldableToolPanel(this, TOOL_NAME, M("TP_P panel_listener = nullptr; metadata = nullptr; - Gtk::Image* ipers_draw(new RTImage ("draw.png")); - Gtk::Image* ipers_trash = Gtk::manage (new RTImage ("trash-empty.png")); - Gtk::Image* ipers_apply = Gtk::manage (new RTImage ("tick.png")); + RTImage* const ipers_draw = Gtk::manage (new RTImage ("draw", Gtk::ICON_SIZE_BUTTON)); + RTImage* const ipers_trash = Gtk::manage (new RTImage ("trash-empty", Gtk::ICON_SIZE_BUTTON)); + RTImage* const ipers_apply = Gtk::manage (new RTImage ("tick", Gtk::ICON_SIZE_BUTTON)); - Gtk::Image* ipersHL = Gtk::manage (new RTImage ("perspective-horizontal-left-small.png")); - Gtk::Image* ipersHR = Gtk::manage (new RTImage ("perspective-horizontal-right-small.png")); - Gtk::Image* ipersVL = Gtk::manage (new RTImage ("perspective-vertical-bottom-small.png")); - Gtk::Image* ipersVR = Gtk::manage (new RTImage ("perspective-vertical-top-small.png")); + RTImage* const ipersHL = Gtk::manage (new RTImage ("perspective-horizontal-left-small")); + RTImage* const ipersHR = Gtk::manage (new RTImage ("perspective-horizontal-right-small")); + RTImage* const ipersVL = Gtk::manage (new RTImage ("perspective-vertical-bottom-small")); + RTImage* const ipersVR = Gtk::manage (new RTImage ("perspective-vertical-top-small")); - Gtk::Image* ipers_auto_pitch = Gtk::manage (new RTImage ("perspective-vertical-bottom.png")); - Gtk::Image* ipers_auto_yaw = Gtk::manage (new RTImage ("perspective-horizontal-left.png")); - Gtk::Image* ipers_auto_pitch_yaw = Gtk::manage (new RTImage ("perspective-horizontal-vertical.png")); + RTImage* const ipers_auto_pitch = Gtk::manage (new RTImage ("perspective-vertical-bottom", Gtk::ICON_SIZE_BUTTON)); + RTImage* const ipers_auto_yaw = Gtk::manage (new RTImage ("perspective-horizontal-left", Gtk::ICON_SIZE_BUTTON)); + RTImage* const ipers_auto_pitch_yaw = Gtk::manage (new RTImage ("perspective-horizontal-vertical", Gtk::ICON_SIZE_BUTTON)); - Gtk::Image* ipers_cam_yaw_left = Gtk::manage (new RTImage ("perspective-horizontal-left-small.png")); - Gtk::Image* ipers_cam_yaw_right = Gtk::manage (new RTImage ("perspective-horizontal-right-small.png")); - Gtk::Image* ipers_cam_pitch_left = Gtk::manage (new RTImage ("perspective-vertical-bottom-small.png")); - Gtk::Image* ipers_cam_pitch_right = Gtk::manage (new RTImage ("perspective-vertical-top-small.png")); - Gtk::Image* ipers_proj_yaw_left = Gtk::manage (new RTImage ("perspective-horizontal-left-small.png")); - Gtk::Image* ipers_proj_yaw_right = Gtk::manage (new RTImage ("perspective-horizontal-right-small.png")); - Gtk::Image* ipers_proj_pitch_left = Gtk::manage (new RTImage ("perspective-vertical-bottom-small.png")); - Gtk::Image* ipers_proj_pitch_right = Gtk::manage (new RTImage ("perspective-vertical-top-small.png")); - Gtk::Image* ipers_rotate_left = Gtk::manage(new RTImage("rotate-right-small.png")); - Gtk::Image* ipers_rotate_right = Gtk::manage(new RTImage("rotate-left-small.png")); + RTImage* const ipers_cam_yaw_left = Gtk::manage (new RTImage ("perspective-horizontal-left-small")); + RTImage* const ipers_cam_yaw_right = Gtk::manage (new RTImage ("perspective-horizontal-right-small")); + RTImage* const ipers_cam_pitch_left = Gtk::manage (new RTImage ("perspective-vertical-bottom-small")); + RTImage* const ipers_cam_pitch_right = Gtk::manage (new RTImage ("perspective-vertical-top-small")); + RTImage* const ipers_proj_yaw_left = Gtk::manage (new RTImage ("perspective-horizontal-left-small")); + RTImage* const ipers_proj_yaw_right = Gtk::manage (new RTImage ("perspective-horizontal-right-small")); + RTImage* const ipers_proj_pitch_left = Gtk::manage (new RTImage ("perspective-vertical-bottom-small")); + RTImage* const ipers_proj_pitch_right = Gtk::manage (new RTImage ("perspective-vertical-top-small")); + RTImage* const ipers_rotate_left = Gtk::manage(new RTImage("rotate-right-small")); + RTImage* const ipers_rotate_right = Gtk::manage(new RTImage("rotate-left-small")); Gtk::Box* method_hbox = Gtk::manage (new Gtk::Box()); Gtk::Label* method_label = Gtk::manage (new Gtk::Label (M("TP_PERSPECTIVE_METHOD") + ": ")); diff --git a/rtgui/placesbrowser.cc b/rtgui/placesbrowser.cc index 3440080f8..1f7a47f15 100644 --- a/rtgui/placesbrowser.cc +++ b/rtgui/placesbrowser.cc @@ -18,7 +18,7 @@ */ #include "placesbrowser.h" -#ifdef WIN32 +#ifdef _WIN32 #include #include #include @@ -32,7 +32,7 @@ PlacesBrowser::PlacesBrowser () { set_orientation(Gtk::ORIENTATION_VERTICAL); - + scrollw = Gtk::manage (new Gtk::ScrolledWindow ()); scrollw->set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC); pack_start (*scrollw); @@ -43,13 +43,13 @@ PlacesBrowser::PlacesBrowser () setExpandAlignProperties(add, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); //add->get_style_context()->set_junction_sides(Gtk::JUNCTION_RIGHT); add->get_style_context()->add_class("Left"); - add->set_image (*Gtk::manage (new RTImage ("add-small.png"))); + add->set_image (*Gtk::manage (new RTImage ("add-small", Gtk::ICON_SIZE_BUTTON))); del = Gtk::manage (new Gtk::Button ()); del->set_tooltip_text(M("MAIN_FRAME_PLACES_DEL")); setExpandAlignProperties(del, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); //del->get_style_context()->set_junction_sides(Gtk::JUNCTION_LEFT); del->get_style_context()->add_class("Right"); - del->set_image (*Gtk::manage (new RTImage ("remove-small.png"))); + del->set_image (*Gtk::manage (new RTImage ("remove-small", Gtk::ICON_SIZE_BUTTON))); Gtk::Grid* buttonBox = Gtk::manage (new Gtk::Grid ()); buttonBox->set_orientation(Gtk::ORIENTATION_HORIZONTAL); buttonBox->attach_next_to(*add, Gtk::POS_LEFT, 1, 1); @@ -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/pointermotionlistener.h b/rtgui/pointermotionlistener.h index 26ca994b0..2f19ae0b9 100644 --- a/rtgui/pointermotionlistener.h +++ b/rtgui/pointermotionlistener.h @@ -18,6 +18,23 @@ */ #pragma once +#include +#include + + +namespace rtengine +{ + +namespace procparams +{ + +struct ColorManagementParams; + +} + +} + + class PointerMotionListener { protected: @@ -26,7 +43,7 @@ protected: public: virtual ~PointerMotionListener() = default; - virtual void pointerMoved (bool validPos, const Glib::ustring &profile, const Glib::ustring &profileW, int x, int y, int r, int g, int b, bool isRaw = false) = 0; + virtual void pointerMoved(bool validPos, const rtengine::procparams::ColorManagementParams &cmp, int x, int y, int r, int g, int b, bool isRaw = false) = 0; virtual void getRGBText (int r, int g, int b, Glib::ustring &sR, Glib::ustring &sG, Glib::ustring &sB, bool isRaw = false) { sR = "--"; sG = "--"; sB = "--"; } virtual void getHSVText (float h, float s, float v, Glib::ustring &sH, Glib::ustring &sS, Glib::ustring &sV) { sH = "--"; sS = "--"; sV = "--"; } virtual void getLABText (float l, float a, float b, Glib::ustring &sL, Glib::ustring &sA, Glib::ustring &sB) { sL = "--"; sA = "--"; sB = "--"; } diff --git a/rtgui/popupcommon.cc b/rtgui/popupcommon.cc index a6d9b6046..dfcdcc449 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) @@ -78,13 +80,13 @@ bool PopUpCommon::addEntry (const Glib::ustring& fileName, const Glib::ustring& return insertEntry(getEntryCount(), fileName, label, radioGroup); } -bool PopUpCommon::insertEntry(int position, const Glib::ustring& fileName, const Glib::ustring& label, Gtk::RadioButtonGroup *radioGroup) +bool PopUpCommon::insertEntry(int position, const Glib::ustring& iconName, const Glib::ustring& label, Gtk::RadioButtonGroup *radioGroup) { RTImage* image = nullptr; - if (!fileName.empty()) { - image = Gtk::manage(new RTImage(fileName)); + if (!iconName.empty()) { + image = Gtk::manage(new RTImage(iconName)); } - bool success = insertEntryImpl(position, fileName, Glib::RefPtr(), image, label, radioGroup); + bool success = insertEntryImpl(position, iconName, Glib::RefPtr(), image, label, radioGroup); if (!success && image) { delete image; } @@ -93,7 +95,7 @@ bool PopUpCommon::insertEntry(int position, const Glib::ustring& fileName, const bool PopUpCommon::insertEntry(int position, const Glib::RefPtr& gIcon, const Glib::ustring& label, Gtk::RadioButtonGroup *radioGroup) { - RTImage* image = Gtk::manage(new RTImage(gIcon, Gtk::ICON_SIZE_BUTTON)); + auto image = Gtk::manage(new RTImage(gIcon, Gtk::ICON_SIZE_BUTTON)); bool success = insertEntryImpl(position, "", gIcon, image, label, radioGroup); if (!success) { delete image; @@ -101,7 +103,7 @@ bool PopUpCommon::insertEntry(int position, const Glib::RefPtr& return success; } -bool PopUpCommon::insertEntryImpl(int position, const Glib::ustring& fileName, const Glib::RefPtr& gIcon, RTImage* image, const Glib::ustring& label, Gtk::RadioButtonGroup* radioGroup) +bool PopUpCommon::insertEntryImpl(int position, const Glib::ustring& iconName, const Glib::RefPtr& gIcon, RTImage* image, const Glib::ustring& label, Gtk::RadioButtonGroup* radioGroup) { if (label.empty() || position < 0 || position > getEntryCount()) return false; @@ -115,12 +117,12 @@ bool PopUpCommon::insertEntryImpl(int position, const Glib::ustring& fileName, c newItem = Gtk::manage(new MyImageMenuItem(label, image)); } imageIcons.insert(imageIcons.begin() + position, gIcon); - imageFilenames.insert(imageFilenames.begin() + position, fileName); + imageIconNames.insert(imageIconNames.begin() + position, iconName); images.insert(images.begin() + position, image); // When there is at least 1 choice, we add the arrow button if (images.size() == 1) { - changeImage(fileName, gIcon); + changeImage(iconName, gIcon); buttonImage->show(); selected = 0; button->get_style_context()->add_class("Left"); @@ -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) { @@ -163,26 +185,35 @@ void PopUpCommon::removeEntry(int position) std::unique_ptr menuItem(menu->get_children()[position]); menu->remove(*menuItem); imageIcons.erase(imageIcons.begin() + position); - imageFilenames.erase(imageFilenames.begin() + position); + imageIconNames.erase(imageIconNames.begin() + position); images.erase(images.begin() + position); } void PopUpCommon::changeImage(int position) { - changeImage(imageFilenames.at(position), imageIcons.at(position)); + changeImage(imageIconNames.at(position), imageIcons.at(position)); } -void PopUpCommon::changeImage(const Glib::ustring& fileName, const Glib::RefPtr& gIcon) +void PopUpCommon::changeImage(const Glib::ustring& iconName, const Glib::RefPtr& gIcon) { - if (!fileName.empty()) { - buttonImage->changeImage(fileName); + if (!iconName.empty()) { + buttonImage->set_from_icon_name(iconName, Gtk::ICON_SIZE_BUTTON); } else { - buttonImage->changeImage(gIcon, static_cast(Gtk::ICON_SIZE_BUTTON)); + buttonImage->set_from_gicon(gIcon, Gtk::ICON_SIZE_BUTTON); } } 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) { @@ -219,7 +250,7 @@ void PopUpCommon::setItemSensitivity (int index, bool isSensitive) { bool PopUpCommon::setSelected (int entryNum) { entryNum = indexToPos(entryNum); - + if (entryNum < 0 || entryNum > ((int)images.size() - 1) || (int)entryNum == selected) { return false; } else { @@ -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..e3e5ff74c 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 @@ -61,9 +62,11 @@ public: explicit PopUpCommon (Gtk::Button* button, const Glib::ustring& label = ""); virtual ~PopUpCommon (); - 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 addEntry (const Glib::ustring& iconName, const Glib::ustring& label, Gtk::RadioButtonGroup* radioGroup = nullptr); + bool insertEntry(int position, const Glib::ustring& iconName, 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,8 +80,9 @@ private: type_signal_changed messageChanged; type_signal_item_selected messageItemSelected; + Glib::ustring emptyImageFilename; std::vector> imageIcons; - std::vector imageFilenames; + std::vector imageIconNames; std::vector images; Glib::ustring buttonHint; RTImage* buttonImage; @@ -88,17 +92,18 @@ private: Gtk::Button* arrowButton; int selected; bool hasMenu; + MyMutex entrySelectionMutex; void changeImage(int position); - void changeImage(const Glib::ustring& fileName, const Glib::RefPtr& gIcon); + void changeImage(const Glib::ustring& iconName, const Glib::RefPtr& gIcon); void entrySelected(Gtk::Widget* menuItem); - bool insertEntryImpl(int position, const Glib::ustring& fileName, const Glib::RefPtr& gIcon, RTImage* image, const Glib::ustring& label, Gtk::RadioButtonGroup* radioGroup); + bool insertEntryImpl(int position, const Glib::ustring& iconName, const Glib::RefPtr& gIcon, RTImage* image, const Glib::ustring& label, Gtk::RadioButtonGroup* radioGroup); void showMenu(GdkEventButton* event); protected: virtual int posToIndex(int p) const { return p; } virtual int indexToPos(int i) const { return i; } - + void entrySelected (int i); }; diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc index 07f6e5fd6..527800cb6 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 @@ -76,9 +82,20 @@ Preferences::Preferences(RTWindow *rtwindow) set_size_request(650, -1); set_default_size(options.preferencesWidth, options.preferencesHeight); - Pango::FontDescription defaultFont = get_style_context()->get_font(); - initialFontFamily = defaultFont.get_family(); - initialFontSize = defaultFont.get_size() / Pango::SCALE; + // Request default font and size from Gtk::Settings + const auto defaultSettings = Gtk::Settings::get_default(); + Glib::ustring defaultFont; + defaultSettings->get_property("gtk-font-name", defaultFont); + const Pango::FontDescription defaultFontDesc = Pango::FontDescription(defaultFont); + initialFontFamily = defaultFontDesc.get_family(); +#if defined(__APPLE__) + // Default MacOS font (i.e. "") is not correctly handled + // in Gtk css. Replacing it by "-apple-system" to avoid this + if (initialFontFamily == ".AppleSystemUIFont") { + initialFontFamily = "-apple-system"; + } +#endif + initialFontSize = defaultFontDesc.get_size() / Pango::SCALE; // Font size is managed in ()"pt" * Pango::SCALE) by Pango (also refer to notes in rtscalable.h) Gtk::Box* mainBox = get_content_area(); //GTK318 @@ -113,7 +130,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); @@ -133,14 +150,11 @@ Preferences::~Preferences() get_size(options.preferencesWidth, options.preferencesHeight); } -int Preferences::getThemeRowNumber (const Glib::ustring& longThemeFName) +int Preferences::getThemeRowNumber (const Glib::ustring& name) { - - if (regex->match(longThemeFName + ".css", matchInfo)) { - for (size_t i = 0 ; i < themeFNames.size(); ++i) { - if (themeFNames.at(i).longFName == longThemeFName) { - return (int)i; - } + for (size_t i = 0 ; i < themeNames.size(); ++i) { + if (themeNames.at(i) == name) { + return (int)i; } } @@ -553,7 +567,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 +575,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 +621,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()); @@ -664,8 +705,9 @@ Gtk::Widget* Preferences::getImageProcessingPanel () dirgrid->attach_next_to(*cameraProfilesDirLabel, *clutsDirLabel, Gtk::POS_BOTTOM, 1, 1); dirgrid->attach_next_to(*cameraProfilesDir, *cameraProfilesDirLabel, Gtk::POS_RIGHT, 1, 1); - //Lens Profiles Dir + //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 +715,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 ); @@ -696,6 +752,29 @@ Gtk::Widget* Preferences::getImageProcessingPanel () cropFrame->add(*cropGrid); vbImageProcessing->pack_start(*cropFrame, Gtk::PACK_SHRINK, 4); + // Other: max zoom + { + Gtk::Frame *frame = Gtk::manage(new Gtk::Frame(M("GENERAL_OTHER"))); + frame->set_label_align (0.025, 0.5); + Gtk::Grid *grid = Gtk::manage(new Gtk::Grid()); + + Gtk::Label *label = Gtk::manage(new Gtk::Label(M("PREFERENCES_MAX_ZOOM_TITLE") + ": ", Gtk::ALIGN_START)); + label->set_line_wrap(true); + grid->attach(*label, 0, 0); + + maxZoomCombo = Gtk::manage(new Gtk::ComboBoxText()); + + // Labels order matches to Options::MaxZoom enum + for (int i = 1; i <= 8; ++i) { + maxZoomCombo->append(Glib::ustring::compose("%100%%", i)); + } + maxZoomCombo->append("1600%"); + + grid->attach(*maxZoomCombo, 1, 0, 1, 1); + frame->add(*grid); + vbImageProcessing->pack_start(*frame, Gtk::PACK_SHRINK, 4); + } + swImageProcessing->add(*vbImageProcessing); return swImageProcessing; @@ -825,7 +904,7 @@ Gtk::Widget* Preferences::getColorManPanel () vbColorMan->pack_start (*iccdgrid, Gtk::PACK_SHRINK); - + //------------------------- MONITOR ---------------------- Gtk::Frame* fmonitor = Gtk::manage(new Gtk::Frame(M("PREFERENCES_MONITOR"))); @@ -944,7 +1023,7 @@ Gtk::Widget* Preferences::getColorManPanel () fprinter->add(*gprinter); vbColorMan->pack_start (*fprinter, Gtk::PACK_SHRINK); - + //-------------CIECAM Gtk::Frame* fcie = Gtk::manage(new Gtk::Frame(M("PREFERENCES_CIE"))); Gtk::Grid* gcie = Gtk::manage(new Gtk::Grid()); @@ -959,6 +1038,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 +1191,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); } } @@ -1126,8 +1227,8 @@ Gtk::Widget* Preferences::getGeneralPanel() themeCBT = Gtk::manage(new Gtk::ComboBoxText()); themeCBT->set_active(0); parseThemeDir(Glib::build_filename(argv0, "themes")); - for (size_t i = 0; i < themeFNames.size(); i++) { - themeCBT->append(themeFNames.at(i).shortFName); + for (size_t i = 0; i < themeNames.size(); i++) { + themeCBT->append(themeNames.at(i)); } Gtk::Label* mainFontLbl = Gtk::manage(new Gtk::Label(M("PREFERENCES_APPEARANCE_MAINFONT"))); @@ -1164,11 +1265,8 @@ Gtk::Widget* Preferences::getGeneralPanel() navGuideColorCB = Gtk::manage(new Gtk::ColorButton()); navGuideColorCB->set_use_alpha(true); - pseudoHiDPI = Gtk::manage(new Gtk::CheckButton(M("PREFERENCES_APPEARANCE_PSEUDOHIDPI") + Glib::ustring (" (") + M ("PREFERENCES_APPLNEXTSTARTUP") + ")")); - 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); @@ -1182,7 +1280,6 @@ Gtk::Widget* Preferences::getGeneralPanel() appearanceGrid->attach(*colorPickerFontFB, 1, 2, 1, 1); appearanceGrid->attach(*navGuideColorLbl, 3, 2, 1, 1); appearanceGrid->attach(*navGuideColorCB, 4, 2, 1, 1); - appearanceGrid->attach(*pseudoHiDPI, 0, 3, 5, 1); appearanceFrame->add(*appearanceGrid); vbGeneral->attach_next_to(*appearanceFrame, *flang, Gtk::POS_BOTTOM, 2, 1); @@ -1279,7 +1376,7 @@ Gtk::Widget* Preferences::getGeneralPanel() hb->pack_start(*editor_dir_custom_path, Gtk::PACK_EXPAND_WIDGET, 2); vb->pack_start(*hb); f->add(*vb); - + hb = Gtk::manage(new Gtk::Box()); hb->pack_start(*externalEditors); hb->pack_start(*f, Gtk::PACK_EXPAND_WIDGET, 4); @@ -1296,8 +1393,8 @@ Gtk::Widget* Preferences::getGeneralPanel() vb->show(); fdg->add(*vb); } - - + + vbGeneral->attach_next_to (*fdg, *fclip, Gtk::POS_BOTTOM, 2, 1); langAutoDetectConn = ckbLangAutoDetect->signal_toggled().connect(sigc::mem_fun(*this, &Preferences::langAutoDetectToggled)); tconn = themeCBT->signal_changed().connect ( sigc::mem_fun (*this, &Preferences::themeChanged) ); @@ -1321,10 +1418,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 +1432,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)); - //--- @@ -1457,10 +1548,10 @@ Gtk::Widget* Preferences::getFileBrowserPanel() delExt->set_tooltip_text(M("PREFERENCES_PARSEDEXTDELHINT")); moveExtUp->set_tooltip_text(M("PREFERENCES_PARSEDEXTUPHINT")); moveExtDown->set_tooltip_text(M("PREFERENCES_PARSEDEXTDOWNHINT")); - Gtk::Image* addExtImg = Gtk::manage ( new RTImage ("add-small.png") ); - Gtk::Image* delExtImg = Gtk::manage ( new RTImage ("remove-small.png") ); - Gtk::Image* moveExtUpImg = Gtk::manage(new RTImage("arrow-up-small.png")); - Gtk::Image* moveExtDownImg = Gtk::manage(new RTImage("arrow-down-small.png")); + Gtk::Image* addExtImg = Gtk::manage ( new RTImage ("add-small", Gtk::ICON_SIZE_BUTTON) ); + Gtk::Image* delExtImg = Gtk::manage ( new RTImage ("remove-small", Gtk::ICON_SIZE_BUTTON) ); + Gtk::Image* moveExtUpImg = Gtk::manage(new RTImage("arrow-up-small", Gtk::ICON_SIZE_BUTTON)); + Gtk::Image* moveExtDownImg = Gtk::manage(new RTImage("arrow-down-small", Gtk::ICON_SIZE_BUTTON)); addExt->add(*addExtImg); delExt->add(*delExtImg); moveExtUp->set_image(*moveExtUpImg); @@ -1663,7 +1754,7 @@ void Preferences::parseThemeDir(Glib::ustring dirname) return; } - // process directory + // Process directory Glib::Dir* dir = nullptr; try { @@ -1673,40 +1764,17 @@ void Preferences::parseThemeDir(Glib::ustring dirname) } for (Glib::DirIterator i = dir->begin(); i != dir->end(); ++i) { - Glib::ustring fname = Glib::build_filename(dirname, *i); - Glib::ustring sname = *i; + Glib::ustring fname = *i; - // ignore directories and filter out unsupported theme - if (regex->match(sname, matchInfo) && !Glib::file_test(fname, Glib::FILE_TEST_IS_DIR) && sname.size() >= 4) { - bool keepIt = false; - Glib::ustring fname2 = matchInfo.fetch(1); - Glib::ustring minMinor = matchInfo.fetch(2); - Glib::ustring maxMinor = matchInfo.fetch(3); - - if (!minMinor.empty()) { - guint64 minMinorVal = g_ascii_strtoll(minMinor.c_str(), 0, 0); - - if ((guint64)GTK_MINOR_VERSION >= minMinorVal) { - keepIt = true; - } - } - - if (!maxMinor.empty()) { - guint64 maxMinorVal = g_ascii_strtoll(maxMinor.c_str(), 0, 0); - - if ((guint64)GTK_MINOR_VERSION <= maxMinorVal) { - keepIt = true; - } - } - - if (keepIt) { - themeFNames.push_back(ThemeFilename(matchInfo.fetch(1), sname.substr(0, sname.size() - 4))); - } + // Ignore directories and filter to keep css files only + if (regex->match(fname, matchInfo) && !Glib::file_test(fname, Glib::FILE_TEST_IS_DIR) && fname.size() >= 4) { + themeNames.push_back(fname.substr(0, fname.size() - 4)); } } - std::sort(themeFNames.begin(), themeFNames.end(), [](const ThemeFilename & firstDir, const ThemeFilename & secondDir) { - return firstDir.longFName < secondDir.longFName; + // Sort theme by names + std::sort(themeNames.begin(), themeNames.end(), [](const Glib::ustring & first, const Glib::ustring & second) { + return first < second; }); delete dir; @@ -1743,9 +1811,9 @@ 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; + moptions.theme = themeNames.at (themeCBT->get_active_row_number ()); Gdk::RGBA cropCol = cropMaskColorCB->get_rgba(); moptions.cutOverlayBrush[0] = cropCol.get_red(); @@ -1773,11 +1841,14 @@ void Preferences::storePreferences() moptions.CPFontSize = cpfd.get_size() / Pango::SCALE; } - moptions.pseudoHiDPISupport = pseudoHiDPI->get_active(); - 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)); @@ -1851,6 +1922,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 @@ -1867,7 +1939,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(); @@ -1901,8 +1973,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); @@ -1941,7 +2014,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(); @@ -1950,8 +2023,12 @@ void Preferences::storePreferences() moptions.cropGuides = Options::CropGuidesMode(cropGuidesCombo->get_active_row_number()); moptions.cropAutoFit = cropAutoFitCB->get_active(); + moptions.maxZoomLimit = Options::MaxZoom(maxZoomCombo->get_active_row_number()); 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() @@ -2015,6 +2092,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 @@ -2024,7 +2102,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); @@ -2040,19 +2118,17 @@ void Preferences::fillPreferences() navGuideColorCB->set_alpha ( (unsigned short) (moptions.navGuideBrush[3] * 65535.0)); if (options.fontFamily == "default") { - mainFontFB->set_font_name (Glib::ustring::compose ("%1 %2", initialFontFamily, initialFontSize)); + mainFontFB->set_font_name (Glib::ustring::compose ("%1, %2", initialFontFamily, initialFontSize)); } else { - mainFontFB->set_font_name (Glib::ustring::compose ("%1 %2", options.fontFamily, options.fontSize)); + mainFontFB->set_font_name (Glib::ustring::compose ("%1, %2", options.fontFamily, options.fontSize)); } if (options.CPFontFamily == "default") { - colorPickerFontFB->set_font_name (Glib::ustring::compose ("%1 %2", initialFontFamily, initialFontSize)); + colorPickerFontFB->set_font_name (Glib::ustring::compose ("%1, %2", initialFontFamily, initialFontSize)); } else { - colorPickerFontFB->set_font_name (Glib::ustring::compose ("%1 %2", options.CPFontFamily, options.CPFontSize)); + colorPickerFontFB->set_font_name (Glib::ustring::compose ("%1, %2", options.CPFontFamily, options.CPFontSize)); } - pseudoHiDPI->set_active(options.pseudoHiDPISupport); - showDateTime->set_active(moptions.fbShowDateTime); showBasicExif->set_active(moptions.fbShowBasicExif); showExpComp->set_active(moptions.fbShowExpComp); @@ -2098,7 +2174,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(); @@ -2134,7 +2210,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); @@ -2163,10 +2239,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); @@ -2183,6 +2261,7 @@ void Preferences::fillPreferences() cropGuidesCombo->set_active(moptions.cropGuides); cropAutoFitCB->set_active(moptions.cropAutoFit); + maxZoomCombo->set_active(static_cast(options.maxZoomLimit)); addc.block(false); setc.block(false); @@ -2199,12 +2278,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)); } /* @@ -2267,15 +2349,14 @@ void Preferences::okPressed() void Preferences::cancelPressed() { // set the initial theme back - if (themeFNames.at (themeCBT->get_active_row_number ()).longFName != options.theme) { - RTImage::updateImages(); + if (themeNames.at (themeCBT->get_active_row_number ()) != options.theme) { switchThemeTo(options.theme); } // set the initial font back Pango::FontDescription fd (mainFontFB->get_font_name()); - if (fd.get_family() != options.fontFamily && (fd.get_size() / Pango::SCALE) != options.fontSize) { + if (fd.get_family() != options.fontFamily || (fd.get_size() / Pango::SCALE) != options.fontSize) { if (options.fontFamily == "default") { switchFontTo(initialFontFamily, initialFontSize); } else { @@ -2295,23 +2376,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() { @@ -2324,8 +2388,7 @@ void Preferences::aboutPressed() void Preferences::themeChanged() { - moptions.theme = themeFNames.at (themeCBT->get_active_row_number ()).longFName; - RTImage::updateImages(); + moptions.theme = themeNames.at (themeCBT->get_active_row_number ()); switchThemeTo(moptions.theme); } @@ -2490,33 +2553,23 @@ void Preferences::cpFontChanged() void Preferences::switchFontTo(const Glib::ustring &newFontFamily, const int newFontSize) { + // Create CssProvider if not existing + if (!fontcss) { + fontcss = Gtk::CssProvider::create(); + Glib::RefPtr screen = Gdk::Screen::get_default(); + Gtk::StyleContext::add_provider_for_screen(screen, fontcss, GTK_STYLE_PROVIDER_PRIORITY_USER); + } - if (newFontFamily != "default") { - if (!fontcss) { - fontcss = Gtk::CssProvider::create(); - Glib::RefPtr screen = Gdk::Screen::get_default(); - Gtk::StyleContext::add_provider_for_screen(screen, fontcss, GTK_STYLE_PROVIDER_PRIORITY_USER); - } + // Create css to load based on new font name and size + const auto css = Glib::ustring::compose ("* { font-family: %1; font-size: %2pt }", newFontFamily, newFontSize); - try { - //GTK318 -//#if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION < 20 -// fontcss->load_from_data (Glib::ustring::compose ("* { font-family: %1; font-size: %2px }", newFontFamily, newFontSize * RTScalable::getScale())); -//#else - fontcss->load_from_data (Glib::ustring::compose ("* { font-family: %1; font-size: %2pt }", newFontFamily, newFontSize * RTScalable::getScale())); -//#endif - //GTK318 - } catch (Glib::Error &err) { - printf("Error: \"%s\"\n", err.what().c_str()); - } catch (...) { - printf("Error: Can't find the font named \"%s\"\n", newFontFamily.c_str()); - } - } else { - if (fontcss) { - fontcss = Gtk::CssProvider::create(); - Glib::RefPtr screen = Gdk::Screen::get_default(); - Gtk::StyleContext::remove_provider_for_screen(screen, fontcss); - } + // Load css to update font name and size + try { + fontcss->load_from_data (css); + } catch (Glib::Error &err) { + printf("Error: \"%s\"\n", err.what().c_str()); + } catch (...) { + printf("Error: Can't load the desired font correctly\n"); } } diff --git a/rtgui/preferences.h b/rtgui/preferences.h index 8ee67bf69..b34a8348f 100644 --- a/rtgui/preferences.h +++ b/rtgui/preferences.h @@ -70,18 +70,9 @@ class Preferences final : } }; - class ThemeFilename - { - public: - Glib::ustring shortFName; - Glib::ustring longFName; - - ThemeFilename (Glib::ustring sfname, Glib::ustring lfname) : shortFName (sfname), longFName (lfname) {} - }; - Glib::RefPtr behModel; BehavColumns behavColumns; - std::vector themeFNames; + std::vector themeNames; Glib::RefPtr regex; Glib::MatchInfo matchInfo; Splash* splash; @@ -92,7 +83,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; @@ -104,19 +95,20 @@ class Preferences final : Gtk::RadioButton* edPS; Gtk::RadioButton* edOther; ExternalEditorPreferences *externalEditors; - + Gtk::RadioButton *editor_dir_temp; Gtk::RadioButton *editor_dir_current; Gtk::RadioButton *editor_dir_custom; MyFileChooserButton *editor_dir_custom_path; Gtk::CheckButton *editor_float32; Gtk::CheckButton *editor_bypass_output_profile; - + MyFileChooserButton* darkFrameDir; MyFileChooserButton* flatFieldDir; MyFileChooserButton* clutsDir; - MyFileChooserButton* cameraProfilesDir; - MyFileChooserButton* lensProfilesDir; + MyFileChooserButton* cameraProfilesDir; + MyFileChooserButton* lensProfilesDir; + MyFileChooserEntry* lensfunDbDir; Gtk::Label *dfLabel; Gtk::Label *ffLabel; @@ -137,9 +129,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; @@ -179,8 +173,6 @@ class Preferences final : Gtk::FontButton* colorPickerFontFB; Gtk::ColorButton* cropMaskColorCB; Gtk::ColorButton* navGuideColorCB; - Gtk::CheckButton* pseudoHiDPI; - Gtk::SpinButton* maxRecentFolders; Gtk::SpinButton* maxThumbHeightSB; @@ -249,6 +241,11 @@ class Preferences final : Gtk::ComboBoxText *cropGuidesCombo; Gtk::CheckButton *cropAutoFitCB; + Gtk::ComboBoxText *maxZoomCombo; + + Gtk::ComboBoxText *metadataSyncCombo; + Gtk::ComboBoxText *xmpSidecarCombo; + Glib::ustring storedValueRaw; Glib::ustring storedValueImg; @@ -282,7 +279,7 @@ class Preferences final : void switchFontTo (const Glib::ustring &newFontFamily, const int newFontSize); bool splashClosed (GdkEventAny* event); - int getThemeRowNumber (const Glib::ustring& longThemeFName); + int getThemeRowNumber (const Glib::ustring& name); void appendBehavList (Gtk::TreeModel::iterator& parent, Glib::ustring label, int id, bool set); @@ -319,7 +316,7 @@ public: void sndEnableToggled (); void langAutoDetectToggled (); void autocielabToggled (); - void observer10Toggled (); + void observer10Toggled (); void selectStartupDir (); void addExtPressed (); diff --git a/rtgui/previewloader.cc b/rtgui/previewloader.cc index a808e1f71..0bb7d5659 100644 --- a/rtgui/previewloader.cc +++ b/rtgui/previewloader.cc @@ -17,6 +17,7 @@ * along with RawTherapee. If not, see . */ +#include #include #include "cachemanager.h" #include "filebrowserentry.h" @@ -81,10 +82,10 @@ public: int threadCount = 2; #endif - threadPool_ = new Glib::ThreadPool(threadCount, 0); + threadPool_.reset(new Glib::ThreadPool(threadCount, 0)); } - Glib::ThreadPool* threadPool_; + std::unique_ptr threadPool_; MyMutex mutex_; JobSet jobs_; gint nConcurrentThreads; diff --git a/rtgui/previewmodepanel.cc b/rtgui/previewmodepanel.cc index 586923173..25167ae3b 100644 --- a/rtgui/previewmodepanel.cc +++ b/rtgui/previewmodepanel.cc @@ -19,76 +19,67 @@ #include "options.h" #include "multilangmgr.h" #include "imagearea.h" -#include "rtimage.h" -PreviewModePanel::PreviewModePanel (ImageArea* ia) : imageArea(ia) +PreviewModePanel::PreviewModePanel (ImageArea* ia) : + imageArea(ia), + // Note: RTImage custom class only manages squared icon. To reduce toggle button width, + // toggle button image is managed by icon name + nR("square-toggle-red-on-narrow"), ngR("square-toggle-red-off-narrow"), + nG("square-toggle-green-on-narrow"), ngG("square-toggle-green-off-narrow"), + nB("square-toggle-blue-on-narrow"), ngB("square-toggle-blue-off-narrow"), + nL("square-toggle-luminosity-on-narrow"), ngL("square-toggle-luminosity-off-narrow"), + nBC0("square-toggle-theme-on-narrow"), ngBC0("square-toggle-theme-off-narrow"), + nBC1("square-toggle-black-on-narrow"), ngBC1("square-toggle-black-off-narrow"), + nBC2("square-toggle-white-on-narrow"), ngBC2("square-toggle-white-off-narrow"), + nBC3("square-toggle-gray-on-narrow"), ngBC3("square-toggle-gray-off-narrow") { - - iR = new RTImage ("square-toggle-red-on-narrow.png"); - iG = new RTImage ("square-toggle-green-on-narrow.png"); - iB = new RTImage ("square-toggle-blue-on-narrow.png"); - iL = new RTImage ("square-toggle-luminosity-on-narrow.png"); - iBC0 = new RTImage ("square-toggle-theme-on-narrow.png"); - iBC1 = new RTImage ("square-toggle-black-on-narrow.png"); - iBC2 = new RTImage ("square-toggle-white-on-narrow.png"); - iBC3 = new RTImage ("square-toggle-gray-on-narrow.png"); - - igR = new RTImage ("square-toggle-red-off-narrow.png"); - igG = new RTImage ("square-toggle-green-off-narrow.png"); - igB = new RTImage ("square-toggle-blue-off-narrow.png"); - igL = new RTImage ("square-toggle-luminosity-off-narrow.png"); - igBC0 = new RTImage ("square-toggle-theme-off-narrow.png"); - igBC1 = new RTImage ("square-toggle-black-off-narrow.png"); - igBC2 = new RTImage ("square-toggle-white-off-narrow.png"); - igBC3 = new RTImage ("square-toggle-gray-off-narrow.png"); - backColor0 = Gtk::manage (new Gtk::ToggleButton ()); backColor0->get_style_context()->add_class("narrowbutton"); backColor0->set_relief(Gtk::RELIEF_NONE); backColor0->set_tooltip_markup (M("MAIN_TOOLTIP_BACKCOLOR0")); - backColor0->set_image(options.bgcolor == 0 ? *iBC0 : *igBC0); + backColor0->set_image_from_icon_name(options.bgcolor == 0 ? nBC0 : ngBC0, Gtk::ICON_SIZE_LARGE_TOOLBAR); backColor1 = Gtk::manage (new Gtk::ToggleButton ()); backColor1->get_style_context()->add_class("narrowbutton"); backColor1->set_relief(Gtk::RELIEF_NONE); backColor1->set_tooltip_markup (M("MAIN_TOOLTIP_BACKCOLOR1")); - backColor1->set_image(options.bgcolor == 1 ? *iBC1 : *igBC1); - - backColor3 = Gtk::manage (new Gtk::ToggleButton ()); - backColor3->get_style_context()->add_class("narrowbutton"); - backColor3->set_relief(Gtk::RELIEF_NONE); - backColor3->set_tooltip_markup (M("MAIN_TOOLTIP_BACKCOLOR3")); - backColor3->set_image(options.bgcolor == 3 ? *iBC3 : *igBC3); + backColor1->set_image_from_icon_name(options.bgcolor == 1 ? nBC1 : ngBC1, Gtk::ICON_SIZE_LARGE_TOOLBAR); backColor2 = Gtk::manage (new Gtk::ToggleButton ()); backColor2->get_style_context()->add_class("narrowbutton"); backColor2->set_relief(Gtk::RELIEF_NONE); backColor2->set_tooltip_markup (M("MAIN_TOOLTIP_BACKCOLOR2")); - backColor2->set_image(options.bgcolor == 2 ? *iBC2 : *igBC2); + backColor2->set_image_from_icon_name(options.bgcolor == 2 ? nBC2 : ngBC2, Gtk::ICON_SIZE_LARGE_TOOLBAR); + + backColor3 = Gtk::manage (new Gtk::ToggleButton ()); + backColor3->get_style_context()->add_class("narrowbutton"); + backColor3->set_relief(Gtk::RELIEF_NONE); + backColor3->set_tooltip_markup (M("MAIN_TOOLTIP_BACKCOLOR3")); + backColor3->set_image_from_icon_name(options.bgcolor == 3 ? nBC3 : ngBC3, Gtk::ICON_SIZE_LARGE_TOOLBAR); previewR = Gtk::manage (new Gtk::ToggleButton ()); previewR->get_style_context()->add_class("narrowbutton"); previewR->set_relief(Gtk::RELIEF_NONE); previewR->set_tooltip_markup (M("MAIN_TOOLTIP_PREVIEWR")); - previewR->set_image(*igR); + previewR->set_image_from_icon_name(ngR, Gtk::ICON_SIZE_LARGE_TOOLBAR); previewG = Gtk::manage (new Gtk::ToggleButton ()); previewG->get_style_context()->add_class("narrowbutton"); previewG->set_relief(Gtk::RELIEF_NONE); previewG->set_tooltip_markup (M("MAIN_TOOLTIP_PREVIEWG")); - previewG->set_image(*igG); + previewG->set_image_from_icon_name(ngG, Gtk::ICON_SIZE_LARGE_TOOLBAR); previewB = Gtk::manage (new Gtk::ToggleButton ()); previewB->get_style_context()->add_class("narrowbutton"); previewB->set_relief(Gtk::RELIEF_NONE); previewB->set_tooltip_markup (M("MAIN_TOOLTIP_PREVIEWB")); - previewB->set_image(*igB); + previewB->set_image_from_icon_name(ngB, Gtk::ICON_SIZE_LARGE_TOOLBAR); previewL = Gtk::manage (new Gtk::ToggleButton ()); previewL->get_style_context()->add_class("narrowbutton"); previewL->set_relief(Gtk::RELIEF_NONE); previewL->set_tooltip_markup (M("MAIN_TOOLTIP_PREVIEWL")); - previewL->set_image(*igL); + previewL->set_image_from_icon_name(ngL, Gtk::ICON_SIZE_LARGE_TOOLBAR); previewR->set_active (false); previewG->set_active (false); @@ -125,25 +116,8 @@ PreviewModePanel::PreviewModePanel (ImageArea* ia) : imageArea(ia) //show_all (); } -PreviewModePanel::~PreviewModePanel () -{ - delete iR; - delete iG; - delete iB; - delete iL; - delete iBC0; - delete iBC1; - delete iBC2; - delete iBC3; - delete igR; - delete igG; - delete igB; - delete igL; - delete igBC0; - delete igBC1; - delete igBC2; - delete igBC3; -} +PreviewModePanel::~PreviewModePanel () {} + //toggle Functions below are for shortcuts void PreviewModePanel::toggleR () { @@ -181,35 +155,50 @@ void PreviewModePanel::togglebackColor3 () void PreviewModePanel::buttonToggled (Gtk::ToggleButton* tbpreview) { - connR.block(true); connG.block(true); connB.block(true); connL.block(true); - // control state of the buttons - // only 0 or 1 button at a time can remain pressed - if (tbpreview != previewR) { + // Control state of the others buttons: only 0 or 1 button at a time can remain pressed + // Note: Only refresh previously toggled button + if (previewR->get_active() && tbpreview != previewR) { previewR->set_active(false); + previewR->set_image_from_icon_name(ngR, Gtk::ICON_SIZE_LARGE_TOOLBAR); } - if (tbpreview != previewG) { + if (previewG->get_active() && tbpreview != previewG) { previewG->set_active(false); + previewG->set_image_from_icon_name(ngG, Gtk::ICON_SIZE_LARGE_TOOLBAR); } - if (tbpreview != previewB) { + if (previewB->get_active() && tbpreview != previewB) { previewB->set_active(false); + previewB->set_image_from_icon_name(ngB, Gtk::ICON_SIZE_LARGE_TOOLBAR); } - if (tbpreview != previewL) { + if (previewL->get_active() && tbpreview != previewL) { previewL->set_active(false); + previewL->set_image_from_icon_name(ngL, Gtk::ICON_SIZE_LARGE_TOOLBAR); } - // set image based on button's state - previewR->set_image(previewR->get_active() ? *iR : *igR); - previewG->set_image(previewG->get_active() ? *iG : *igG); - previewB->set_image(previewB->get_active() ? *iB : *igB); - previewL->set_image(previewL->get_active() ? *iL : *igL); + // Change image on activated button + // Note: Only refresh toggled button + if (tbpreview == previewR) { + previewR->set_image_from_icon_name(previewR->get_active() ? nR : ngR, Gtk::ICON_SIZE_LARGE_TOOLBAR); + } + + if (tbpreview == previewG) { + previewG->set_image_from_icon_name(previewG->get_active() ? nG : ngG, Gtk::ICON_SIZE_LARGE_TOOLBAR); + } + + if (tbpreview == previewB) { + previewB->set_image_from_icon_name(previewB->get_active() ? nB : ngB, Gtk::ICON_SIZE_LARGE_TOOLBAR); + } + + if (tbpreview == previewL) { + previewL->set_image_from_icon_name(previewL->get_active() ? nL : ngL, Gtk::ICON_SIZE_LARGE_TOOLBAR); + } connR.block(false); connG.block(false); @@ -265,51 +254,66 @@ void PreviewModePanel::togglebackColor() void PreviewModePanel::buttonToggled_backColor (Gtk::ToggleButton* tbbackColor) { - connbackColor0.block(true); connbackColor1.block(true); connbackColor2.block(true); connbackColor3.block(true); - // control the state of the buttons - // Exactly 1 button at a time must remain pressed - if (tbbackColor == backColor0 && !backColor0->get_active()) { - backColor0->set_active(true); - } - - if (tbbackColor == backColor1 && !backColor1->get_active()) { - backColor1->set_active(true); - } - - if (tbbackColor == backColor2 && !backColor2->get_active()) { - backColor2->set_active(true); - } - - if (tbbackColor == backColor3 && !backColor3->get_active()) { - backColor3->set_active(true); - } - - if (tbbackColor != backColor0) { + // Control state of the others buttons: only 1 button at a time shall remain pressed + // Note: Only refresh previously toggled button + if (backColor0->get_active() && tbbackColor != backColor0) { backColor0->set_active(false); + backColor0->set_image_from_icon_name(ngBC0, Gtk::ICON_SIZE_LARGE_TOOLBAR); } - if (tbbackColor != backColor1) { + if (backColor1->get_active() && tbbackColor != backColor1) { backColor1->set_active(false); + backColor1->set_image_from_icon_name(ngBC1, Gtk::ICON_SIZE_LARGE_TOOLBAR); } - if (tbbackColor != backColor2) { + if (backColor2->get_active() && tbbackColor != backColor2) { backColor2->set_active(false); + backColor2->set_image_from_icon_name(ngBC2, Gtk::ICON_SIZE_LARGE_TOOLBAR); } - if (tbbackColor != backColor3) { + if (backColor3->get_active() && tbbackColor != backColor3) { backColor3->set_active(false); + backColor3->set_image_from_icon_name(ngBC3, Gtk::ICON_SIZE_LARGE_TOOLBAR); } - // set image based on button's state - backColor0->set_image(backColor0->get_active() ? *iBC0 : *igBC0); - backColor1->set_image(backColor1->get_active() ? *iBC1 : *igBC1); - backColor2->set_image(backColor2->get_active() ? *iBC2 : *igBC2); - backColor3->set_image(backColor3->get_active() ? *iBC3 : *igBC3); + // Change image on toggled button + // Note: Only refresh toggled button if newly active (otherwise keep it active) + if (tbbackColor == backColor0) { + if (backColor0->get_active()) { + backColor0->set_image_from_icon_name(nBC0, Gtk::ICON_SIZE_LARGE_TOOLBAR); + } else { + backColor0->set_active(true); + } + } + + if (tbbackColor == backColor1) { + if (backColor1->get_active()) { + backColor1->set_image_from_icon_name(nBC1, Gtk::ICON_SIZE_LARGE_TOOLBAR); + } else { + backColor1->set_active(true); + } + } + + if (tbbackColor == backColor2) { + if (backColor2->get_active()) { + backColor2->set_image_from_icon_name(nBC2, Gtk::ICON_SIZE_LARGE_TOOLBAR); + } else { + backColor2->set_active(true); + } + } + + if (tbbackColor == backColor3) { + if (backColor3->get_active()) { + backColor3->set_image_from_icon_name(nBC3, Gtk::ICON_SIZE_LARGE_TOOLBAR); + } else { + backColor3->set_active(true); + } + } connbackColor0.block(false); connbackColor1.block(false); diff --git a/rtgui/previewmodepanel.h b/rtgui/previewmodepanel.h index d475fd4a4..6e869471d 100644 --- a/rtgui/previewmodepanel.h +++ b/rtgui/previewmodepanel.h @@ -36,14 +36,14 @@ protected: Gtk::ToggleButton* backColor3; ImageArea* imageArea; - Gtk::Image* iR, *igR; - Gtk::Image* iG, *igG; - Gtk::Image* iB, *igB; - Gtk::Image* iL, *igL; - Gtk::Image* iBC0, *igBC0; - Gtk::Image* iBC1, *igBC1; - Gtk::Image* iBC2, *igBC2; - Gtk::Image* iBC3, *igBC3; + const Glib::ustring nR, ngR; + const Glib::ustring nG, ngG; + const Glib::ustring nB, ngB; + const Glib::ustring nL, ngL; + const Glib::ustring nBC0, ngBC0; + const Glib::ustring nBC1, ngBC1; + const Glib::ustring nBC2, ngBC2; + const Glib::ustring nBC3, ngBC3; public: explicit PreviewModePanel (ImageArea* ia); diff --git a/rtgui/previewwindow.cc b/rtgui/previewwindow.cc index 90d0a7b4b..cc239ed26 100644 --- a/rtgui/previewwindow.cc +++ b/rtgui/previewwindow.cc @@ -156,7 +156,7 @@ bool PreviewWindow::on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr) int x, y, w, h; getObservedFrameArea (x, y, w, h); if (x>imgX || y>imgY || w < imgW || h < imgH) { - double s = RTScalable::getScale(); + const double s = RTScalable::scalePixelSize(1.); double rectX = x + 0.5; double rectY = y + 0.5; double rectW = std::min(w, (int)(imgW - (x - imgX) - 1)); @@ -307,14 +307,14 @@ Gtk::SizeRequestMode PreviewWindow::get_request_mode_vfunc () const void PreviewWindow::get_preferred_height_vfunc (int &minimum_height, int &natural_height) const { - minimum_height= 50 * RTScalable::getScale(); - natural_height = 100 * RTScalable::getScale(); + minimum_height= RTScalable::scalePixelSize(50); + natural_height = RTScalable::scalePixelSize(100); } void PreviewWindow::get_preferred_width_vfunc (int &minimum_width, int &natural_width) const { - minimum_width = 80 * RTScalable::getScale(); - natural_width = 120 * RTScalable::getScale(); + minimum_width = RTScalable::scalePixelSize(80); + natural_width = RTScalable::scalePixelSize(120); } void PreviewWindow::get_preferred_height_for_width_vfunc (int width, int &minimum_height, int &natural_height) const 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..7c3948f42 100644 --- a/rtgui/profilepanel.cc +++ b/rtgui/profilepanel.cc @@ -45,16 +45,16 @@ void ProfilePanel::cleanup () delete partialProfileDlg; } -ProfilePanel::ProfilePanel () : storedPProfile(nullptr), lastSavedPSE(nullptr), customPSE(nullptr) +ProfilePanel::ProfilePanel () : storedPProfile(nullptr), + modeOn("profile-filled"), modeOff("profile-partial"), + profileFillImage(Gtk::manage(new RTImage(options.filledProfile ? modeOn : modeOff, Gtk::ICON_SIZE_LARGE_TOOLBAR))), + lastSavedPSE(nullptr), customPSE(nullptr) { - tpc = nullptr; - profileFillModeOnImage = new RTImage("profile-filled.png"); - profileFillModeOffImage = new RTImage("profile-partial.png"); fillMode = Gtk::manage (new Gtk::ToggleButton()); fillMode->set_active(options.filledProfile); - fillMode->add( options.filledProfile ? *profileFillModeOnImage : *profileFillModeOffImage ); + fillMode->add(*profileFillImage); fillMode->signal_toggled().connect ( sigc::mem_fun(*this, &ProfilePanel::profileFillModeToggled) ); fillMode->set_tooltip_text(M("PROFILEPANEL_MODE_TOOLTIP")); //GTK318 @@ -69,20 +69,20 @@ ProfilePanel::ProfilePanel () : storedPProfile(nullptr), lastSavedPSE(nullptr), setExpandAlignProperties(profiles, true, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); load = Gtk::manage (new Gtk::Button ()); - load->add (*Gtk::manage (new RTImage ("folder-open.png"))); + load->add (*Gtk::manage (new RTImage ("folder-open", Gtk::ICON_SIZE_LARGE_TOOLBAR))); load->get_style_context()->add_class("Left"); load->set_margin_left(2); setExpandAlignProperties(load, false, true, Gtk::ALIGN_CENTER, Gtk::ALIGN_FILL); save = Gtk::manage (new Gtk::Button ()); - save->add (*Gtk::manage (new RTImage ("save.png"))); + save->add (*Gtk::manage (new RTImage ("save", Gtk::ICON_SIZE_LARGE_TOOLBAR))); save->get_style_context()->add_class("MiddleH"); setExpandAlignProperties(save, false, true, Gtk::ALIGN_CENTER, Gtk::ALIGN_FILL); copy = Gtk::manage (new Gtk::Button ()); - copy->add (*Gtk::manage (new RTImage ("copy.png"))); + copy->add (*Gtk::manage (new RTImage ("copy", Gtk::ICON_SIZE_LARGE_TOOLBAR))); copy->get_style_context()->add_class("MiddleH"); setExpandAlignProperties(copy, false, true, Gtk::ALIGN_CENTER, Gtk::ALIGN_FILL); paste = Gtk::manage (new Gtk::Button ()); - paste->add (*Gtk::manage (new RTImage ("paste.png"))); + paste->add (*Gtk::manage (new RTImage ("paste", Gtk::ICON_SIZE_LARGE_TOOLBAR))); paste->get_style_context()->add_class("Right"); setExpandAlignProperties(paste, false, true, Gtk::ALIGN_CENTER, Gtk::ALIGN_FILL); @@ -132,8 +132,6 @@ ProfilePanel::~ProfilePanel () delete lastsaved; } - delete profileFillModeOnImage; - delete profileFillModeOffImage; delete lastSavedPSE; delete customPSE; } @@ -288,6 +286,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 +340,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); + } } /* @@ -887,10 +911,10 @@ void ProfilePanel::profileFillModeToggled() { if (fillMode->get_active()) { // The button is pressed, we'll use the profileFillModeOnImage - fillMode->set_image(*profileFillModeOnImage); + profileFillImage->set_from_icon_name(modeOn); } else { // The button is released, we'll use the profileFillModeOffImage - fillMode->set_image(*profileFillModeOffImage); + profileFillImage->set_from_icon_name(modeOff); } } diff --git a/rtgui/profilepanel.h b/rtgui/profilepanel.h index c3a125c49..e1d1f4067 100644 --- a/rtgui/profilepanel.h +++ b/rtgui/profilepanel.h @@ -62,8 +62,8 @@ private: Glib::ustring storedValue; Glib::ustring lastFilename; Glib::ustring imagePath; - RTImage *profileFillModeOnImage; - RTImage *profileFillModeOffImage; + const Glib::ustring modeOn, modeOff; + RTImage* const profileFillImage; Gtk::ToggleButton* fillMode; Gtk::TreeIter currRow; ProfileStoreEntry *lastSavedPSE; diff --git a/rtgui/rawcacorrection.cc b/rtgui/rawcacorrection.cc index 473ca2ed3..3bcd3d03a 100644 --- a/rtgui/rawcacorrection.cc +++ b/rtgui/rawcacorrection.cc @@ -37,10 +37,10 @@ RAWCACorr::RAWCACorr () : FoldableToolPanel(this, TOOL_NAME, M("TP_RAWCACORR_LAB EvPreProcessCAColourshift = m->newEvent(DARKFRAME, "HISTORY_MSG_RAWCACORR_COLORSHIFT"); EvPreProcessCAColourshiftHistory = m->newEvent(M_VOID, "HISTORY_MSG_RAWCACORR_COLORSHIFT"); - Gtk::Image* icaredL = Gtk::manage (new RTImage ("circle-red-cyan-small.png")); - Gtk::Image* icaredR = Gtk::manage (new RTImage ("circle-cyan-red-small.png")); - Gtk::Image* icablueL = Gtk::manage (new RTImage ("circle-blue-yellow-small.png")); - Gtk::Image* icablueR = Gtk::manage (new RTImage ("circle-yellow-blue-small.png")); + Gtk::Image* const icaredL = Gtk::manage (new RTImage ("circle-red-cyan-small")); + Gtk::Image* const icaredR = Gtk::manage (new RTImage ("circle-cyan-red-small")); + Gtk::Image* const icablueL = Gtk::manage (new RTImage ("circle-blue-yellow-small")); + Gtk::Image* const icablueR = Gtk::manage (new RTImage ("circle-yellow-blue-small")); caAutocorrect = Gtk::manage (new CheckBox(M("TP_RAWCACORR_AUTO"), multiImage)); caAutocorrect->setCheckBoxListener (this); diff --git a/rtgui/retinex.cc b/rtgui/retinex.cc index a1a0ebf7c..11bcc74fb 100644 --- a/rtgui/retinex.cc +++ b/rtgui/retinex.cc @@ -493,7 +493,7 @@ Retinex::Retinex () : FoldableToolPanel (this, TOOL_NAME, M ("TP_RETINEX_LABEL") neutral = Gtk::manage (new Gtk::Button (M ("TP_RETINEX_NEUTRAL"))); setExpandAlignProperties (neutral, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); - RTImage *resetImg = Gtk::manage (new RTImage ("undo-small.png", "redo-small.png")); + RTImage *resetImg = Gtk::manage (new RTImage ("undo-small", Gtk::ICON_SIZE_BUTTON)); setExpandAlignProperties (resetImg, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); neutral->set_image (*resetImg); neutral->set_tooltip_text (M ("TP_RETINEX_NEUTRAL_TOOLTIP")); @@ -941,7 +941,7 @@ void Retinex::read (const ProcParams* pp, const ParamsEdited* pedited) cdshapeH->setCurve (pp->retinex.cdHcurve); lhshape->setCurve (pp->retinex.lhcurve); mapshape->setCurve (pp->retinex.mapcurve); - + retinexMethodConn.block (false); retinexColorSpaceConn.block (false); gammaretinexConn.block (false); @@ -953,7 +953,7 @@ void Retinex::read (const ProcParams* pp, const ParamsEdited* pedited) complexmethodconn.block (false); enableListener (); - + if (complexmethod->get_active_row_number() == 0) { updateGUIToMode(0); // convertParamToNormal(); @@ -961,7 +961,7 @@ void Retinex::read (const ProcParams* pp, const ParamsEdited* pedited) } else { updateGUIToMode(1); } - + } diff --git a/rtgui/rotate.cc b/rtgui/rotate.cc index 944c54e6d..81dd9267c 100644 --- a/rtgui/rotate.cc +++ b/rtgui/rotate.cc @@ -37,15 +37,15 @@ Rotate::Rotate () : FoldableToolPanel(this, TOOL_NAME, M("TP_ROTATE_LABEL")) rlistener = nullptr; //TODO the action of the rotation slider is counter-intuitive - Gtk::Image* irotateL = Gtk::manage (new RTImage ("rotate-right-small.png")); - Gtk::Image* irotateR = Gtk::manage (new RTImage ("rotate-left-small.png")); + Gtk::Image* irotateL = Gtk::manage (new RTImage ("rotate-right-small")); + Gtk::Image* irotateR = Gtk::manage (new RTImage ("rotate-left-small")); degree = Gtk::manage (new Adjuster (M("TP_ROTATE_DEGREE"), -45, 45, 0.01, 0, irotateL, irotateR)); degree->setAdjusterListener (this); pack_start (*degree); selectStraight = Gtk::manage (new Gtk::Button (M("TP_ROTATE_SELECTLINE"))); - selectStraight->set_image (*Gtk::manage (new RTImage ("rotate-straighten-small.png"))); + selectStraight->set_image (*Gtk::manage (new RTImage ("rotate-straighten-small"))); selectStraight->get_style_context()->add_class("independent"); pack_start (*selectStraight, Gtk::PACK_SHRINK, 2); 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/rtimage.cc b/rtgui/rtimage.cc index 98e61b897..bcfa9ad55 100644 --- a/rtgui/rtimage.cc +++ b/rtgui/rtimage.cc @@ -3,6 +3,7 @@ * * Copyright (c) 2004-2010 Gabor Horvath * Copyright (c) 2018 Jean-Christophe FRISCH + * Copyright (c) 2022 Pierre CABRERA * * RawTherapee is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,214 +21,116 @@ #include "rtimage.h" -#include -#include -#include -#include +#include "rtsurface.h" -#include "../rtengine/settings.h" +std::map, std::shared_ptr> RTImageCache::cache; -namespace +std::shared_ptr RTImageCache::getCachedSurface(const Glib::ustring &icon_name, const Gtk::IconSize icon_size) { + // Look for an existing cached icon + const auto key = std::pair(icon_name, icon_size); + const auto item = cache.find(key); -struct GIconKey { - Glib::RefPtr icon; - /** - * Icon size in pixels. - */ - int icon_size; + if (item != cache.end()) { // A cached icon exists + return item->second; + } else { // Create the icon + auto surface = std::shared_ptr(new RTSurface(icon_name, icon_size)); - GIconKey() {} - GIconKey(const Glib::RefPtr &icon, int icon_size): icon(icon), icon_size(icon_size) {} + // Add the surface to the cache if the icon exist + if (surface) { + cache.insert({key, surface}); + } - bool operator==(const GIconKey &other) const - { - bool icons_match = (icon.get() == nullptr && other.icon.get() == nullptr) || (icon.get() != nullptr && icon->equal(Glib::RefPtr::cast_const(other.icon))); - return icons_match && icon_size == other.icon_size; + return surface; } -}; - -struct GIconKeyHash { - size_t operator()(const GIconKey &key) const - { - const size_t icon_hash = key.icon ? key.icon->hash() : 0; - return icon_hash ^ std::hash()(key.icon_size); - } -}; - -std::unordered_map, GIconKeyHash> gIconPixbufCache; -std::map > pixbufCache; -std::map > surfaceCache; - } -double RTImage::dpiBack = 0.; -int RTImage::scaleBack = 0; +void RTImageCache::updateCache() +{ + // Iterate over cache to updated RTSurface + for (auto const& item : cache) { + item.second->updateSurface(); + } +} RTImage::RTImage () {} -RTImage::RTImage (RTImage &other) : surface(other.surface), pixbuf(other.pixbuf) +RTImage::RTImage (const Glib::ustring& iconName, const Gtk::IconSize iconSize) : + Gtk::Image(), + size(iconSize), + icon_name(iconName), + g_icon(Glib::RefPtr()) { - if (pixbuf) { - set(pixbuf); - } else if (surface) { - set(surface); - } else if (other.gIcon) { - changeImage(other.gIcon, other.gIconSize); - } -} + // Set surface from icon cache + surface = RTImageCache::getCachedSurface(this->icon_name, this->size); -RTImage::RTImage (const Glib::ustring& fileName, const Glib::ustring& rtlFileName) : Gtk::Image() -{ - setImage (fileName, rtlFileName); -} - -RTImage::RTImage (Glib::RefPtr &pbuf) -{ + // Add it to the RTImage if surface exists if (surface) { - surface.clear(); - } - if (pbuf) { - set(pbuf); - this->pixbuf = pbuf; + set(surface->get()); } } -RTImage::RTImage (Cairo::RefPtr &surf) +RTImage::RTImage (const Glib::RefPtr& gIcon, const Gtk::IconSize iconSize) : + Gtk::Image(), + size(iconSize), + icon_name(""), + g_icon(gIcon) { - if (pixbuf) { - pixbuf.clear(); + // Configure RTImage based on g_icon + set(this->g_icon, this->size); +} + +void RTImage::set_from_icon_name(const Glib::ustring& iconName) +{ + set_from_icon_name(iconName, this->size); +} + +void RTImage::set_from_icon_name(const Glib::ustring& iconName, const Gtk::IconSize iconSize) +{ + this->icon_name = iconName; + this->size = iconSize; + + // Set surface from icon cache + surface = RTImageCache::getCachedSurface(this->icon_name, this->size); + + // Add it to the RTImage if previously chosen + if (surface) { + set(surface->get()); } - if (surf) { - set(surf); - surface = surf; + + // Unset Gio::Icon if previously chosen + if (this->g_icon) { + g_icon = Glib::RefPtr(); } } -RTImage::RTImage (Glib::RefPtr &other) +void RTImage::set_from_gicon(const Glib::RefPtr& gIcon) { - if (other) { - if (other->get_surface()) { - surface = other->get_surface(); - set(surface); - } else if (other->pixbuf) { - pixbuf = other->get_pixbuf(); - set(pixbuf); - } else if (other->gIcon) { - changeImage(other->gIcon, other->gIconSize); - } + set_from_gicon(gIcon, this->size); +} + +void RTImage::set_from_gicon(const Glib::RefPtr& gIcon, const Gtk::IconSize iconSize) +{ + this->g_icon = gIcon; + this->size = iconSize; + + // Set image from Gio::Icon + set(this->g_icon, this->size); + + // Unset surface if previously chosen + this->icon_name = ""; + + if (surface) { + surface = std::shared_ptr(); } } -RTImage::RTImage(const Glib::RefPtr &gIcon, Gtk::IconSize size) -{ - changeImage(gIcon, size); -} - -int RTImage::iconSizeToPixels(Gtk::IconSize size) const -{ - int width, height; - Gtk::IconSize::lookup(size, width, height); - return std::round(getTweakedDPI() / baseDPI * std::max(width, height)); -} - -void RTImage::setImage (const Glib::ustring& fileName, const Glib::ustring& rtlFileName) -{ - Glib::ustring imageName; - - if (!rtlFileName.empty() && getDirection() == Gtk::TEXT_DIR_RTL) { - imageName = rtlFileName; - } else { - imageName = fileName; - } - - changeImage (imageName); -} - -/* - * On windows, if scale = 2, the dpi is non significant, i.e. should be considered = 192 - */ -void RTImage::setDPInScale (const double newDPI, const int newScale) -{ - if (scaleBack != newScale || (scaleBack == 1 && dpiBack != newDPI)) { - RTScalable::setDPInScale(newDPI, newScale); - dpiBack = getDPI(); - scaleBack = getScale(); - updateImages(); - } -} - -void RTImage::changeImage(const Glib::RefPtr &gIcon, int size) -{ - clear(); - - pixbuf.reset(); - surface.clear(); - this->gIcon = gIcon; - - if (!gIcon) { - return; - } - - gIconSize = size; - GIconKey key(gIcon, gIconSize); - auto iterator = gIconPixbufCache.find(key); - - if (iterator == gIconPixbufCache.end()) { - auto icon_pixbuf = createPixbufFromGIcon(gIcon, gIconSize); - iterator = gIconPixbufCache.emplace(key, icon_pixbuf).first; - } - - set(iterator->second); -} - -void RTImage::changeImage(const Glib::RefPtr &gIcon, Gtk::IconSize size) -{ - changeImage(gIcon, iconSizeToPixels(size)); -} - -void RTImage::changeImage (const Glib::ustring& imageName) -{ - clear (); - - gIcon.reset(); - - if (imageName.empty()) { - return; - } - - if (pixbuf) { - auto iterator = pixbufCache.find (imageName); - assert(iterator != pixbufCache.end ()); - pixbuf = iterator->second; - set(iterator->second); - } else { // if no Pixbuf is set, we update or create a Cairo::ImageSurface - auto iterator = surfaceCache.find (imageName); - if (iterator == surfaceCache.end ()) { - auto surf = createImgSurfFromFile(imageName); - iterator = surfaceCache.emplace (imageName, surf).first; - } - surface = iterator->second; - set(iterator->second); - } -} - -Cairo::RefPtr RTImage::get_surface() -{ - return surface; -} - int RTImage::get_width() { if (surface) { - return surface->get_width(); - } - if (pixbuf) { - return pixbuf->get_width(); - } - - if (gIcon) { - return this->get_pixbuf()->get_width(); + return surface->getWidth(); + } else if (g_icon) { + Gtk::Image::get_width(); } return -1; @@ -236,94 +139,10 @@ int RTImage::get_width() int RTImage::get_height() { if (surface) { - return surface->get_height(); - } - if (pixbuf) { - return pixbuf->get_height(); - } - - if (gIcon) { - return this->get_pixbuf()->get_height(); + return surface->getHeight(); + } else if (g_icon) { + Gtk::Image::get_height(); } return -1; } - -void RTImage::init() -{ - dpiBack = RTScalable::getDPI(); - scaleBack = RTScalable::getScale(); -} - -void RTImage::cleanup(bool all) -{ - for (auto& entry : pixbufCache) { - entry.second.reset(); - } - for (auto& entry : surfaceCache) { - entry.second.clear(); - } - - for (auto& entry : gIconPixbufCache) { - entry.second.reset(); - } - - RTScalable::cleanup(all); -} - -void RTImage::updateImages() -{ - for (auto& entry : pixbufCache) { - entry.second = createPixbufFromFile(entry.first); - } - for (auto& entry : surfaceCache) { - entry.second = createImgSurfFromFile(entry.first); - } - - for (auto& entry : gIconPixbufCache) { - entry.second = createPixbufFromGIcon(entry.first.icon, entry.first.icon_size); - } -} - -Glib::RefPtr RTImage::createPixbufFromFile (const Glib::ustring& fileName) -{ - Cairo::RefPtr imgSurf = createImgSurfFromFile(fileName); - return Gdk::Pixbuf::create(imgSurf, 0, 0, imgSurf->get_width(), imgSurf->get_height()); -} - -Glib::RefPtr RTImage::createPixbufFromGIcon(const Glib::RefPtr &icon, int size) -{ - // TODO: Listen for theme changes and update icon, remove from cache. - Gtk::IconInfo iconInfo = Gtk::IconTheme::get_default()->lookup_icon(icon, size, Gtk::ICON_LOOKUP_FORCE_SIZE); - try { - return iconInfo.load_icon(); - } catch (Glib::Exception &e) { - return Glib::RefPtr(); - } -} - -Cairo::RefPtr RTImage::createImgSurfFromFile (const Glib::ustring& fileName) -{ - Cairo::RefPtr surf; - - try { - surf = loadImage(fileName, getTweakedDPI()); - - // HOMBRE: As of now, GDK_SCALE is forced to 1, so setting the Cairo::ImageSurface scale is not required - /* - double x=0., y=0.; - cairo_surface_get_device_scale(surf->cobj(), &x, &y); - if (getScale() == 2) { - cairo_surface_set_device_scale(surf->cobj(), 0.5, 0.5); - cairo_surface_get_device_scale(surf->cobj(), &x, &y); - surf->flush(); - } - */ - } catch (const Glib::Exception& exception) { - if (rtengine::settings->verbose) { - std::cerr << "Failed to load image \"" << fileName << "\": " << exception.what() << std::endl; - } - } - - return surf; -} diff --git a/rtgui/rtimage.h b/rtgui/rtimage.h index 183a83a94..3fe67eb8d 100644 --- a/rtgui/rtimage.h +++ b/rtgui/rtimage.h @@ -3,6 +3,7 @@ * * Copyright (c) 2004-2010 Gabor Horvath * Copyright (c) 2018 Jean-Christophe FRISCH + * Copyright (c) 2022 Pierre CABRERA * * RawTherapee is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,53 +20,40 @@ */ #pragma once -#include -#include "rtscalable.h" +#include + +class RTSurface; +class RTImageCache final +{ +private: + static std::map, std::shared_ptr> cache; + +public: + static std::shared_ptr getCachedSurface(const Glib::ustring &icon_name, const Gtk::IconSize icon_size); + static void updateCache(); +}; /** * @brief A derived class of Gtk::Image in order to handle theme-related icon sets. */ -class RTImage final : public Gtk::Image, public RTScalable +class RTImage final : public Gtk::Image { - static double dpiBack; // used to keep track of master dpi change - static int scaleBack; // used to keep track of master scale change - //bool on_configure_event(GdkEventConfigure* configure_event); - -protected: - Cairo::RefPtr surface; - Glib::RefPtr pixbuf; - Glib::RefPtr gIcon; - int gIconSize; - - void changeImage(const Glib::RefPtr &gIcon, int size); - int iconSizeToPixels(Gtk::IconSize size) const; +private: + Gtk::IconSize size; + Glib::ustring icon_name; + std::shared_ptr surface; + Glib::RefPtr g_icon; public: RTImage (); - RTImage (RTImage &other); - explicit RTImage (Glib::RefPtr &pixbuf); - explicit RTImage (Cairo::RefPtr &surf); - explicit RTImage(Cairo::RefPtr other); - explicit RTImage (Glib::RefPtr &other); - explicit RTImage(const Glib::RefPtr &gIcon, Gtk::IconSize size); - explicit RTImage (const Glib::ustring& fileName, const Glib::ustring& rtlFileName = Glib::ustring()); + explicit RTImage (const Glib::ustring& iconName, const Gtk::IconSize iconSize = Gtk::ICON_SIZE_SMALL_TOOLBAR); + explicit RTImage (const Glib::RefPtr& gIcon, const Gtk::IconSize iconSize = Gtk::ICON_SIZE_SMALL_TOOLBAR); + + void set_from_icon_name(const Glib::ustring& iconName); + void set_from_icon_name(const Glib::ustring& iconName, const Gtk::IconSize iconSize); + void set_from_gicon(const Glib::RefPtr& gIcon); + void set_from_gicon(const Glib::RefPtr& gIcon, const Gtk::IconSize iconSize); - void setImage (const Glib::ustring& fileName, const Glib::ustring& rtlFileName = Glib::ustring()); - void changeImage(const Glib::RefPtr &gIcon, Gtk::IconSize size); - void changeImage (const Glib::ustring& imageName); - Cairo::RefPtr get_surface(); int get_width(); int get_height(); - - - static void init(); - static void cleanup(bool all = false); - static void updateImages (); - static void setDPInScale (const double newDPI, const int newScale); - static void setScale (const int newScale); - - static Glib::RefPtr createPixbufFromFile (const Glib::ustring& fileName); - static Glib::RefPtr createPixbufFromGIcon(const Glib::RefPtr &icon, int size); - static Cairo::RefPtr createImgSurfFromFile (const Glib::ustring& fileName); - }; diff --git a/rtgui/rtscalable.cc b/rtgui/rtscalable.cc index 78202326a..58b67ed52 100644 --- a/rtgui/rtscalable.cc +++ b/rtgui/rtscalable.cc @@ -2,6 +2,7 @@ * This file is part of RawTherapee. * * Copyright (c) 2018 Jean-Christophe FRISCH + * Copyright (c) 2022 Pierre CABRERA * * RawTherapee is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,47 +19,235 @@ */ #include "rtscalable.h" -#include -#include -#include + #include #include -#include "../rtengine/rt_math.h" -#include "options.h" - -double RTScalable::dpi = 0.; -int RTScalable::scale = 0; +#include "../rtengine/settings.h" +#include "guiutils.h" extern Glib::ustring argv0; -extern unsigned char initialGdkScale; -extern float fontScale; -Gtk::TextDirection RTScalable::direction = Gtk::TextDirection::TEXT_DIR_NONE; + +// Default static parameter values +double RTScalable::dpi = 96.; +int RTScalable::scale = 1; + +void RTScalable::getDPInScale(const Gtk::Window* window, double &newDPI, int &newScale) +{ + if (window) { + const auto screen = window->get_screen(); + newDPI = screen->get_resolution(); // Get DPI retrieved from the OS + + if (window->get_scale_factor() > 0) { + // Get scale factor associated to the window + newScale = window->get_scale_factor(); + } else { + newScale = 1; // Default minimum value of 1 as scale is used to scale surface + } + } +} + +Cairo::RefPtr RTScalable::loadSurfaceFromIcon(const Glib::ustring &iconName, const Gtk::IconSize iconSize) +{ + GThreadLock lock; // All icon theme access or image access on separate thread HAVE to be protected + + Cairo::RefPtr surf; // Create Cairo::RefPtr nullptr + + // Get icon theme + const auto theme = Gtk::IconTheme::get_default(); + + // Get pixel size from Gtk::IconSize + int wSize, hSize; + + if (!Gtk::IconSize::lookup(iconSize, wSize, hSize)) { // Size in invalid + wSize = hSize = 16; // Set to a default size of 16px (i.e. Gtk::ICON_SIZE_SMALL_TOOLBAR one) + } + + // Get scale based on DPI and scale + // Note: hSize not used because icon are considered squared + const int size = wSize; + + // Looking for corresponding icon (if existing) + const auto iconInfo = theme->lookup_icon(iconName, size); + + if (!iconInfo) { + std::cerr << "Failed to load icon \"" << iconName << "\" for size " << size << "px" << std::endl; + + return surf; + } + + const auto iconPath = iconInfo.get_filename(); + + if (iconPath.empty()) { + std::cerr << "Failed to load icon \"" << iconName << "\" for size " << size << "px" << std::endl; + + return surf; + } + + // Create surface from corresponding icon + const auto pos = iconPath.find_last_of('.'); + + if (pos >= 0 && pos < iconPath.length()) { + const auto fext = iconPath.substr(pos + 1, iconPath.length()).lowercase(); + + // Case where iconPath is a PNG file + if (fext == "png") { + // Create surface from PNG file + surf = RTScalable::loadSurfaceFromPNG(iconPath, true); + } + + // Case where iconPath is a SVG file + if (fext == "svg") { + // Create surface from SVG file + surf = RTScalable::loadSurfaceFromSVG(iconPath, size, size, true); + } + } + + return surf; +} + +Cairo::RefPtr RTScalable::loadSurfaceFromPNG(const Glib::ustring &fname, const bool is_path) +{ + GThreadLock lock; // All icon theme access or image access on separate thread HAVE to be protected + + Cairo::RefPtr surf; // Create Cairo::RefPtr nullptr + + Glib::ustring path; + + if (is_path) { + // Directly use fname as a path + path = fname; + } else { + // Look for PNG file in "images" folder + Glib::ustring imagesFolder = Glib::build_filename(argv0, "images"); + path = Glib::build_filename(imagesFolder, fname); + } + + // Create surface from PNG file if file exist + if (Glib::file_test(path.c_str(), Glib::FILE_TEST_EXISTS)) { + surf = Cairo::ImageSurface::create_from_png(path); + } else { + std::cerr << "Failed to load PNG file \"" << fname << "\"" << std::endl; + } + + return surf; +} + +Cairo::RefPtr RTScalable::loadSurfaceFromSVG(const Glib::ustring &fname, const int width, const int height, const bool is_path) +{ + GThreadLock lock; // All icon theme access or image access on separate thread HAVE to be protected + + Cairo::RefPtr surf; // Create Cairo::RefPtr nullptr + + Glib::ustring path; + + if (is_path) { + // Directly use fname as a path + path = fname; + } else { + // Look for SVG file in "images" folder + Glib::ustring imagesFolder = Glib::build_filename(argv0, "images"); + path = Glib::build_filename(imagesFolder, fname); + } + + // Create surface from SVG file if file exist + if (Glib::file_test(path.c_str(), Glib::FILE_TEST_EXISTS)) { + // Read content of SVG file + std::string svgFile; + try { + svgFile = Glib::file_get_contents(path); + } + catch (Glib::FileError &err) { + std::cerr << "Failed to load SVG file \"" << fname << "\": " << err.what() << std::endl; + return surf; + } + + // Create surface with librsvg library + GError* error = nullptr; + RsvgHandle* handle = rsvg_handle_new_from_data((unsigned const char*)svgFile.c_str(), svgFile.length(), &error); + + if (error) { + std::cerr << "Failed to load SVG file \"" << fname << "\": " << std::endl + << Glib::ustring(error->message) << std::endl; + free(error); + return surf; + } + + int w, h; + + if (width == -1 || height == -1) { + // Use SVG image natural width and height + double _w, _h; + const bool has_dim = rsvg_handle_get_intrinsic_size_in_pixels(handle, &_w, &_h); // Get SVG image dimensions + if (has_dim) { + w = std::ceil(_w); + h = std::ceil(_h); + } else { + w = h = 16; // Set to a default size of 16px (i.e. Gtk::ICON_SIZE_SMALL_TOOLBAR one) + } + } else { + // Use given width and height + w = width; + h = height; + } + + // Create an upscaled surface to avoid blur effect + surf = Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, + w * RTScalable::getScale(), + h * RTScalable::getScale()); + + // Render (and erase with) default surface background + Cairo::RefPtr c = Cairo::Context::create(surf); + c->set_source_rgba (0., 0., 0., 0.); + c->set_operator (Cairo::OPERATOR_CLEAR); + c->paint(); + + // Render upscaled surface based on SVG image + error = nullptr; + RsvgRectangle rect = { + .x = 0., + .y = 0., + .width = static_cast(w * RTScalable::getScale()), + .height = static_cast(h * RTScalable::getScale()) + }; + c->set_operator (Cairo::OPERATOR_OVER); + const bool success = rsvg_handle_render_document(handle, c->cobj(), &rect, &error); + + if (!success && error) { + std::cerr << "Failed to load SVG file \"" << fname << "\": " << std::endl + << Glib::ustring(error->message) << std::endl; + free(error); + return surf; + } + + rsvg_handle_free(handle); + + // Set device scale to avoid blur effect + cairo_surface_set_device_scale(surf->cobj(), + static_cast(RTScalable::getScale()), + static_cast(RTScalable::getScale())); + } else { + std::cerr << "Failed to load SVG file \"" << fname << "\"" << std::endl; + } + + return surf; +} + +void RTScalable::init(const Gtk::Window* window) +{ + // Retrieve DPI and Scale paremeters from OS + getDPInScale(window, dpi, scale); +} + +void RTScalable::setDPInScale (const Gtk::Window* window) +{ + getDPInScale(window, dpi, scale); +} void RTScalable::setDPInScale (const double newDPI, const int newScale) { - if (!options.pseudoHiDPISupport) { - scale = 1; - dpi = baseDPI; - return; - } - - if (scale != newScale || (scale == 1 && dpi != newDPI)) { - // reload all images - scale = newScale; - // HOMBRE: On windows, if scale = 2, the dpi is non significant, i.e. should be considered = 192 ; don't know for linux/macos - dpi = newDPI; - if (scale == 1) { - if (dpi >= baseHiDPI) { - scale = 2; - } - } - else if (scale == 2) { - if (dpi < baseHiDPI) { - dpi *= 2.; - } - } - } + dpi = newDPI; + scale = newScale; } double RTScalable::getDPI () @@ -66,188 +255,24 @@ double RTScalable::getDPI () return dpi; } -double RTScalable::getTweakedDPI () -{ - return dpi * static_cast(fontScale); -} - int RTScalable::getScale () { return scale; } -Gtk::TextDirection RTScalable::getDirection() +double RTScalable::getGlobalScale() { - return direction; + return (RTScalable::getDPI() / RTScalable::baseDPI); } -void RTScalable::init(Gtk::Window *window) +int RTScalable::scalePixelSize(const int pixel_size) { - dpi = 0.; - scale = 0; - - setDPInScale(window->get_screen()->get_resolution(), rtengine::max((int)initialGdkScale, window->get_scale_factor())); - direction = window->get_direction(); + const double s = getGlobalScale(); + return static_cast(pixel_size * s + 0.5); // Rounded scaled size } -void RTScalable::deleteDir(const Glib::ustring& path) +double RTScalable::scalePixelSize(const double pixel_size) { - int error = 0; - try { - - Glib::Dir dir (path); - - // Removing the directory content - for (auto entry = dir.begin(); entry != dir.end(); ++entry) { - error |= g_remove (Glib::build_filename (path, *entry).c_str()); - } - - if (error != 0 && rtengine::settings->verbose) { - std::cerr << "Failed to delete all entries in '" << path << "': " << g_strerror(errno) << std::endl; - } - - } catch (Glib::Error&) { - error = 1; - } - - // Removing the directory itself - if (!error) { - try { - - error = g_remove (path.c_str()); - - } catch (Glib::Error&) {} - } -} - -void RTScalable::cleanup(bool all) -{ - Glib::ustring imagesCacheFolder = Glib::build_filename (options.cacheBaseDir, "svg2png"); - Glib::ustring sDPI = Glib::ustring::compose("%1", (int)getTweakedDPI()); - - try { - Glib::Dir dir(imagesCacheFolder); - - for (Glib::DirIterator entry = dir.begin(); entry != dir.end(); ++entry) { - const Glib::ustring fileName = *entry; - const Glib::ustring filePath = Glib::build_filename(imagesCacheFolder, fileName); - if (fileName == "." || fileName == ".." || !Glib::file_test(filePath, Glib::FILE_TEST_IS_DIR)) { - continue; - } - - if (all || fileName != sDPI) { - deleteDir(filePath); - } - } - } catch (Glib::Exception&) { - } - -} - -/* - * This function try to find the svg file converted to png in a cache and return - * the Cairo::ImageSurface. If it can't find it, it will generate it. - * - * If the provided filename doesn't end with ".svg" (and then we're assuming it's a png file), - * it will try to load that file directly from the source images folder. Scaling is disabled - * for anything else than svg files. - * - * This function will always return a usable value, but it might be a garbage image - * if something went wrong. - */ -Cairo::RefPtr RTScalable::loadImage(const Glib::ustring &fname, double dpi) -{ - // Magic color : #2a7fff - // Dark theme color : #CCCCCC - // Light theme color : #252525 -- not used - - Glib::ustring imagesFolder = Glib::build_filename (argv0, "images"); - Glib::ustring imagesCacheFolder = Glib::build_filename (options.cacheBaseDir, "svg2png"); - - // -------------------- Looking for the cached PNG file first -------------------- - - Glib::ustring imagesCacheFolderDPI = Glib::build_filename (imagesCacheFolder, Glib::ustring::compose("%1", (int)dpi)); - auto path = Glib::build_filename(imagesCacheFolderDPI, fname); - - if (Glib::file_test(path.c_str(), Glib::FILE_TEST_EXISTS)) { - return Cairo::ImageSurface::create_from_png(path); - } else { - - // -------------------- Looking for the PNG file in install directory -------------------- - - path = Glib::build_filename(imagesFolder, fname); - if (Glib::file_test(path.c_str(), Glib::FILE_TEST_EXISTS)) { - return Cairo::ImageSurface::create_from_png(path); - } - } - - // Last chance: looking for the svg file and creating the cached image file - - // -------------------- Creating the cache folder for PNGs -------------------- - - if (!Glib::file_test(imagesCacheFolderDPI.c_str(), Glib::FILE_TEST_EXISTS)) { - auto error = g_mkdir_with_parents (imagesCacheFolderDPI.c_str(), 0777); - if (error != 0) { - std::cerr << "ERROR: Can't create \"" << imagesCacheFolderDPI << "\" cache folder: " << g_strerror(error) << std::endl; - Cairo::RefPtr surf = Cairo::ImageSurface::create(Cairo::FORMAT_RGB24, 10, 10); - return surf; - } - } - - // -------------------- Loading the SVG file -------------------- - - std::string svgFile; - Glib::ustring iconNameSVG; - if (fname.find(".png") != Glib::ustring::npos) { - iconNameSVG = fname.substr(0, fname.length() - 3) + Glib::ustring("svg"); - } - try { - path = Glib::build_filename (imagesFolder, iconNameSVG); - //printf("Trying to get content of %s\n", path.c_str()); - svgFile = Glib::file_get_contents(Glib::build_filename (imagesFolder, iconNameSVG)); - } - catch (Glib::FileError &err) { - std::cerr << "ERROR: " << err.what() << std::endl; - Cairo::RefPtr surf = Cairo::ImageSurface::create(Cairo::FORMAT_RGB24, 10, 10); - return surf; - } - - // -------------------- Updating the the magic color -------------------- - - std::string updatedSVG = std::regex_replace(svgFile, std::regex("#2a7fff"), "#CCCCCC"); - - // -------------------- Creating the rsvg handle -------------------- - - GError **error = nullptr; - RsvgHandle *handle = rsvg_handle_new_from_data((unsigned const char*)updatedSVG.c_str(), updatedSVG.length(), error); - - if (error && !handle) { - std::cerr << "ERROR: Can't use the provided data for \"" << fname << "\" to create a RsvgHandle:" << std::endl - << Glib::ustring((*error)->message) << std::endl; - Cairo::RefPtr surf = Cairo::ImageSurface::create(Cairo::FORMAT_RGB24, 10, 10); - return surf; - } - - // -------------------- Drawing the image to a Cairo::ImageSurface -------------------- - - RsvgDimensionData dim; - rsvg_handle_get_dimensions(handle, &dim); - double r = dpi / baseDPI; - Cairo::RefPtr surf = Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, (int)(dim.width * r + 0.499), (int)(dim.height * r + 0.499)); - Cairo::RefPtr c = Cairo::Context::create(surf); - c->set_source_rgba (0., 0., 0., 0.); - c->set_operator (Cairo::OPERATOR_CLEAR); - c->paint (); - c->set_operator (Cairo::OPERATOR_OVER); - c->scale(r, r); - rsvg_handle_render_cairo(handle, c->cobj()); - rsvg_handle_free(handle); - - // -------------------- Saving the image in cache -------------------- - - surf->write_to_png(Glib::build_filename(imagesCacheFolderDPI, fname)); - - // -------------------- Finished! Pfeeew ! -------------------- - - return surf; + const double s = getGlobalScale(); + return (pixel_size * s); } diff --git a/rtgui/rtscalable.h b/rtgui/rtscalable.h index 28ebf7be8..80312adef 100644 --- a/rtgui/rtscalable.h +++ b/rtgui/rtscalable.h @@ -2,6 +2,7 @@ * This file is part of RawTherapee. * * Copyright (c) 2018 Jean-Christophe FRISCH + * Copyright (c) 2022 Pierre CABRERA * * RawTherapee is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,39 +20,56 @@ #pragma once -#include +#include /** - * @brief A master class for derived class of Gtk::Image in order to handle theme-related icon sets. + * A static class in order to handle Hi-DPI. + * + * About Cairo size convention (for surface): + * Cairo size is expressed in "px" with a 96 DPI (i.e. px per inch) default resolution + * + * About Pango size convention (for font): + * Pango size can be expressed in two different units: + * - Absolute size (i.e. "px") + * - Non-absolute size (i.e. "pt"): The default resolution is 72 DPI (i.e. pt per inch). To + * convert the size to "px", use the following formula: + * "size in px" = "size in pt" * ("device resolution" / 72) + * Notes: + * - By default, size is expressed in non-absolute size (i.e. "pt"). Conversion between absolute + * and non-absolute size is ensured by Pango. + * - On MacOS, font is already scaled by the System library (i.e. "size in px" = "size in pt" * 1.). + * Refer to https://gitlab.gnome.org/GNOME/gtk/-/blob/gtk-3-24/gdk/quartz/gdkscreen-quartz.c + * + * Hi-DPI implementation according to the OS (source: GDK code): + * - Windows: A default DPI of 96 is considered. Current DPI parameter is provided by the OS. + * Scale is calculated by (int)("current DPI" / 96). If Scale is greater than 1, DPI is + * forced to 96. + * - MacOS: Scale is calculated from OS parameters (= "Retina screen width" / "Virtual width"). + * DPI is forced to 72. + * - Linux: DPI is calculated from OS parameter (= 96 * "text-scaling-factor"). Note: "text-scaling-factor" + * is different from "device factor". */ class RTScalable { +private: static double dpi; static int scale; - static Gtk::TextDirection direction; // cached value for text-direction - static void deleteDir(const Glib::ustring& path); + static void getDPInScale(const Gtk::Window* window, double &newDPI, int &newScale); protected: - static void setDPInScale (const double newDPI, const int newScale); - static Cairo::RefPtr loadImage(const Glib::ustring &fname, double dpi); - static Gtk::TextDirection getDirection(); - + static Cairo::RefPtr loadSurfaceFromIcon(const Glib::ustring &icon_name, const Gtk::IconSize iconSize = Gtk::ICON_SIZE_SMALL_TOOLBAR); + static Cairo::RefPtr loadSurfaceFromPNG(const Glib::ustring &fname, const bool is_path = false); + static Cairo::RefPtr loadSurfaceFromSVG(const Glib::ustring &fname, const int width = -1, const int height = -1, const bool is_path = false); public: - -#ifdef __APPLE__ - static constexpr double baseDPI = 72.; - static constexpr double baseHiDPI = 144.; - static constexpr int baseFontSize = 12; -#else - static constexpr double baseDPI = 96.; - static constexpr double baseHiDPI = 192.; - static constexpr int baseFontSize = 9; -#endif - - static void init(Gtk::Window *window); - static void cleanup(bool all = false); - static double getDPI (); - static double getTweakedDPI (); // The returned value is tweaked DPI to adapt to main the font size. Maybe not an ideal solution. - static int getScale (); + static constexpr double pangoDPI = 72.; // Pango default DPI for "pt" size + static constexpr double baseDPI = 96.; // Cairo default DPI + static void init(const Gtk::Window* window); + static void setDPInScale(const Gtk::Window* window); + static void setDPInScale(const double newDPI, const int newScale); + static double getDPI(); + static int getScale(); + static double getGlobalScale(); + static int scalePixelSize(const int pixel_size); + static double scalePixelSize(const double pixel_size); }; diff --git a/rtgui/rtsurface.cc b/rtgui/rtsurface.cc index 62dfe36d5..a4015494a 100644 --- a/rtgui/rtsurface.cc +++ b/rtgui/rtsurface.cc @@ -2,6 +2,7 @@ * This file is part of RawTherapee. * * Copyright (c) 2018 Jean-Christophe FRISCH + * Copyright (c) 2022 Pierre CABRERA * * RawTherapee is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,123 +24,167 @@ #include "options.h" -namespace -{ - -using SurfaceCache = std::map>; - -SurfaceCache surfaceCache; - -} - RTSurface::RTSurface() : surface(new Cairo::ImageSurface(nullptr, false)) { + // Initialize "back" parameters from RTScalable + dpiBack = RTScalable::getDPI(); + scaleBack = RTScalable::getScale(); + + // Initialize other private parameters + type = RTSurfaceType::InvalidType; + name = ""; + icon_size = Gtk::ICON_SIZE_INVALID; } -RTSurface::RTSurface(const Glib::ustring& fileName, const Glib::ustring& rtlFileName) : +RTSurface::RTSurface(const Glib::ustring &icon_name, const Gtk::IconSize iconSize) : RTSurface() { - setImage(fileName, rtlFileName); + // Create surface + surface = RTScalable::loadSurfaceFromIcon(icon_name, iconSize); + + if (surface) { + // Save private parameters + type = RTSurfaceType::IconType; + name = icon_name; + icon_size = iconSize; + } } -void RTSurface::setImage(const Glib::ustring& fileName, const Glib::ustring& rtlFileName) +RTSurface::RTSurface(const Glib::ustring &fname) : + RTSurface() { - const Glib::ustring& imageName = - !rtlFileName.empty() && getDirection() == Gtk::TEXT_DIR_RTL - ? rtlFileName - : fileName; + // Create surface based on file extension + const auto pos = fname.find_last_of('.'); - changeImage (imageName); + if (pos >= 0 && pos < fname.length()) { + const auto fext = fname.substr(pos + 1, fname.length()).lowercase(); + + // Case where fname is a PNG file + if (fext == "png") { + // Create surface from PNG file + surface = RTScalable::loadSurfaceFromPNG(fname); + + if (surface) { + // Save private parameter + type = RTSurfaceType::PNGType; + name = fname; + } + } + + // Case where fname is a SVG file + if (fext == "svg") { + // Create surface from SVG file + surface = RTScalable::loadSurfaceFromSVG(fname); + + if (surface) { + // Save private parameter + type = RTSurfaceType::SVGType; + name = fname; + } + } + } } -int RTSurface::getWidth() const +int RTSurface::getWidth() { - return - surface - ? surface->get_width() - : -1; + int w, h; + + if (hasSurface()) { + switch (type) { + case RTSurfaceType::IconType: + // Get width from Gtk::IconSize + if (!Gtk::IconSize::lookup(icon_size, w, h)) { // Size in invalid + w = h = -1; // Invalid case + } + + return w; + + case RTSurfaceType::PNGType: + // Directly return surface width + return surface->get_width(); + + case RTSurfaceType::SVGType: + // Returned size shall consider the scaling + return (surface->get_width() / RTScalable::getScale()); + + case RTSurfaceType::InvalidType: + default: + // Invalid case + return -1; + } + } else { + // Invalid case + return -1; + } } -int RTSurface::getHeight() const +int RTSurface::getHeight() { - return - surface - ? surface->get_height() - : -1; + int w, h; + + if (hasSurface()) { + switch (type) { + case RTSurfaceType::IconType: + // Get width from Gtk::IconSize + if (!Gtk::IconSize::lookup(icon_size, w, h)) { // Size in invalid + w = h = -1; // Invalid case + } + + return h; + + case RTSurfaceType::PNGType: + // Directly return surface width + return surface->get_height(); + + case RTSurfaceType::SVGType: + // Returned size shall consider the scaling + return (surface->get_height() / RTScalable::getScale()); + + case RTSurfaceType::InvalidType: + default: + // Invalid case + return -1; + } + } else { + // Invalid case + return -1; + } } -bool RTSurface::hasSurface() const +bool RTSurface::hasSurface() { return static_cast(surface); } -Cairo::RefPtr RTSurface::get() const +Cairo::RefPtr RTSurface::get() { - return surface; -} + if (dpiBack != RTScalable::getDPI() || + scaleBack != RTScalable::getScale()) { + updateSurface(); -const Cairo::RefPtr& RTSurface::get() -{ - return surface; -} - -void RTSurface::init() -{ - dpiBack = getDPI(); - scaleBack = getScale(); -} - -void RTSurface::updateImages() -{ - const double tweakedDpi = getTweakedDPI(); - - for (auto& entry : surfaceCache) { - entry.second = loadImage(entry.first, tweakedDpi); - } -} - -void RTSurface::setDPInScale(const double newDPI, const int newScale) -{ - if ( - getScale() != newScale - || ( - getScale() == 1 - && getDPI() != newDPI - ) - ) { - setDPInScale(newDPI, newScale); - dpiBack = getDPI(); - scaleBack = getScale(); - - updateImages(); - } -} - -void RTSurface::changeImage(const Glib::ustring& imageName) -{ - const SurfaceCache::const_iterator iterator = surfaceCache.find(imageName); - - if (iterator != surfaceCache.end()) { - surface = iterator->second; - } else { - surface = loadImage(imageName, getTweakedDPI()); - - // HOMBRE: As of now, GDK_SCALE is forced to 1, so setting the Cairo::ImageSurface scale is not required - // Anyway, this might be of use one day - /* - double x=0., y=0.; - cairo_surface_get_device_scale(surface->cobj(), &x, &y); - if (getScale() == 2) { - cairo_surface_set_device_scale(surface->cobj(), 0.5, 0.5); // Not sure if it should be 0.5 or 2.0 here ! - surface->flush(); + // Save new DPI and scale + dpiBack = RTScalable::getDPI(); + scaleBack = RTScalable::getScale(); } - */ - surfaceCache.emplace(imageName, surface); - } + return surface; } -double RTSurface::dpiBack = 0.; - -int RTSurface::scaleBack = 0; +void RTSurface::updateSurface() +{ + // Update surface based on the scale + switch (type) { + case RTSurfaceType::IconType : + surface = RTScalable::loadSurfaceFromIcon(name, icon_size); + break; + case RTSurfaceType::PNGType : + surface = RTScalable::loadSurfaceFromPNG(name); + break; + case RTSurfaceType::SVGType : + surface = RTScalable::loadSurfaceFromSVG(name); + break; + default : + break; + } +} diff --git a/rtgui/rtsurface.h b/rtgui/rtsurface.h index 1944cc2dc..515b079c7 100644 --- a/rtgui/rtsurface.h +++ b/rtgui/rtsurface.h @@ -2,6 +2,7 @@ * This file is part of RawTherapee. * * Copyright (c) 2018 Jean-Christophe FRISCH + * Copyright (c) 2022 Pierre CABRERA * * RawTherapee is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,37 +19,38 @@ */ #pragma once -#include - #include "rtscalable.h" /** - * @brief A derived class of Gtk::Image in order to handle theme-related icon sets. + * @brief A custom class in order to handle Hi-DPI surface. */ -class RTSurface : - public RTScalable +class RTSurface final : public RTScalable { public: - RTSurface(); - explicit RTSurface(const Glib::ustring& fileName, const Glib::ustring& rtlFileName = {}); - - void setImage(const Glib::ustring& fileName, const Glib::ustring& rtlFileName = {}); - - int getWidth() const; - int getHeight() const; - bool hasSurface() const; - - Cairo::RefPtr get() const; - const Cairo::RefPtr& get(); - - static void init(); - static void updateImages(); - static void setDPInScale(double newDPI, int newScale); + enum class RTSurfaceType { + InvalidType, + IconType, + PNGType, + SVGType + }; private: - void changeImage(const Glib::ustring& imageName); - - static double dpiBack; // used to keep track of master dpi change - static int scaleBack; // used to keep track of master scale change + double dpiBack; // Used to identify dpi change + int scaleBack; // Used to identify scale change + RTSurfaceType type; + Glib::ustring name; + Gtk::IconSize icon_size; Cairo::RefPtr surface; + +public: + RTSurface(); + explicit RTSurface(const Glib::ustring &icon_name, const Gtk::IconSize iconSize); + explicit RTSurface(const Glib::ustring &fname); + + int getWidth(); + int getHeight(); + bool hasSurface(); + + Cairo::RefPtr get(); + void updateSurface(); }; diff --git a/rtgui/rtwindow.cc b/rtgui/rtwindow.cc index d588d6aa5..b95625a80 100755 --- a/rtgui/rtwindow.cc +++ b/rtgui/rtwindow.cc @@ -34,12 +34,9 @@ #include "filepanel.h" #include "filmsimulation.h" -float fontScale = 1.f; Glib::RefPtr cssForced; Glib::RefPtr cssRT; -extern unsigned char initialGdkScale; - #if defined(__APPLE__) static gboolean osx_should_quit_cb (GtkosxApplication *app, gpointer data) @@ -104,10 +101,6 @@ RTWindow::RTWindow () , epanel (nullptr) , fpanel (nullptr) { - - if (options.is_new_version()) { - RTImage::cleanup(true); - } cacheMgr->init (); ProfilePanel::init (this); @@ -116,44 +109,20 @@ RTWindow::RTWindow () Glib::RefPtr screen = Gdk::Screen::get_default(); if (screen) { + // Setting default theme and icon theme (bases for custom themes) Gtk::Settings::get_for_screen (screen)->property_gtk_theme_name() = "Adwaita"; Gtk::Settings::get_for_screen (screen)->property_gtk_application_prefer_dark_theme() = true; + Gtk::Settings::get_for_screen (screen)->property_gtk_icon_theme_name() = "rawtherapee"; - Glib::RefPtr regex = Glib::Regex::create (THEMEREGEXSTR, Glib::RegexCompileFlags::REGEX_CASELESS); - Glib::ustring filename; - Glib::MatchInfo mInfo; - bool match = regex->match(options.theme + ".css", mInfo); - if (match) { - // save old theme (name + version) - Glib::ustring initialTheme(options.theme); + // Initialize RTScalable for Hi-DPI support + RTScalable::init(this); - // update version - auto pos = options.theme.find("-GTK3-"); - Glib::ustring themeRootName(options.theme.substr(0, pos)); - if (GTK_MINOR_VERSION < 20) { - options.theme = themeRootName + "-GTK3-_19"; - } else { - options.theme = themeRootName + "-GTK3-20_"; - } - // check if this version exist - if (!Glib::file_test(Glib::build_filename(argv0, "themes", options.theme + ".css"), Glib::FILE_TEST_EXISTS)) { - // set back old theme version if the actual one doesn't exist yet - options.theme = initialTheme; - } - } - filename = Glib::build_filename(argv0, "themes", options.theme + ".css"); - - if (!match || !Glib::file_test(filename, Glib::FILE_TEST_EXISTS)) { - options.theme = "RawTherapee-GTK"; - - // We're not testing GTK_MAJOR_VERSION == 3 here, since this branch requires Gtk3 only - if (GTK_MINOR_VERSION < 20) { - options.theme = options.theme + "3-_19"; - } else { - options.theme = options.theme + "3-20_"; - } - - filename = Glib::build_filename (argv0, "themes", options.theme + ".css"); + // Look for theme and set it + // Check if the current theme name in options exists, otherwise set it to default one (i.e. "RawTherapee.css") + auto filename = Glib::build_filename(argv0, "themes", options.theme + ".css"); + if (!Glib::file_test(filename, Glib::FILE_TEST_EXISTS)) { + options.theme = "RawTherapee"; + filename = Glib::build_filename(argv0, "themes", options.theme + ".css"); } cssRT = Gtk::CssProvider::create(); @@ -169,89 +138,62 @@ RTWindow::RTWindow () // Set the font face and size Glib::ustring css; - if (options.fontFamily != "default") { - //GTK318 - #if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION < 20 - css = Glib::ustring::compose ("* { font-family: %1; font-size: %2px}", options.fontFamily, options.fontSize * (int)initialGdkScale); - #else - css = Glib::ustring::compose ("* { font-family: %1; font-size: %2pt}", options.fontFamily, options.fontSize * (int)initialGdkScale); - #endif - //GTK318 - if (options.pseudoHiDPISupport) { - fontScale = options.fontSize / (float)RTScalable::baseFontSize; - } - if (rtengine::settings->verbose) { - printf("\"Non-Default\" font size(%d) * scale(%d) / fontScale(%.3f)\n", options.fontSize, (int)initialGdkScale, static_cast(fontScale)); - } - } else { - Glib::RefPtr style = Gtk::StyleContext::create(); - Pango::FontDescription pfd = style->get_font(Gtk::STATE_FLAG_NORMAL); - if (pfd.get_set_fields() & Pango::FONT_MASK_SIZE) { - int pt; - int fontSize = pfd.get_size(); - bool isPix = pfd.get_size_is_absolute(); - int resolution = (int)style->get_screen()->get_resolution(); - if (isPix) { - // HOMBRE: guessing here... - // if resolution is lower than baseHiDPI, we're supposing that it's already expressed in a scale==1 scenario - if (resolution >= int(RTScalable::baseHiDPI)) { - // converting the resolution to a scale==1 scenario - resolution /= 2; - } - // 1pt = 1/72in @ 96 ppi - // HOMBRE: If the font unit is px, is it already scaled up to match the resolution ? - // px >inch >pt >"scaled pt" - pt = (int)(double(fontSize) / RTScalable::baseDPI * 72. * (96. / (double)resolution) + 0.49); - } else { - pt = fontSize / Pango::SCALE; - } - if (options.pseudoHiDPISupport) { - fontScale = (float)pt / (float)RTScalable::baseFontSize; - } - if ((int)initialGdkScale > 1 || pt != RTScalable::baseFontSize) { - css = Glib::ustring::compose ("* { font-size: %1pt}", pt * (int)initialGdkScale); - if (rtengine::settings->verbose) { - printf("\"Default\" font size(%d) * scale(%d) / fontScale(%.3f)\n", pt, (int)initialGdkScale, static_cast(fontScale)); - } - } + + if (options.fontFamily != "default") { // Set font and size according to user choice + // Set font and size in css from options + css = Glib::ustring::compose ("* { font-family: %1; font-size: %2pt}", + options.fontFamily, + options.fontSize); // Font size is in "pt" in options + } else { // Set font and size according to default values + // Retrieve default style values from Gtk::Settings + const auto defaultSettings = Gtk::Settings::get_default(); + Glib::ustring defaultFont; + defaultSettings->get_property("gtk-font-name", defaultFont); + const Pango::FontDescription defaultFontDesc = Pango::FontDescription(defaultFont); + + // Set font and size in css + auto defaultFontFamily = defaultFontDesc.get_family(); + const int defaultFontSize = defaultFontDesc.get_size() / Pango::SCALE; // Font size is managed in ()"pt" * Pango::SCALE) by Pango (also refer to notes in rtscalable.h) +#if defined(__APPLE__) + // Default MacOS font (i.e. "") is not correctly handled + // in Gtk css. Replacing it by "-apple-system" to avoid this + if (defaultFontFamily == ".AppleSystemUIFont") { + defaultFontFamily = "-apple-system"; } +#endif + css = Glib::ustring::compose ("* { font-family: %1; font-size: %2pt}", + defaultFontFamily, + defaultFontSize); } + + // Load custom CSS for font if (!css.empty()) { if (rtengine::settings->verbose) { printf("CSS:\n%s\n\n", css.c_str()); } + try { cssForced = Gtk::CssProvider::create(); cssForced->load_from_data (css); Gtk::StyleContext::add_provider_for_screen (screen, cssForced, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); - } catch (Glib::Error &err) { printf ("Error: \"%s\"\n", err.what().c_str()); } catch (...) { - printf ("Error: Can't find the font named \"%s\"\n", options.fontFamily.c_str()); + printf ("Error: Can't load the desired font correctly\n"); } } } // ------- end loading theme files - RTScalable::init(this); - RTSurface::init(); - RTImage::init(); - WhiteBalance::init(); - MyExpander::init(); + // Initialize FileBrowserEntry icons + FileBrowserEntry::init(); -#ifndef WIN32 - const std::vector> appIcons = { - RTImage::createPixbufFromFile("rawtherapee-logo-16.png"), - RTImage::createPixbufFromFile("rawtherapee-logo-24.png"), - RTImage::createPixbufFromFile("rawtherapee-logo-48.png"), - RTImage::createPixbufFromFile("rawtherapee-logo-128.png"), - RTImage::createPixbufFromFile("rawtherapee-logo-256.png") - }; + // For UNIX system, set app icon +#ifndef _WIN32 try { - set_default_icon_list(appIcons); + set_default_icon_name("rawtherapee"); } catch (Glib::Exception& ex) { printf ("%s\n", ex.what().c_str()); } @@ -324,11 +266,11 @@ RTWindow::RTWindow () if (options.mainNBVertical) { mainNB->set_tab_pos (Gtk::POS_LEFT); fpl->set_angle (90); - RTImage* folderIcon = Gtk::manage (new RTImage ("folder-closed.png")); + RTImage* folderIcon = Gtk::manage (new RTImage ("folder-closed", Gtk::ICON_SIZE_LARGE_TOOLBAR)); fpanelLabelGrid->attach_next_to (*folderIcon, Gtk::POS_TOP, 1, 1); fpanelLabelGrid->attach_next_to (*fpl, Gtk::POS_TOP, 1, 1); } else { - RTImage* folderIcon = Gtk::manage (new RTImage ("folder-closed.png")); + RTImage* folderIcon = Gtk::manage (new RTImage ("folder-closed", Gtk::ICON_SIZE_LARGE_TOOLBAR)); fpanelLabelGrid->attach_next_to (*folderIcon, Gtk::POS_RIGHT, 1, 1); fpanelLabelGrid->attach_next_to (*fpl, Gtk::POS_RIGHT, 1, 1); } @@ -361,27 +303,27 @@ RTWindow::RTWindow () //mainBox->pack_start (*mainNB); // filling bottom box - iFullscreen = new RTImage ("fullscreen-enter.png"); - iFullscreen_exit = new RTImage ("fullscreen-leave.png"); + iFullscreen = new RTImage ("fullscreen-enter", Gtk::ICON_SIZE_LARGE_TOOLBAR); + iFullscreen_exit = new RTImage ("fullscreen-leave", Gtk::ICON_SIZE_LARGE_TOOLBAR); Gtk::Button* iccProfileCreator = Gtk::manage (new Gtk::Button ()); setExpandAlignProperties (iccProfileCreator, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); iccProfileCreator->set_relief(Gtk::RELIEF_NONE); - iccProfileCreator->set_image (*Gtk::manage (new RTImage ("gamut-plus.png"))); + iccProfileCreator->set_image (*Gtk::manage (new RTImage ("gamut-plus", Gtk::ICON_SIZE_LARGE_TOOLBAR))); iccProfileCreator->set_tooltip_markup (M ("MAIN_BUTTON_ICCPROFCREATOR")); iccProfileCreator->signal_clicked().connect ( sigc::mem_fun (*this, &RTWindow::showICCProfileCreator) ); Gtk::Button* helpBtn = Gtk::manage (new Gtk::Button ()); setExpandAlignProperties (helpBtn, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); helpBtn->set_relief(Gtk::RELIEF_NONE); - helpBtn->set_image (*Gtk::manage (new RTImage ("questionmark.png"))); + helpBtn->set_image (*Gtk::manage (new RTImage("questionmark", Gtk::ICON_SIZE_LARGE_TOOLBAR))); helpBtn->set_tooltip_markup (M ("GENERAL_HELP")); helpBtn->signal_clicked().connect (sigc::mem_fun (*this, &RTWindow::showRawPedia)); Gtk::Button* preferences = Gtk::manage (new Gtk::Button ()); setExpandAlignProperties (preferences, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); preferences->set_relief(Gtk::RELIEF_NONE); - preferences->set_image (*Gtk::manage (new RTImage ("preferences.png"))); + preferences->set_image (*Gtk::manage (new RTImage ("preferences", Gtk::ICON_SIZE_LARGE_TOOLBAR))); preferences->set_tooltip_markup (M ("MAIN_BUTTON_PREFERENCES")); preferences->signal_clicked().connect ( sigc::mem_fun (*this, &RTWindow::showPreferences) ); @@ -454,7 +396,6 @@ RTWindow::~RTWindow() delete fpanel; delete iFullscreen; delete iFullscreen_exit; - RTImage::cleanup(); } void RTWindow::on_realize () @@ -529,8 +470,8 @@ bool RTWindow::on_configure_event (GdkEventConfigure* event) get_position (options.windowX, options.windowY); } - RTImage::setDPInScale(RTScalable::getDPI(), RTScalable::getScale()); // will update the RTImage on scale/resolution change - RTSurface::setDPInScale(RTScalable::getDPI(), RTScalable::getScale()); // will update the RTSurface on scale/resolution change + // With update the RTScalable on scale or resolution change + RTScalable::setDPInScale(this); return Gtk::Widget::on_configure_event (event); } @@ -541,7 +482,7 @@ bool RTWindow::on_window_state_event (GdkEventWindowState* event) options.windowMaximized = event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED; is_minimized = event->new_window_state & GDK_WINDOW_STATE_ICONIFIED; is_fullscreen = event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN; - + return Gtk::Widget::on_window_state_event (event); } @@ -588,11 +529,12 @@ 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 ()); titleGrid->set_tooltip_markup (name); - RTImage *closebimg = Gtk::manage (new RTImage ("cancel-small.png")); + RTImage *closebimg = Gtk::manage (new RTImage ("cancel-small", Gtk::ICON_SIZE_LARGE_TOOLBAR)); Gtk::Button* closeb = Gtk::manage (new Gtk::Button ()); closeb->set_name ("CloseButton"); closeb->add (*closebimg); @@ -601,7 +543,7 @@ void RTWindow::addEditorPanel (EditorPanel* ep, const std::string &name) closeb->signal_clicked().connect ( sigc::bind (sigc::mem_fun (*this, &RTWindow::remEditorPanel), ep)); if (!EditWindow::isMultiDisplayEnabled()) { - titleGrid->attach_next_to (*Gtk::manage (new RTImage ("aperture.png")), Gtk::POS_RIGHT, 1, 1); + titleGrid->attach_next_to (*Gtk::manage (new RTImage ("aperture", Gtk::ICON_SIZE_LARGE_TOOLBAR)), Gtk::POS_RIGHT, 1, 1); } titleGrid->attach_next_to (*Gtk::manage (new Gtk::Label (Glib::path_get_basename (name))), Gtk::POS_RIGHT, 1, 1); titleGrid->attach_next_to (*closeb, Gtk::POS_RIGHT, 1, 1); @@ -636,6 +578,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); @@ -855,12 +798,8 @@ bool RTWindow::on_delete_event (GdkEventAny* event) } cacheMgr->closeCache (); // also makes cleanup if too large - WhiteBalance::cleanup(); ProfilePanel::cleanup(); ClutComboBox::cleanup(); - MyExpander::cleanup(); - mainWindowCursorManager.cleanup(); - editWindowCursorManager.cleanup(); BatchQueueEntry::savedAsIcon.reset(); FileBrowserEntry::editedIcon.reset(); FileBrowserEntry::recentlySavedIcon.reset(); @@ -997,7 +936,7 @@ void RTWindow::error(const Glib::ustring& descr) void RTWindow::toggle_fullscreen () { onConfEventConn.block(true); // Avoid getting size and position while window is getting fullscreen - + if (is_fullscreen) { unfullscreen(); @@ -1013,7 +952,7 @@ void RTWindow::toggle_fullscreen () btn_fullscreen->set_image (*iFullscreen_exit); } } - + onConfEventConn.block(false); } @@ -1059,6 +998,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) @@ -1149,7 +1097,7 @@ bool RTWindow::splashClosed (GdkEventAny* event) void RTWindow::setWindowSize () { onConfEventConn.block(true); // Avoid getting size and position while window is being moved, maximized, ... - + Gdk::Rectangle lMonitorRect; const auto display = get_screen()->get_display(); display->get_monitor (std::min (options.windowMonitor, display->get_n_monitors() - 1))->get_geometry(lMonitorRect); @@ -1188,7 +1136,7 @@ void RTWindow::setWindowSize () unmaximize(); resize (options.windowWidth, options.windowHeight); } - + onConfEventConn.block(false); } @@ -1196,7 +1144,7 @@ void RTWindow::get_position(int& x, int& y) const { // Call native function Gtk::Window::get_position (x, y); - + // Retrieve display (concatenation of all monitors) size int width = 0, height = 0; const auto display = get_screen()->get_display(); @@ -1281,7 +1229,7 @@ void RTWindow::createSetmEditor() el->set_angle (90); } - editorLabelGrid->attach_next_to (*Gtk::manage (new RTImage ("aperture.png")), pos, 1, 1); + editorLabelGrid->attach_next_to (*Gtk::manage (new RTImage ("aperture", Gtk::ICON_SIZE_LARGE_TOOLBAR)), pos, 1, 1); editorLabelGrid->attach_next_to (*el, pos, 1, 1); editorLabelGrid->set_tooltip_markup (M ("MAIN_FRAME_EDITOR_TOOLTIP")); 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..504c209f7 100644 --- a/rtgui/shcselector.cc +++ b/rtgui/shcselector.cc @@ -20,20 +20,18 @@ #include #include "shcselector.h" + #include "multilangmgr.h" #include "mycurve.h" #include "rtscalable.h" SHCSelector::SHCSelector() : movingPosition(-1), tmpX(0.0), tmpPos(0.0), wslider(0.0), cl(nullptr), coloredBar(RTO_Left2Right) { - - int s = RTScalable::getScale(); - positions[0] = defaults[0] = 0.25; positions[1] = defaults[1] = 0.5; positions[2] = defaults[2] = 0.75; - leftMargin = (RADIUS - 1.5) * s; - rightMargin = (RADIUS - 1.5) * s; + leftMargin = static_cast(RTScalable::scalePixelSize(RADIUS - 1.5)); + rightMargin = static_cast(RTScalable::scalePixelSize(RADIUS - 1.5)); Glib::RefPtr style = get_style_context(); style->add_class("drawingarea"); @@ -62,14 +60,13 @@ void SHCSelector::get_preferred_height_vfunc (int &minimum_height, int &natural_ void SHCSelector::get_preferred_width_vfunc (int &minimum_width, int &natural_width) const { - int s = RTScalable::getScale(); - minimum_width = 100 * s; - natural_width = 150 * s; + minimum_width = RTScalable::scalePixelSize(100); + natural_width = RTScalable::scalePixelSize(150); } void SHCSelector::get_preferred_height_for_width_vfunc (int width, int &minimum_height, int &natural_height) const { - natural_height = minimum_height = 14 * RTScalable::getScale(); + natural_height = minimum_height = RTScalable::scalePixelSize(14); } void SHCSelector::get_preferred_width_for_height_vfunc (int height, int &minimum_width, int &natural_width) const @@ -116,64 +113,46 @@ void SHCSelector::on_realize() add_events(Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK); } -void SHCSelector::updateBackBuffer() +void SHCSelector::updateDrawingArea (const ::Cairo::RefPtr< Cairo::Context> &cr) { - if (!get_realized() || !isDirty() || !get_width() || !get_height()) { + if (!get_realized() || !get_width() || !get_height()) { return; } - // This will create or update the size of the BackBuffer::surface - setDrawRectangle(Cairo::FORMAT_ARGB32, 0, 0, get_width(), get_height(), true); - - if (!surface) { - return; - } - - Cairo::RefPtr cr = Cairo::Context::create(surface); Glib::RefPtr style = get_style_context(); - cr->set_source_rgba (0., 0., 0., 0.); - cr->set_operator (Cairo::OPERATOR_CLEAR); - cr->paint (); + // Setup drawing cr->set_operator (Cairo::OPERATOR_OVER); - int w = get_width () - leftMargin - rightMargin; - int h = get_height (); + // Get drawing area size + const int w = get_width () - leftMargin - rightMargin; + const int h = get_height (); - double s = RTScalable::getScale(); + // Compute slider parameters + wslider = static_cast(std::max(h / 5, 10)); + const double hwslider = wslider / 2.; - wslider = (double)std::max(h / 5, 10) * s; - double hwslider = wslider / 2.; - - // clear bg - cr->set_source_rgba (0., 0., 0., 0.); - cr->set_operator (Cairo::OPERATOR_CLEAR); - cr->paint (); - cr->set_operator (Cairo::OPERATOR_OVER); - - - // set the box's colors - cr->set_line_width (1.0 * s); + // Set the box's colors + cr->set_line_width (1.0); cr->set_antialias(Cairo::ANTIALIAS_SUBPIXEL); cr->set_line_cap(Cairo::LINE_CAP_BUTT); - int coloredBarHeight = (int)((double)h * 5.5 / 7. + 0.5); + int coloredBarHeight = static_cast(static_cast(h) * 5.5 / 7. + 0.5); if (is_sensitive() && coloredBar.canGetColors()) { - // gradient background - - // this will eventually create/update the off-screen BackBuffer - coloredBar.setDrawRectangle(leftMargin + 1 * (int)s, 1 * (int)s, w - 2 * (int)s, coloredBarHeight - 2 * (int)s); - // that we're displaying here - coloredBar.expose(*this, cr); + // Gradient background + coloredBar.setColoredBarSize(leftMargin + 1, 1, w - 2, coloredBarHeight - 2); + coloredBar.updateColoredBar(cr); } else { - style->render_background(cr, leftMargin + 1 * (int)s, 1 * (int)s, w - 2 * (int)s, coloredBarHeight - 2 * (int)s); + // Style background + style->render_background(cr, leftMargin + 1, 1, w - 2, coloredBarHeight - 2); } - // draw the box's borders + + // Draw the box's borders style->render_frame(cr, leftMargin, 0, w, coloredBarHeight); - // draw sliders + // Draw sliders for (int i = 0; i < 3; i++) { if (i == movingPosition) { style->set_state(Gtk::STATE_FLAG_ACTIVE); @@ -184,11 +163,16 @@ void SHCSelector::updateBackBuffer() style->set_state(Gtk::STATE_FLAG_NORMAL); } - style->render_slider(cr, (double)leftMargin + 1. * s + ((double)w - 2. * s) * positions[i] - (double)hwslider, (double)vb * s, wslider, (double)h - (double)vb * s, Gtk::ORIENTATION_VERTICAL); + style->render_slider(cr, + static_cast(leftMargin) + 1. + (static_cast(w) - 2.) * positions[i] - static_cast(hwslider), + static_cast(vb), + wslider, + static_cast(h) - static_cast(vb), + Gtk::ORIENTATION_VERTICAL); style->set_state(Gtk::STATE_FLAG_NORMAL); } - // draw text for the slider that is being moved + // Draw text for the slider that is being moved if (movingPosition >= 0) { int i = movingPosition; int offset; @@ -197,24 +181,27 @@ void SHCSelector::updateBackBuffer() Glib::RefPtr context = get_pango_context () ; Pango::FontDescription fontd(get_style_context()->get_font()); - // update font + // Update font fontd.set_weight (Pango::WEIGHT_NORMAL); - fontd.set_absolute_size((double)h * 0.8 * (double)Pango::SCALE); + const double fontSize = static_cast(h) * 0.8; // px + // Absolute size is defined in "Pango units" and shall be multiplied by + // Pango::SCALE from "px": + fontd.set_absolute_size (fontSize * static_cast(Pango::SCALE)); context->set_font_description (fontd); Glib::RefPtr layout = create_pango_layout(Glib::ustring::format(std::setprecision(2), positions[i])); layout->get_pixel_size(layout_width, layout_height); - offset = positions[i] > 0.5 ? -layout_width - 1 * (int)s - hwslider : 1 * (int)s + hwslider; + offset = positions[i] > 0.5 ? -layout_width - 1 - hwslider : 1 + hwslider; cr->set_source_rgb (0., 0., 0.); - cr->set_line_width(3. * s); + cr->set_line_width(3.); cr->set_line_join(Cairo::LINE_JOIN_ROUND); cr->set_line_cap(Cairo::LINE_CAP_ROUND); - cr->move_to ((double)leftMargin + (double)w * positions[i] + (double)offset, 0.); + cr->move_to (static_cast(leftMargin) + static_cast(w) * positions[i] + static_cast(offset), 0.); layout->add_to_cairo_context (cr); cr->stroke_preserve(); - cr->set_line_width(0.5 * s); + cr->set_line_width(0.5); cr->set_source_rgb (1., 1., 1.); cr->fill (); } @@ -222,17 +209,9 @@ void SHCSelector::updateBackBuffer() bool SHCSelector::on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr) { - - // on_realize & updateBackBuffer have to be called before - if (get_realized() && get_width() && get_height()) { - if (isDirty()) { - updateBackBuffer(); - } - - if (surface) { - copySurface(cr); - } - } + // Draw drawing area + // Note: As drawing area surface is updated inside on_draw function, hidpi is automatically supported + updateDrawingArea(cr); return true; } @@ -241,14 +220,12 @@ bool SHCSelector::on_button_press_event (GdkEventButton* event) { // check if a slider is under the cursor - double w = double(get_width () - leftMargin - rightMargin); + const double w = static_cast(get_width () - leftMargin - rightMargin); movingPosition = -1; - double s = RTScalable::getScale(); - for (int i = 0; i < 3; i++) { - double currPos = double(leftMargin) + 1. * s + (w - 2. * s) * positions[i]; - double hwslider = wslider / 2.; + const double currPos = static_cast(leftMargin) + 1. + (w - 2.) * positions[i]; + const double hwslider = wslider / 2.; if (event->x >= currPos - hwslider && event->x <= currPos + hwslider) { movingPosition = i; tmpX = event->x; @@ -290,8 +267,7 @@ bool SHCSelector::on_motion_notify_event (GdkEventMotion* event) { if (movingPosition >= 0) { - double s = RTScalable::getScale(); - double innerw = double(get_width () - leftMargin - rightMargin) - 2. * s; + const double innerw = static_cast(get_width () - leftMargin - rightMargin) - 2.; positions[movingPosition] = tmpPos + (event->x - tmpX) / innerw; if (positions[movingPosition] < 0) { @@ -314,7 +290,6 @@ bool SHCSelector::on_motion_notify_event (GdkEventMotion* event) cl->shcChanged (); } - setDirty(true); queue_draw (); } @@ -324,7 +299,6 @@ bool SHCSelector::on_motion_notify_event (GdkEventMotion* event) void SHCSelector::styleChanged (const Glib::RefPtr& style) { - setDirty(true); queue_draw (); } @@ -338,7 +312,6 @@ bool SHCSelector::reset () // : movingPosition(-1), cl(NULL) { positions[0] = defaults[0]; positions[1] = defaults[1]; positions[2] = defaults[2]; - setDirty(true); queue_draw (); return true; } @@ -348,7 +321,6 @@ bool SHCSelector::reset () // : movingPosition(-1), cl(NULL) { void SHCSelector::refresh() { - setDirty(true); Glib::RefPtr win = get_window(); if (win) { win->invalidate(true); diff --git a/rtgui/shcselector.h b/rtgui/shcselector.h index 2422fdf56..bac1920fe 100644 --- a/rtgui/shcselector.h +++ b/rtgui/shcselector.h @@ -29,7 +29,7 @@ public: virtual void shcChanged() = 0; }; -class SHCSelector final : public Gtk::DrawingArea, BackBuffer +class SHCSelector final : public Gtk::DrawingArea { protected: @@ -61,7 +61,7 @@ protected: bool on_button_press_event (GdkEventButton* event) override; bool on_button_release_event (GdkEventButton* event) override; bool on_motion_notify_event (GdkEventMotion* event) override; - void updateBackBuffer(); + void updateDrawingArea (const ::Cairo::RefPtr< Cairo::Context> &cr); public: 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/splash.cc b/rtgui/splash.cc index 42b276a2e..0015c4864 100644 --- a/rtgui/splash.cc +++ b/rtgui/splash.cc @@ -21,48 +21,51 @@ #include #include "multilangmgr.h" -#include "rtimage.h" extern Glib::ustring creditsPath; extern Glib::ustring licensePath; extern Glib::ustring versionString; -SplashImage::SplashImage () : surface(RTImage::createImgSurfFromFile("splash.png")) +SplashImage::SplashImage () : surface(new RTSurface("splash.svg")) { } bool SplashImage::on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr) { + if (surface->hasSurface()) { + cr->set_source(surface->get(), 0., 0.); + cr->rectangle(0, 0, surface->getWidth(), surface->getHeight()); + cr->fill(); - cr->set_source(surface, 0., 0.); - cr->rectangle(0, 0, surface->get_width(), surface->get_height()); - cr->fill(); + Cairo::FontOptions cfo; + cfo.set_antialias (Cairo::ANTIALIAS_SUBPIXEL); + Glib::RefPtr context = get_pango_context (); + context->set_cairo_font_options (cfo); + Pango::FontDescription fontd = get_style_context()->get_font(); + fontd.set_weight (Pango::WEIGHT_LIGHT); + const int fontSize = 12; // pt + // Non-absolute size is defined in "Pango units" and shall be multiplied by + // Pango::SCALE from "pt": + fontd.set_size(fontSize * Pango::SCALE); + context->set_font_description (fontd); - Cairo::FontOptions cfo; - cfo.set_antialias (Cairo::ANTIALIAS_SUBPIXEL); - Glib::RefPtr context = get_pango_context (); - context->set_cairo_font_options (cfo); - Pango::FontDescription fontd = context->get_font_description (); - fontd.set_weight (Pango::WEIGHT_LIGHT); - fontd.set_absolute_size (12 * Pango::SCALE); - context->set_font_description (fontd); + int w, h; + Glib::ustring versionStr(versionString); - int w, h; - Glib::ustring versionStr(versionString); - - version = create_pango_layout (versionStr); - version->set_text(versionStr); - version->get_pixel_size (w, h); - cr->set_source_rgb (0., 0., 0.); - cr->set_line_width(3.); - cr->set_line_join(Cairo::LINE_JOIN_ROUND); - cr->move_to (surface->get_width() - w - 32, surface->get_height() - h - 20); - version->add_to_cairo_context (cr); - cr->stroke_preserve(); - cr->set_source_rgb (1., 1., 1.); - cr->set_line_width(0.5); - cr->stroke_preserve(); - cr->fill(); + version = create_pango_layout (versionStr); + version->set_text(versionStr); + version->get_pixel_size (w, h); + cr->set_source_rgb (0., 0., 0.); + cr->set_line_width(3.); + cr->set_line_join(Cairo::LINE_JOIN_ROUND); + cr->move_to (surface->getWidth() - w - 32, surface->getHeight() - h - 20); + version->add_to_cairo_context (cr); + cr->stroke_preserve(); + cr->set_source_rgb (1., 1., 1.); + cr->set_line_width(0.5); + cr->stroke_preserve(); + cr->fill(); + } return true; } @@ -74,12 +77,12 @@ Gtk::SizeRequestMode SplashImage::get_request_mode_vfunc () const void SplashImage::get_preferred_height_vfunc (int &minimum_height, int &natural_height) const { - minimum_height = natural_height = surface ? surface->get_height() : 100 * RTScalable::getScale(); + minimum_height = natural_height = surface ? surface->getHeight() : RTScalable::scalePixelSize(100); } void SplashImage::get_preferred_width_vfunc (int &minimum_width, int &natural_width) const { - minimum_width = natural_width = surface ? surface->get_width() : 100 * RTScalable::getScale(); + minimum_width = natural_width = surface ? surface->getWidth() : RTScalable::scalePixelSize(100); } void SplashImage::get_preferred_height_for_width_vfunc (int width, int &minimum_height, int &natural_height) const @@ -111,6 +114,8 @@ Splash::Splash (Gtk::Window& parent) : Gtk::Dialog(M("GENERAL_ABOUT"), parent, t // Tab 1: the image splashImage = Gtk::manage(new SplashImage ()); + splashImage->set_halign(Gtk::ALIGN_CENTER); + splashImage->set_valign(Gtk::ALIGN_CENTER); nb->append_page (*splashImage, M("ABOUT_TAB_SPLASH")); splashImage->show (); @@ -242,7 +247,6 @@ Splash::Splash (Gtk::Window& parent) : Gtk::Dialog(M("GENERAL_ABOUT"), parent, t } } - set_position (Gtk::WIN_POS_CENTER); //add_events(Gdk::BUTTON_RELEASE_MASK); set_resizable (true); diff --git a/rtgui/splash.h b/rtgui/splash.h index bc63cef91..6abfe91c7 100644 --- a/rtgui/splash.h +++ b/rtgui/splash.h @@ -19,13 +19,14 @@ #pragma once #include +#include "rtsurface.h" class SplashImage final : public Gtk::DrawingArea { private: - Cairo::RefPtr surface; + std::shared_ptr surface; Glib::RefPtr version; public: diff --git a/rtgui/spot.cc b/rtgui/spot.cc index 46e646945..43fdb632d 100644 --- a/rtgui/spot.cc +++ b/rtgui/spot.cc @@ -60,18 +60,18 @@ Spot::Spot() : draggedSide(DraggedSide::NONE), lastObject(-1), activeSpot(-1), - sourceIcon("spot-normal.png", "spot-active.png", "spot-prelight.png", "", "", Geometry::DP_CENTERCENTER), + sourceIcon("spot-normal", "spot-active", "spot-prelight", "", "", Geometry::DP_CENTERCENTER), editedCheckBox(nullptr) { countLabel = Gtk::manage (new Gtk::Label (Glib::ustring::compose (M ("TP_SPOT_COUNTLABEL"), 0))); edit = Gtk::manage (new Gtk::ToggleButton()); - edit->add (*Gtk::manage (new RTImage ("edit-point.png"))); + edit->add (*Gtk::manage (new RTImage ("edit-point"))); editConn = edit->signal_toggled().connect ( sigc::mem_fun (*this, &Spot::editToggled) ); edit->set_tooltip_text(M("TP_SPOT_HINT")); reset = Gtk::manage (new Gtk::Button ()); - reset->add (*Gtk::manage (new RTImage ("undo-small.png"))); + reset->add (*Gtk::manage (new RTImage ("undo-small"))); reset->set_relief (Gtk::RELIEF_NONE); reset->set_border_width (0); reset->signal_clicked().connect ( sigc::mem_fun (*this, &Spot::resetPressed) ); @@ -85,7 +85,7 @@ Spot::Spot() : labelBox->pack_end (*reset, false, false, 0); labelBox->pack_end (*spotSize, false, false, 0); pack_start (*labelBox); - + sourceIcon.datum = Geometry::IMAGE; sourceIcon.setActive (false); sourceIcon.state = Geometry::ACTIVE; @@ -346,12 +346,12 @@ void Spot::createGeometry () EditSubscriber::mouseOverGeometry.at (i++) = &sourceFeatherCircle; // MO_OBJECT_COUNT + 5 // recreate all spots geometry - Cairo::RefPtr normalImg = sourceIcon.getNormalImg(); - Cairo::RefPtr prelightImg = sourceIcon.getPrelightImg(); - Cairo::RefPtr activeImg = sourceIcon.getActiveImg(); + std::shared_ptr normalImg = sourceIcon.getNormalImg(); + std::shared_ptr prelightImg = sourceIcon.getPrelightImg(); + std::shared_ptr activeImg = sourceIcon.getActiveImg(); for (; j < EditSubscriber::visibleGeometry.size() - VISIBLE_OBJECT_COUNT; ++i, ++j) { - EditSubscriber::mouseOverGeometry.at (i) = EditSubscriber::visibleGeometry.at (j) = new OPIcon (normalImg, activeImg, prelightImg, Cairo::RefPtr (nullptr), Cairo::RefPtr (nullptr), Geometry::DP_CENTERCENTER); + EditSubscriber::mouseOverGeometry.at (i) = EditSubscriber::visibleGeometry.at (j) = new OPIcon (normalImg, activeImg, prelightImg, nullptr, nullptr, Geometry::DP_CENTERCENTER); EditSubscriber::visibleGeometry.at (j)->setActive (true); EditSubscriber::visibleGeometry.at (j)->datum = Geometry::IMAGE; EditSubscriber::visibleGeometry.at (j)->state = Geometry::NORMAL; 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/thresholdadjuster.cc b/rtgui/thresholdadjuster.cc index 1f8b1c967..7f8aec508 100644 --- a/rtgui/thresholdadjuster.cc +++ b/rtgui/thresholdadjuster.cc @@ -99,7 +99,7 @@ void ThresholdAdjuster::initObject (Glib::ustring label, bool editedcb) hbox->pack_start (*this->label); reset = Gtk::manage (new Gtk::Button ()); - reset->add (*Gtk::manage (new RTImage ("undo-small.png", "redo-small.png"))); + reset->add (*Gtk::manage (new RTImage ("undo-small", Gtk::ICON_SIZE_BUTTON))); reset->set_relief (Gtk::RELIEF_NONE); reset->set_tooltip_markup (M("ADJUSTER_RESET_TO_DEFAULT")); diff --git a/rtgui/thresholdselector.cc b/rtgui/thresholdselector.cc index 61043525c..53c1b33af 100644 --- a/rtgui/thresholdselector.cc +++ b/rtgui/thresholdselector.cc @@ -148,7 +148,6 @@ void ThresholdSelector::initValues () set_name("ThresholdSelector"); set_can_focus(false); set_app_paintable(true); - setDirty(true); updateTooltip(); } @@ -167,7 +166,7 @@ void ThresholdSelector::get_preferred_height_vfunc (int &minimum_height, int &na void ThresholdSelector::get_preferred_width_vfunc (int &minimum_width, int &natural_width) const { - int s = RTScalable::getScale(); + const int s = RTScalable::scalePixelSize(1); Glib::RefPtr style = get_style_context(); Gtk::Border padding = getPadding(style); // already scaled int margins = padding.get_left() + padding.get_right(); @@ -177,7 +176,7 @@ void ThresholdSelector::get_preferred_width_vfunc (int &minimum_width, int &natu void ThresholdSelector::get_preferred_height_for_width_vfunc (int width, int &minimum_height, int &natural_height) const { - int s = RTScalable::getScale(); + const int s = RTScalable::scalePixelSize(1); Glib::RefPtr style = get_style_context(); Gtk::Border padding = getPadding(style); // already scaled int margins = padding.get_left() + padding.get_right(); @@ -198,7 +197,7 @@ void ThresholdSelector::setPositions (double bottom, double top) setPositions(bottom, top, maxValBottom, maxValTop); if (updatePolicy == RTUP_DYNAMIC) { - setDirty(true); + queue_draw(); } } @@ -216,10 +215,6 @@ void ThresholdSelector::setPositions (double bottomLeft, double topLeft, double positions[TS_TOPRIGHT] = topRight; if (different) { - if (updatePolicy == RTUP_DYNAMIC) { - setDirty(true); - } - sig_val_changed.emit(); updateTooltip(); queue_draw (); @@ -246,75 +241,58 @@ void ThresholdSelector::setDefaults (double bottomLeft, double topLeft, double b void ThresholdSelector::on_realize() { - Gtk::DrawingArea::on_realize(); add_events(Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK | Gdk::LEAVE_NOTIFY_MASK); } -void ThresholdSelector::updateBackBuffer() +void ThresholdSelector::updateDrawingArea (const ::Cairo::RefPtr< Cairo::Context> &cr) { - - if (!get_realized() || !isDirty() || !get_allocated_width() || !get_allocated_height()) { + // on_realize has to be called before + if (!get_realized() || !get_allocated_width() || !get_allocated_height()) { return; } - // This will create or update the size of the BackBuffer::surface - setDrawRectangle(Cairo::FORMAT_ARGB32, 0, 0, get_allocated_width(), get_allocated_height(), true); + // Get border padding + const Glib::RefPtr style = get_style_context(); + Gtk::Border padding = getPadding(style); - if (!surface) { - return; - } - - Cairo::RefPtr cr = Cairo::Context::create(surface); - Glib::RefPtr style = get_style_context(); - Gtk::Border padding = getPadding(style); // already scaled - - cr->set_source_rgba (0., 0., 0., 0.); - cr->set_operator (Cairo::OPERATOR_CLEAR); - cr->paint (); + // Setup drawing cr->set_operator (Cairo::OPERATOR_OVER); - double s = (double)RTScalable::getScale(); + // Get widget size + const int w = get_allocated_width (); + const int h = get_allocated_height (); - double positions01[4]; - int w = get_allocated_width (); - int h = get_allocated_height (); + // Compute slider parameters + const double wslider = sliderWidth; // constant must be an odd value + const double hwslider = wslider / 2.; + const double verticalSliderPadding = std::floor((static_cast(h) - static_cast(padding.get_top()) - static_cast(padding.get_bottom())) * verticalSliderPaddingFactor + 0.5); + // Get threshold selector positions + const double positions01[4] = {to01(TS_BOTTOMLEFT), to01(TS_TOPLEFT), to01(TS_BOTTOMRIGHT), to01(TS_TOPRIGHT)}; - double wslider = sliderWidth * s; // constant must be an odd value - double hwslider = wslider / 2.; - double verticalSliderPadding = std::floor(((double)h - (double)padding.get_top() - (double)padding.get_bottom()) * verticalSliderPaddingFactor + 0.5); + // Compute internal background position and size + const double innerBarX = static_cast(padding.get_left()) + hwslider - 0.5; + const double innerBarY = verticalSliderPadding + 1. + static_cast(padding.get_top()); + const double innerBarW = static_cast(w) - innerBarX - static_cast(padding.get_right()) - hwslider - 0.5; + const double innerBarH = static_cast(h) - innerBarY - verticalSliderPadding - 1. - static_cast(padding.get_bottom()); - positions01[TS_BOTTOMLEFT] = to01(TS_BOTTOMLEFT); - positions01[TS_TOPLEFT] = to01(TS_TOPLEFT); - positions01[TS_BOTTOMRIGHT] = to01(TS_BOTTOMRIGHT); - positions01[TS_TOPRIGHT] = to01(TS_TOPRIGHT); - - double innerBarX = (double)padding.get_left() + hwslider - 0.5 * s; - double innerBarY = verticalSliderPadding + 1. * s + (double)padding.get_top(); - double innerBarW = (double)w - innerBarX - (double)padding.get_right() - hwslider - 0.5 * s; - double innerBarH = (double)h - innerBarY - verticalSliderPadding - 1. * s - (double)padding.get_bottom(); + // Render background (style one or colored bar one) if (is_sensitive() && coloredBar.canGetColors()) { - if (updatePolicy == RTUP_DYNAMIC) { - coloredBar.setDirty(true); - } - // this will eventually create/update the off-screen Surface for the gradient area only ! - coloredBar.setDrawRectangle(innerBarX, innerBarY, innerBarW, innerBarH); - // that we're displaying here - coloredBar.expose(*this, cr); + coloredBar.setColoredBarSize(innerBarX, innerBarY, innerBarW, innerBarH); + coloredBar.updateColoredBar(cr); } else { style->render_background(cr, innerBarX, innerBarY, innerBarW, innerBarH); } - // draw curve - - double yStart = innerBarY + innerBarH - 1. * s; - double yEnd = innerBarY + 1. * s; - double xStart = innerBarX; - double xEnd = innerBarX + innerBarW; - double iw = xEnd - xStart; - double ih = yEnd - yStart; + // Render curve + const double yStart = innerBarY + innerBarH - 1.; + const double yEnd = innerBarY + 1.; + const double xStart = innerBarX; + const double xEnd = innerBarX + innerBarW; + const double iw = xEnd - xStart; + const double ih = yEnd - yStart; if (bgCurveProvider) { @@ -390,26 +368,27 @@ void ThresholdSelector::updateBackBuffer() cr->set_line_cap(Cairo::LINE_CAP_BUTT); cr->set_line_join(Cairo::LINE_JOIN_BEVEL); + // Render surrounding curve (black) if (is_sensitive()) { - // draw surrounding curve (black) + cr->set_source_rgb (0., 0., 0.); - cr->set_line_width (4. * s); + cr->set_line_width (4.); cr->stroke_preserve(); } - // draw inner curve (white) + // Render inner curve (white) if (is_sensitive()) { cr->set_source_rgb (1., 1., 1.); } else { cr->set_source_rgba (0., 0., 0., 0.5); } - cr->set_line_width (2. * s); + cr->set_line_width (2.); cr->stroke (); - // draw the box's borders - style->render_frame(cr, innerBarX - 1. * s, innerBarY - 1. * s, innerBarW + 2. * s, innerBarH + 2. * s); + // Render the box's borders + style->render_frame(cr, innerBarX - 1., innerBarY - 1., innerBarW + 2., innerBarH + 2.); - // draw sliders + // Render sliders Gtk::StateFlags currState = style->get_state(); cr->set_antialias(Cairo::ANTIALIAS_SUBPIXEL); @@ -426,9 +405,9 @@ void ThresholdSelector::updateBackBuffer() style->set_state(Gtk::STATE_FLAG_NORMAL); } - double posX = xStart + iw * positions01[i]; - double arrowY = i == 0 || i == 2 ? yStart - 3. * s : yEnd + 3. * s; - double baseY = i == 0 || i == 2 ? (double)h - (double)padding.get_bottom() - 0.5 * s : (double)padding.get_top() + 0.5 * s; + const double posX = xStart + iw * positions01[i]; + const double arrowY = i == 0 || i == 2 ? yStart - 3. : yEnd + 3.; + const double baseY = i == 0 || i == 2 ? static_cast(h) - static_cast(padding.get_bottom()) - 0.5 : static_cast(padding.get_top()) + 0.5; style->render_slider(cr, posX - hwslider, i == 0 || i == 2 ? arrowY : baseY, wslider, i == 0 || i == 2 ? baseY - arrowY : arrowY - baseY, Gtk::ORIENTATION_HORIZONTAL); } @@ -438,17 +417,9 @@ void ThresholdSelector::updateBackBuffer() bool ThresholdSelector::on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr) { - - // on_realize & updateBackBuffer have to be called before - if (get_realized() && get_allocated_width() && get_allocated_height()) { - if (isDirty()) { - updateBackBuffer(); - } - - if (surface) { - copySurface(cr); - } - } + // Draw drawing area + // Note: As drawing area surface is updated inside on_draw function, hidpi is automatically supported + updateDrawingArea(cr); return true; } @@ -494,21 +465,19 @@ bool ThresholdSelector::on_leave_notify_event (GdkEventCrossing* event) bool ThresholdSelector::on_motion_notify_event (GdkEventMotion* event) { + const int w = get_allocated_width (); + const Glib::RefPtr style = get_style_context(); + const Gtk::Border padding = getPadding(style); - int w = get_allocated_width (); - Glib::RefPtr style = get_style_context(); - Gtk::Border padding = getPadding(style); // already scaled + const double wslider = sliderWidth; // constant must be an odd value + const double hwslider = wslider / 2.; - double s = (double)RTScalable::getScale(); - double wslider = sliderWidth * s; // constant must be an odd value - double hwslider = wslider / 2.; + const double innerBarX = static_cast(padding.get_left()) + hwslider - 0.5; + const double innerBarW = static_cast(w) - innerBarX - static_cast(padding.get_right()) - hwslider - 0.5; - double innerBarX = (double)padding.get_left() + hwslider - 0.5 * s; - double innerBarW = (double)w - innerBarX - (double)padding.get_right() - hwslider - 0.5 * s; - - double xStart = innerBarX + 0.5 * s; - double xEnd = innerBarX + innerBarW - 0.5 * s; - double iw = xEnd - xStart; + const double xStart = innerBarX + 0.5; + const double xEnd = innerBarX + innerBarW - 0.5; + const double iw = xEnd - xStart; findLitCursor(event->x, event->y); @@ -556,11 +525,6 @@ bool ThresholdSelector::on_motion_notify_event (GdkEventMotion* event) // set the new reference value for the next move tmpX = event->x; - // ask to redraw the background - if (updatePolicy == RTUP_DYNAMIC) { - setDirty(true); - } - // update the tooltip updateTooltip(); @@ -581,27 +545,26 @@ bool ThresholdSelector::on_motion_notify_event (GdkEventMotion* event) void ThresholdSelector::findLitCursor(int posX, int posY) { - int w = get_allocated_width (); - int h = get_allocated_height (); - Glib::RefPtr style = get_style_context(); - Gtk::Border padding = getPadding(style); // already scaled + const int w = get_allocated_width (); + const int h = get_allocated_height (); + const Glib::RefPtr style = get_style_context(); + const Gtk::Border padding = getPadding(style); - double s = (double)RTScalable::getScale(); - double wslider = sliderWidth * s; // constant must be an odd value - double hwslider = wslider / 2.; + const double wslider = sliderWidth; // constant must be an odd value + const double hwslider = wslider / 2.; - double innerBarX = (double)padding.get_left() + hwslider - 0.5 * s; - double innerBarW = (double)w - innerBarX - (double)padding.get_right() - hwslider - 0.5 * s; + const double innerBarX = static_cast(padding.get_left()) + hwslider - 0.5; + const double innerBarW = static_cast(w) - innerBarX - static_cast(padding.get_right()) - hwslider - 0.5; litCursor = TS_UNDEFINED; if (posY >= 0 && posY <= h / 2) { - if (posX >= (int)(innerBarX - hwslider) && posX <= (int)(innerBarX + innerBarW + hwslider)) { + if (posX >= static_cast(innerBarX - hwslider) && posX <= static_cast(innerBarX + innerBarW + hwslider)) { litCursor = TS_TOPLEFT; if (doubleThresh) { // we use minValTop since if this block is executed, it means that we are in a simple Threshold where both bottom and top range are the same - double cursorX = ((double)posX - innerBarX) * (maxValTop - minValTop) / innerBarW + minValTop; + const double cursorX = (static_cast(posX) - innerBarX) * (maxValTop - minValTop) / innerBarW + minValTop; if (cursorX > positions[TS_TOPRIGHT] || std::fabs(cursorX - positions[TS_TOPRIGHT]) < std::fabs(cursorX - positions[TS_TOPLEFT])) { litCursor = TS_TOPRIGHT; @@ -609,12 +572,12 @@ void ThresholdSelector::findLitCursor(int posX, int posY) } } } else if (posY > h / 2 && posY < h) { - if (posX >= (int)(innerBarX - hwslider) && posX <= (int)(innerBarX + innerBarW + hwslider)) { + if (posX >= static_cast(innerBarX - hwslider) && posX <= static_cast(innerBarX + innerBarW + hwslider)) { litCursor = TS_BOTTOMLEFT; if (doubleThresh) { // we use minValTop since if this block is executed, it means that we are in a simple Threshold where both bottom and top range are the same - double cursorX = ((double)posX - innerBarX) * (maxValTop - minValTop) / innerBarW + minValTop; + double cursorX = (static_cast(posX) - innerBarX) * (maxValTop - minValTop) / innerBarW + minValTop; if (cursorX > positions[TS_BOTTOMRIGHT] || std::fabs(cursorX - positions[TS_BOTTOMRIGHT]) < std::fabs(cursorX - positions[TS_BOTTOMLEFT])) { litCursor = TS_BOTTOMRIGHT; @@ -728,10 +691,6 @@ void ThresholdSelector::reset () positions[2] = defPos[2]; positions[3] = defPos[3]; - if (updatePolicy == RTUP_DYNAMIC) { - setDirty(true); - } - updateTooltip(); queue_draw (); } diff --git a/rtgui/thresholdselector.h b/rtgui/thresholdselector.h index bf1d7c952..55ccce758 100644 --- a/rtgui/thresholdselector.h +++ b/rtgui/thresholdselector.h @@ -21,7 +21,6 @@ #include #include "coloredbar.h" -#include "guiutils.h" #include "../rtengine/procparams.h" @@ -61,7 +60,7 @@ public: * have to provide through the ThresholdCurveProvider interface * */ -class ThresholdSelector : public Gtk::DrawingArea, public BackBuffer +class ThresholdSelector : public Gtk::DrawingArea { public: @@ -109,16 +108,20 @@ protected: void findSecondaryMovedCursor(guint state); void findBoundaries(double &min, double &max); double to01(ThreshCursorId cursorId); + + // Internal drawing functions void updateTooltip(); - void updateBackBuffer(); + void updateDrawingArea (const ::Cairo::RefPtr< Cairo::Context> &cr); + + // GtkDrawingArea override functions + void on_realize () override; + bool on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr) override; Gtk::SizeRequestMode get_request_mode_vfunc () const override; void get_preferred_height_vfunc (int& minimum_height, int& natural_height) const final; void get_preferred_width_vfunc (int &minimum_width, int &natural_width) const final; void get_preferred_height_for_width_vfunc (int width, int &minimum_height, int &natural_height) const final; void get_preferred_width_for_height_vfunc (int height, int &minimum_width, int &natural_width) const final; - void on_realize () override; - bool on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr) override; bool on_button_press_event (GdkEventButton* event) override; bool on_button_release_event (GdkEventButton* event) override; bool on_motion_notify_event (GdkEventMotion* event) override; diff --git a/rtgui/thumbbrowserbase.cc b/rtgui/thumbbrowserbase.cc index 8f3499c2a..f873c719d 100644 --- a/rtgui/thumbbrowserbase.cc +++ b/rtgui/thumbbrowserbase.cc @@ -34,7 +34,7 @@ ThumbBrowserBase::ThumbBrowserBase () { inW = -1; inH = -1; - + hscroll.set_orientation(Gtk::ORIENTATION_HORIZONTAL); vscroll.set_orientation(Gtk::ORIENTATION_VERTICAL); @@ -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; } @@ -1026,14 +1031,14 @@ Gtk::SizeRequestMode ThumbBrowserBase::Internal::get_request_mode_vfunc () const void ThumbBrowserBase::Internal::get_preferred_height_vfunc (int &minimum_height, int &natural_height) const { - minimum_height = 20 * RTScalable::getScale(); - natural_height = 80 * RTScalable::getScale(); + minimum_height = RTScalable::scalePixelSize(20); + natural_height = RTScalable::scalePixelSize(80); } void ThumbBrowserBase::Internal::get_preferred_width_vfunc (int &minimum_width, int &natural_width) const { - minimum_width = 200 * RTScalable::getScale(); - natural_width = 1000 * RTScalable::getScale(); + minimum_width = RTScalable::scalePixelSize(200); + natural_width = RTScalable::scalePixelSize(1000); } void ThumbBrowserBase::Internal::get_preferred_height_for_width_vfunc (int width, int &minimum_height, int &natural_height) const diff --git a/rtgui/thumbbrowserentrybase.cc b/rtgui/thumbbrowserentrybase.cc index 3d1e6bdc4..2f9fb4b47 100644 --- a/rtgui/thumbbrowserentrybase.cc +++ b/rtgui/thumbbrowserentrybase.cc @@ -21,6 +21,7 @@ #include "options.h" #include "thumbbrowserbase.h" #include "../rtengine/rt_math.h" +#include "rtsurface.h" namespace { @@ -285,10 +286,10 @@ void ThumbBrowserEntryBase::updateBackBuffer () int iheight = 0; for (size_t i = 0; i < bbIcons.size(); i++) { - iwidth += bbIcons[i]->get_width() + (i > 0 ? igap : 0); + iwidth += bbIcons[i]->getWidth() + (i > 0 ? igap : 0); - if (bbIcons[i]->get_height() > iheight) { - iheight = bbIcons[i]->get_height(); + if (bbIcons[i]->getHeight() > iheight) { + iheight = bbIcons[i]->getHeight(); } } @@ -311,10 +312,10 @@ void ThumbBrowserEntryBase::updateBackBuffer () for (size_t i = 0; i < bbIcons.size(); i++) { // Draw the image at 110, 90, except for the outermost 10 pixels. - Gdk::Cairo::set_source_pixbuf(cc, bbIcons[i], istartx, istarty); - cc->rectangle(istartx, istarty, bbIcons[i]->get_width(), bbIcons[i]->get_height()); + cc->set_source(bbIcons[i]->get(), istartx, istarty); + cc->rectangle(istartx, istarty, bbIcons[i]->getWidth(), bbIcons[i]->getHeight()); cc->fill(); - istartx += bbIcons[i]->get_width() + igap; + istartx += bbIcons[i]->getWidth() + igap; } } @@ -324,9 +325,9 @@ void ThumbBrowserEntryBase::updateBackBuffer () int istarty2 = prey + preh - igap - 1; for (size_t i = 0; i < bbSpecificityIcons.size(); ++i) { - istartx2 -= bbSpecificityIcons[i]->get_width() - igap; - Gdk::Cairo::set_source_pixbuf(cc, bbSpecificityIcons[i], istartx2, istarty2 - bbSpecificityIcons[i]->get_height()); - cc->rectangle(istartx2, istarty2 - bbSpecificityIcons[i]->get_height(), bbSpecificityIcons[i]->get_width(), bbSpecificityIcons[i]->get_height()); + istartx2 -= bbSpecificityIcons[i]->getWidth() - igap; + cc->set_source(bbSpecificityIcons[i]->get(), istartx2, istarty2 - bbSpecificityIcons[i]->getHeight()); + cc->rectangle(istartx2, istarty2 - bbSpecificityIcons[i]->getHeight(), bbSpecificityIcons[i]->getWidth(), bbSpecificityIcons[i]->getHeight()); cc->fill(); } } @@ -375,7 +376,7 @@ void ThumbBrowserEntryBase::updateBackBuffer () // draw file name Glib::RefPtr context = w->get_pango_context () ; - Pango::FontDescription fontd = context->get_font_description (); + Pango::FontDescription fontd = w->get_style_context()->get_font(); fontd.set_weight (Pango::WEIGHT_BOLD); if (italicstyle) { @@ -441,7 +442,7 @@ void ThumbBrowserEntryBase::getTextSizes (int& infow, int& infoh) // filename: - Pango::FontDescription fontd = context->get_font_description (); + Pango::FontDescription fontd = w->get_style_context()->get_font(); fontd.set_weight (Pango::WEIGHT_BOLD); context->set_font_description (fontd); Glib::RefPtr fn = w->create_pango_layout(dispname); @@ -695,14 +696,14 @@ bool ThumbBrowserEntryBase::insideWindow (int x, int y, int w, int h) const return !(ofsX + startx > x + w || ofsX + startx + exp_width < x || ofsY + starty > y + h || ofsY + starty + exp_height < y); } -std::vector> ThumbBrowserEntryBase::getIconsOnImageArea() +std::vector> ThumbBrowserEntryBase::getIconsOnImageArea() { - return std::vector >(); + return std::vector>(); } -std::vector > ThumbBrowserEntryBase::getSpecificityIconsOnImageArea() +std::vector> ThumbBrowserEntryBase::getSpecificityIconsOnImageArea() { - return std::vector >(); + return std::vector>(); } bool ThumbBrowserEntryBase::motionNotify (int x, int y) diff --git a/rtgui/thumbbrowserentrybase.h b/rtgui/thumbbrowserentrybase.h index 3db03a96e..41d33382d 100644 --- a/rtgui/thumbbrowserentrybase.h +++ b/rtgui/thumbbrowserentrybase.h @@ -33,6 +33,7 @@ class Thumbnail; class ThumbBrowserBase; +class RTSurface; class ThumbBrowserEntryBase { @@ -85,8 +86,8 @@ protected: Glib::RefPtr backBuffer; bool bbSelected, bbFramed; guint8* bbPreview; - std::vector> bbIcons; - std::vector> bbSpecificityIcons; + std::vector> bbIcons; + std::vector> bbSpecificityIcons; CursorShape cursor_type; void drawFrame (Cairo::RefPtr cr, const Gdk::RGBA& bg, const Gdk::RGBA& fg); @@ -211,8 +212,8 @@ public: virtual void drawProgressBar (Glib::RefPtr win, const Gdk::RGBA& foregr, const Gdk::RGBA& backgr, int x, int w, int y, int h) {} - virtual std::vector> getIconsOnImageArea (); - virtual std::vector> getSpecificityIconsOnImageArea (); + virtual std::vector> getIconsOnImageArea (); + virtual std::vector> getSpecificityIconsOnImageArea (); virtual void getIconSize (int& w, int& h) const = 0; virtual bool motionNotify (int x, int y); diff --git a/rtgui/thumbimageupdater.cc b/rtgui/thumbimageupdater.cc index 540ad625e..3afba13fb 100644 --- a/rtgui/thumbimageupdater.cc +++ b/rtgui/thumbimageupdater.cc @@ -18,6 +18,7 @@ */ #include +#include #include #include @@ -45,12 +46,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 +60,7 @@ public: tbe_(nullptr), priority_(nullptr), upgrade_(false), + force_upgrade_(false), listener_(nullptr) {} @@ -66,6 +69,7 @@ public: int height_;*/ bool* priority_; bool upgrade_; + bool force_upgrade_; ThumbImageUpdateListener* listener_; }; @@ -80,14 +84,14 @@ public: threadCount = omp_get_num_procs(); #endif - threadPool_ = new Glib::ThreadPool(threadCount, 0); + threadPool_.reset(new Glib::ThreadPool(threadCount, 0)); } - Glib::ThreadPool* threadPool_; + std::unique_ptr 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 +99,7 @@ public: bool inactive_waiting_; - Glib::Threads::Cond inactive_; + std::condition_variable inactive_; void processNextJob() @@ -103,7 +107,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 +157,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 +170,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 +195,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 +210,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 +223,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 +235,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 +251,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 +263,7 @@ void ThumbImageUpdater::removeAllJobs() DEBUG("stop"); { - Glib::Threads::Mutex::Lock lock(impl_->mutex_); + std::lock_guard lock(impl_->mutex_); impl_->jobs_.clear(); } @@ -266,9 +271,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/toneequalizer.cc b/rtgui/toneequalizer.cc index d524bdc05..34c1c8a4e 100644 --- a/rtgui/toneequalizer.cc +++ b/rtgui/toneequalizer.cc @@ -44,7 +44,7 @@ ToneEqualizer::ToneEqualizer(): FoldableToolPanel(this, TOOL_NAME, M("TP_TONE_EQ "red" }; for (size_t i = 0; i < bands.size(); ++i) { - bands[i] = Gtk::manage(new Adjuster(M("TP_TONE_EQUALIZER_BAND_" + std::to_string(i)), -100, 100, 1, 0, Gtk::manage(new RTImage(Glib::ustring("circle-") + images[i] + "-small.png")))); + bands[i] = Gtk::manage(new Adjuster(M("TP_TONE_EQUALIZER_BAND_" + std::to_string(i)), -100, 100, 1, 0, Gtk::manage(new RTImage(Glib::ustring("circle-") + images[i] + "-small")))); bands[i]->setAdjusterListener(this); pack_start(*bands[i]); bands[i]->showIcons(false); diff --git a/rtgui/toolbar.cc b/rtgui/toolbar.cc index 5cdfc2787..56237197c 100644 --- a/rtgui/toolbar.cc +++ b/rtgui/toolbar.cc @@ -28,8 +28,8 @@ ToolBar::ToolBar () : showColPickers(true), listener (nullptr), pickerListener(n editingMode = false; - handimg.reset(new RTImage("hand-open.png")); - editinghandimg.reset(new RTImage("crosshair-adjust.png")); + handimg.reset(new RTImage("hand-open", Gtk::ICON_SIZE_LARGE_TOOLBAR)); + editinghandimg.reset(new RTImage("crosshair-adjust", Gtk::ICON_SIZE_LARGE_TOOLBAR)); handTool = Gtk::manage (new Gtk::ToggleButton ()); handTool->add (*handimg); @@ -40,7 +40,7 @@ ToolBar::ToolBar () : showColPickers(true), listener (nullptr), pickerListener(n pack_start (*handTool); wbTool = Gtk::manage (new Gtk::ToggleButton ()); - Gtk::Image* wbimg = Gtk::manage (new RTImage ("color-picker.png")); + Gtk::Image* wbimg = Gtk::manage (new RTImage ("color-picker", Gtk::ICON_SIZE_LARGE_TOOLBAR)); wbTool->add (*wbimg); wbimg->show (); wbTool->set_relief(Gtk::RELIEF_NONE); @@ -48,8 +48,8 @@ ToolBar::ToolBar () : showColPickers(true), listener (nullptr), pickerListener(n pack_start (*wbTool); - showcolpickersimg.reset(new RTImage("color-picker-bars.png")); - hidecolpickersimg.reset(new RTImage("color-picker-hide.png")); + showcolpickersimg.reset(new RTImage("color-picker-bars", Gtk::ICON_SIZE_LARGE_TOOLBAR)); + hidecolpickersimg.reset(new RTImage("color-picker-hide", Gtk::ICON_SIZE_LARGE_TOOLBAR)); colPickerTool = Gtk::manage (new Gtk::ToggleButton ()); colPickerTool->add (*showcolpickersimg); @@ -60,7 +60,7 @@ ToolBar::ToolBar () : showColPickers(true), listener (nullptr), pickerListener(n pack_start (*colPickerTool); cropTool = Gtk::manage (new Gtk::ToggleButton ()); - Gtk::Image* cropimg = Gtk::manage (new RTImage ("crop.png")); + Gtk::Image* cropimg = Gtk::manage (new RTImage ("crop", Gtk::ICON_SIZE_LARGE_TOOLBAR)); cropTool->add (*cropimg); cropimg->show (); cropTool->set_relief(Gtk::RELIEF_NONE); @@ -69,7 +69,7 @@ ToolBar::ToolBar () : showColPickers(true), listener (nullptr), pickerListener(n pack_start (*cropTool); straTool = Gtk::manage (new Gtk::ToggleButton ()); - Gtk::Image* straimg = Gtk::manage (new RTImage ("rotate-straighten.png")); + Gtk::Image* straimg = Gtk::manage (new RTImage ("rotate-straighten", Gtk::ICON_SIZE_LARGE_TOOLBAR)); straTool->add (*straimg); straimg->show (); straTool->set_relief(Gtk::RELIEF_NONE); @@ -78,7 +78,7 @@ ToolBar::ToolBar () : showColPickers(true), listener (nullptr), pickerListener(n pack_start (*straTool); perspTool = Gtk::manage(new Gtk::ToggleButton()); - Gtk::Image* perspimg = Gtk::manage(new RTImage("perspective-vertical-bottom.png")); + Gtk::Image* perspimg = Gtk::manage(new RTImage("perspective-vertical-bottom", Gtk::ICON_SIZE_LARGE_TOOLBAR)); perspTool->set_image(*perspimg); perspTool->set_relief(Gtk::RELIEF_NONE); pack_start(*perspTool); diff --git a/rtgui/toollocationpref.cc b/rtgui/toollocationpref.cc index a2e2c9480..b66f74536 100644 --- a/rtgui/toollocationpref.cc +++ b/rtgui/toollocationpref.cc @@ -21,7 +21,6 @@ #include "guiutils.h" #include "options.h" -#include "rtimage.h" #include "rtscalable.h" #include "toollocationpref.h" #include "toolpanelcoord.h" @@ -279,12 +278,9 @@ ListEditButtons::ListEditButtons(Gtk::TreeView &list, Glib::RefPtrappend_column(toolListViewColumnToolName); toolListViewColumnToolName.pack_start(toolListCellRendererToolName); - toolListViewColumnToolName.set_expand(); toolListViewColumnToolName.set_renderer( toolListCellRendererToolName, toolListColumns.toolName); toolListViewPtr->append_column(toolListViewColumnFavorite); - toolListViewColumnFavorite.pack_start(toolListCellRendererFavorite); - toolListViewColumnFavorite.set_expand(false); + toolListViewColumnFavorite.pack_start(toolListCellRendererFavorite, false); toolListViewColumnFavorite.set_renderer( toolListCellRendererFavorite, toolListColumns.isFavorite); toolListViewColumnFavorite.add_attribute( @@ -720,20 +714,20 @@ ToolLocationPreference::ToolLocationPreference(Options &options) : Gtk::Grid *layout_grid = Gtk::manage(new Gtk::Grid()); layout_grid->set_column_spacing(4); layout_grid->set_row_spacing(4); - add(*layout_grid); + layout_grid->set_column_homogeneous(true); + pack_start(*layout_grid); // Tool list. Gtk::Frame *tool_list_frame = Gtk::manage(new Gtk::Frame( M("PREFERENCES_TOOLPANEL_AVAILABLETOOLS"))); Gtk::ScrolledWindow *tool_list_scrolled_window = Gtk::manage(new Gtk::ScrolledWindow()); - tool_list_scrolled_window->set_min_content_width( - 400 * (RTScalable::getTweakedDPI() / RTScalable::baseDPI)); + tool_list_scrolled_window->set_min_content_width(RTScalable::scalePixelSize(400)); layout_grid->attach_next_to(*tool_list_frame, Gtk::PositionType::POS_RIGHT, 1, 1); tool_list_frame->add(*tool_list_scrolled_window); tool_list_scrolled_window->add(*impl->toolListViewPtr); setExpandAlignProperties( - tool_list_frame, false, true, Gtk::ALIGN_START, Gtk::ALIGN_FILL); + tool_list_frame, true, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); // Favorites list. Gtk::Frame *favorites_frame = Gtk::manage(new Gtk::Frame( @@ -741,15 +735,14 @@ ToolLocationPreference::ToolLocationPreference(Options &options) : Gtk::Box *favorites_box = Gtk::manage(new Gtk::Box()); Gtk::ScrolledWindow *favorites_list_scrolled_window = Gtk::manage(new Gtk::ScrolledWindow()); - favorites_list_scrolled_window->set_min_content_width( - 300 * (RTScalable::getTweakedDPI() / RTScalable::baseDPI)); + favorites_list_scrolled_window->set_min_content_width(RTScalable::scalePixelSize(400)); layout_grid->attach_next_to(*favorites_frame, Gtk::PositionType::POS_RIGHT, 1, 1); favorites_box->pack_start(impl->favoritesListEditButtons, false, false); - favorites_box->pack_start(*favorites_list_scrolled_window, false, false); + favorites_box->pack_start(*favorites_list_scrolled_window, true, true); favorites_frame->add(*favorites_box); favorites_list_scrolled_window->add(*impl->favoritesViewPtr); setExpandAlignProperties( - favorites_frame, false, true, Gtk::ALIGN_START, Gtk::ALIGN_FILL); + favorites_frame, true, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); // General options. layout_grid->attach_next_to( diff --git a/rtgui/toolpanel.cc b/rtgui/toolpanel.cc index 6db30bb14..b2c14107d 100644 --- a/rtgui/toolpanel.cc +++ b/rtgui/toolpanel.cc @@ -47,6 +47,11 @@ ToolParamBlock::ToolParamBlock() { //GTK318 } +Gtk::SizeRequestMode ToolParamBlock::get_request_mode_vfunc () const +{ + return Gtk::SIZE_REQUEST_HEIGHT_FOR_WIDTH; +} + FoldableToolPanel::FoldableToolPanel(Gtk::Box* content, Glib::ustring toolName, Glib::ustring UILabel, bool need11, bool useEnabled) : ToolPanel(toolName, need11), parentContainer(nullptr), exp(nullptr), lastEnabled(true) { if (!content) { @@ -62,7 +67,7 @@ FoldableToolPanel::FoldableToolPanel(Gtk::Box* content, Glib::ustring toolName, label->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER); titleHBox->pack_start(*label, Gtk::PACK_EXPAND_WIDGET, 0); - RTImage *image = Gtk::manage (new RTImage("one-to-one-small.png")); + RTImage *image = Gtk::manage (new RTImage("one-to-one-small")); image->set_tooltip_text(M("TP_GENERAL_11SCALE_TOOLTIP")); titleHBox->pack_end(*image, Gtk::PACK_SHRINK, 0); diff --git a/rtgui/toolpanel.h b/rtgui/toolpanel.h index 5ec59c9c2..f22f6f771 100644 --- a/rtgui/toolpanel.h +++ b/rtgui/toolpanel.h @@ -70,6 +70,7 @@ class ToolParamBlock : { public: ToolParamBlock(); + Gtk::SizeRequestMode get_request_mode_vfunc () const override; }; class ToolPanel : diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc index e9b0ce5cc..966a81b42 100644 --- a/rtgui/toolpanelcoord.cc +++ b/rtgui/toolpanelcoord.cc @@ -274,7 +274,7 @@ const ToolPanelCoordinator::ToolLayout PANEL_TOOLS = { std::unordered_map ToolPanelCoordinator::toolNamesReverseMap; -ToolPanelCoordinator::ToolPanelCoordinator (bool batch) : ipc (nullptr), favoritePanelSW(nullptr), hasChanged (false), batch(batch), editDataProvider (nullptr), photoLoadedOnce(false) +ToolPanelCoordinator::ToolPanelCoordinator (bool batch) : ipc (nullptr), favoritePanelSW(nullptr), hasChanged (false), batch(batch), editDataProvider (nullptr), photoLoadedOnce(false), ornamentSurface(new RTSurface("ornament1.svg")) { favoritePanel = Gtk::manage (new ToolVBox ()); @@ -402,7 +402,7 @@ ToolPanelCoordinator::ToolPanelCoordinator (bool batch) : ipc (nullptr), favorit // load panel endings for (int i = 0; i < 8; i++) { vbPanelEnd[i] = Gtk::manage (new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); - imgPanelEnd[i] = Gtk::manage (new RTImage ("ornament1.png")); + imgPanelEnd[i] = Gtk::manage (new Gtk::Image (ornamentSurface->get())); imgPanelEnd[i]->show(); vbPanelEnd[i]->get_style_context()->add_class("PanelEnding"); vbPanelEnd[i]->pack_start(*imgPanelEnd[i], Gtk::PACK_SHRINK); @@ -460,16 +460,16 @@ ToolPanelCoordinator::ToolPanelCoordinator (bool batch) : ipc (nullptr), favorit rawPanelContainer->pack_start(*rawPanel, Gtk::PACK_SHRINK); rawPanelContainer->pack_start (*vbPanelEnd[5], Gtk::PACK_SHRINK); - toiF.reset(new TextOrIcon ("star.png", M ("MAIN_TAB_FAVORITES"), M ("MAIN_TAB_FAVORITES_TOOLTIP"))); - toiE = Gtk::manage (new TextOrIcon ("exposure.png", M ("MAIN_TAB_EXPOSURE"), M ("MAIN_TAB_EXPOSURE_TOOLTIP"))); - toiD = Gtk::manage (new TextOrIcon ("detail.png", M ("MAIN_TAB_DETAIL"), M ("MAIN_TAB_DETAIL_TOOLTIP"))); - toiC = Gtk::manage (new TextOrIcon ("color-circles.png", M ("MAIN_TAB_COLOR"), M ("MAIN_TAB_COLOR_TOOLTIP"))); - toiW = Gtk::manage (new TextOrIcon ("atom.png", M ("MAIN_TAB_ADVANCED"), M ("MAIN_TAB_ADVANCED_TOOLTIP"))); - toiL = Gtk::manage(new TextOrIcon("hand-open.png", M("MAIN_TAB_LOCALLAB"), M("MAIN_TAB_LOCALLAB_TOOLTIP"))); + toiF.reset(new TextOrIcon ("star", M ("MAIN_TAB_FAVORITES"), M ("MAIN_TAB_FAVORITES_TOOLTIP"))); + toiE = Gtk::manage (new TextOrIcon ("exposure", M ("MAIN_TAB_EXPOSURE"), M ("MAIN_TAB_EXPOSURE_TOOLTIP"))); + toiD = Gtk::manage (new TextOrIcon ("detail", M ("MAIN_TAB_DETAIL"), M ("MAIN_TAB_DETAIL_TOOLTIP"))); + toiC = Gtk::manage (new TextOrIcon ("color-circles", M ("MAIN_TAB_COLOR"), M ("MAIN_TAB_COLOR_TOOLTIP"))); + toiW = Gtk::manage (new TextOrIcon ("atom", M ("MAIN_TAB_ADVANCED"), M ("MAIN_TAB_ADVANCED_TOOLTIP"))); + toiL = Gtk::manage(new TextOrIcon("hand-open", M("MAIN_TAB_LOCALLAB"), M("MAIN_TAB_LOCALLAB_TOOLTIP"))); - toiT = Gtk::manage (new TextOrIcon ("transform.png", M ("MAIN_TAB_TRANSFORM"), M ("MAIN_TAB_TRANSFORM_TOOLTIP"))); - toiR = Gtk::manage (new TextOrIcon ("bayer.png", M ("MAIN_TAB_RAW"), M ("MAIN_TAB_RAW_TOOLTIP"))); - toiM = Gtk::manage (new TextOrIcon ("metadata.png", M ("MAIN_TAB_METADATA"), M ("MAIN_TAB_METADATA_TOOLTIP"))); + toiT = Gtk::manage (new TextOrIcon ("transform", M ("MAIN_TAB_TRANSFORM"), M ("MAIN_TAB_TRANSFORM_TOOLTIP"))); + toiR = Gtk::manage (new TextOrIcon ("bayer", M ("MAIN_TAB_RAW"), M ("MAIN_TAB_RAW_TOOLTIP"))); + toiM = Gtk::manage (new TextOrIcon ("metadata", M ("MAIN_TAB_METADATA"), M ("MAIN_TAB_METADATA_TOOLTIP"))); toiF->show_all(); if (options.favorites.size()) { toolPanelNotebook->append_page(*favoritePanelSW, *toiF); @@ -856,10 +856,15 @@ ToolPanelCoordinator::updateToolPanel( } FoldableToolPanel *tool_panel = getFoldableToolPanel(*new_tool_trees_iter); - if (tool_panel->getParent()) { + const bool reparent = tool_panel->getParent(); + if (reparent) { tool_panel->getParent()->remove(*tool_panel->getExpander()); } addPanel(panelBox, tool_panel, level); + if (!reparent) { + // If attaching for the first time, update the widget sizes. + tool_panel->getExpander()->check_resize(); + } } // Update the child tools. @@ -1181,8 +1186,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 +1911,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..d34c9870d 100644 --- a/rtgui/toolpanelcoord.h +++ b/rtgui/toolpanelcoord.h @@ -230,6 +230,7 @@ private: EditDataProvider *editDataProvider; sigc::connection notebookconn; bool photoLoadedOnce; // Used to indicated that a photo has been loaded yet + std::shared_ptr ornamentSurface; Gtk::Widget* prevPage; public: @@ -461,6 +462,8 @@ public: void setEditProvider(EditDataProvider *provider); + void setProgressListener(rtengine::ProgressListener *pl); + protected: static std::unordered_map toolNamesReverseMap; diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 765386529..c3ce7f6af 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -92,7 +92,7 @@ Wavelet::Wavelet() : oldsh(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_OLDSH")))), neutralchButton(Gtk::manage(new Gtk::Button(M("TP_WAVELET_NEUTRAL")))), sigma(Gtk::manage(new Adjuster(M("TP_WAVELET_SIGMA"), 0.05, 2.5, 0.01, 1.))), - offset(Gtk::manage(new Adjuster(M("TP_WAVELET_WAVOFFSET"), 0.33, 1.66, 0.01, 1., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), + offset(Gtk::manage(new Adjuster(M("TP_WAVELET_WAVOFFSET"), 0.33, 1.66, 0.01, 1., Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))), lowthr(Gtk::manage(new Adjuster(M("TP_WAVELET_WAVLOWTHR"), 20., 100., 0.5, 40.))), rescon(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCON"), -100, 100, 1, 0))), resconH(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCONH"), 0, 100, 1, 0))), @@ -152,8 +152,8 @@ Wavelet::Wavelet() : edgedetectthr2(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGEDETECTTHR2"), -10, 100, 1, 0))), edgesensi(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGESENSI"), 0, 100, 1, 60))), edgeampli(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGEAMPLI"), 0, 100, 1, 10))), - ballum(Gtk::manage(new Adjuster(M("TP_WAVELET_BALLUM"), -2., 10., 0.5, 7., Gtk::manage(new RTImage("circle-white-small.png")), Gtk::manage(new RTImage("circle-black-small.png"))))), - balchrom(Gtk::manage(new Adjuster(M("TP_WAVELET_BALCHROM"), -100., 100., 1., 0., Gtk::manage(new RTImage("circle-blue-yellow-small.png")), Gtk::manage(new RTImage("circle-red-green-small.png"))))), + ballum(Gtk::manage(new Adjuster(M("TP_WAVELET_BALLUM"), -2., 10., 0.5, 7., Gtk::manage(new RTImage("circle-white-small")), Gtk::manage(new RTImage("circle-black-small"))))), + balchrom(Gtk::manage(new Adjuster(M("TP_WAVELET_BALCHROM"), -100., 100., 1., 0., Gtk::manage(new RTImage("circle-blue-yellow-small")), Gtk::manage(new RTImage("circle-red-green-small"))))), chromfi(Gtk::manage(new Adjuster(M("TP_WAVELET_CHROMFI"), 0.0, 150., 0.01, 0.))), chromco(Gtk::manage(new Adjuster(M("TP_WAVELET_CHROMCO"), 0, 100., 0.01, 0.))), mergeL(Gtk::manage(new Adjuster(M("TP_WAVELET_MERGEL"), -50, 100, 1, 20))), @@ -606,7 +606,7 @@ Wavelet::Wavelet() : opaCurveEditorG->curveListComplete(); opaCurveEditorG->show(); tonBox->pack_start(*sigmaton); - + tonFrame->set_label_align(0.025, 0.5); ToolParamBlock* const ton2Box = Gtk::manage(new ToolParamBlock()); ton2Box->pack_start(*labgrid, Gtk::PACK_EXPAND_WIDGET, 2); @@ -716,7 +716,7 @@ Wavelet::Wavelet() : CurveEditorwavnoise->curveListComplete(); CurveEditorwavnoise->show(); const std::vector milestones4 = makeWholeHueRange(); - + wavdenoiseh = static_cast(CurveEditorwavnoiseh->addCurve(CT_Flat, "", nullptr, false, false)); wavdenoiseh->setIdentityValue(0.); wavdenoiseh->setResetCurve(FlatCurveType(default_params.wavdenoiseh.at(0)), default_params.wavdenoiseh); @@ -742,7 +742,7 @@ Wavelet::Wavelet() : wavguidf->setBottomBarBgGradient(milestones4); - + levelsigm->set_tooltip_text(M("TP_WAVELET_DENSIGMA_TOOLTIP")); // levden->set_tooltip_text(M("TP_WAVELET_DENLEV_TOOLTIP")); thrden->set_tooltip_text(M("TP_WAVELET_THRDEN_TOOLTIP")); @@ -766,7 +766,7 @@ Wavelet::Wavelet() : noiseBox->pack_start(*sigm); noiseBox->pack_start(*CurveEditorwavnoise); // noiseBox->pack_start(*CurveEditorwavnoiseh); - + balchrom->setAdjusterListener(this); chromfi->setAdjusterListener(this); @@ -922,7 +922,7 @@ Wavelet::Wavelet() : //Blur Wavelet ToolParamBlock* const blBox = Gtk::manage(new ToolParamBlock()); - + curveEditorbl->setCurveListener(this); blshape = static_cast(curveEditorbl->addCurve(CT_Flat, "", nullptr, false, false)); @@ -937,8 +937,8 @@ Wavelet::Wavelet() : blBox->pack_start(*bluwav); bluwav->setAdjusterListener(this); blBox->pack_start(*curveEditorbl, Gtk::PACK_SHRINK, 4); - - + + chrwav->setAdjusterListener(this); blBox->pack_start(*chrwav); @@ -1120,20 +1120,20 @@ Wavelet::Wavelet() : cbenabConn = cbenab->signal_toggled().connect(sigc::mem_fun(*this, &Wavelet::cbenabToggled)); cbenab->set_tooltip_text(M("TP_WAVELET_CB_TOOLTIP")); - Gtk::Image* const iblueR = Gtk::manage(new RTImage("circle-blue-small.png")); - Gtk::Image* const iyelL = Gtk::manage(new RTImage("circle-yellow-small.png")); - Gtk::Image* const imagL = Gtk::manage(new RTImage("circle-magenta-small.png")); - Gtk::Image* const igreenR = Gtk::manage(new RTImage("circle-green-small.png")); + Gtk::Image* const iblueR = Gtk::manage(new RTImage("circle-blue-small")); + Gtk::Image* const iyelL = Gtk::manage(new RTImage("circle-yellow-small")); + Gtk::Image* const imagL = Gtk::manage(new RTImage("circle-magenta-small")); + Gtk::Image* const igreenR = Gtk::manage(new RTImage("circle-green-small")); - Gtk::Image* const iblueRm = Gtk::manage(new RTImage("circle-blue-small.png")); - Gtk::Image* const iyelLm = Gtk::manage(new RTImage("circle-yellow-small.png")); - Gtk::Image* const imagLm = Gtk::manage(new RTImage("circle-magenta-small.png")); - Gtk::Image* const igreenRm = Gtk::manage(new RTImage("circle-green-small.png")); + Gtk::Image* const iblueRm = Gtk::manage(new RTImage("circle-blue-small")); + Gtk::Image* const iyelLm = Gtk::manage(new RTImage("circle-yellow-small")); + Gtk::Image* const imagLm = Gtk::manage(new RTImage("circle-magenta-small")); + Gtk::Image* const igreenRm = Gtk::manage(new RTImage("circle-green-small")); - Gtk::Image* const iblueRh = Gtk::manage(new RTImage("circle-blue-small.png")); - Gtk::Image* const iyelLh = Gtk::manage(new RTImage("circle-yellow-small.png")); - Gtk::Image* const imagLh = Gtk::manage(new RTImage("circle-magenta-small.png")); - Gtk::Image* const igreenRh = Gtk::manage(new RTImage("circle-green-small.png")); + Gtk::Image* const iblueRh = Gtk::manage(new RTImage("circle-blue-small")); + Gtk::Image* const iyelLh = Gtk::manage(new RTImage("circle-yellow-small")); + Gtk::Image* const imagLh = Gtk::manage(new RTImage("circle-magenta-small")); + Gtk::Image* const igreenRh = Gtk::manage(new RTImage("circle-green-small")); greenhigh = Gtk::manage(new Adjuster("", -100., 100., 1., 0., igreenRh, imagLh)); bluehigh = Gtk::manage(new Adjuster("", -100., 100., 1., 0., iblueRh, iyelLh)); @@ -1167,8 +1167,6 @@ Wavelet::Wavelet() : resBox->pack_start(*chanMixerMidFrame, Gtk::PACK_SHRINK); resBox->pack_start(*chanMixerShadowsFrame, Gtk::PACK_SHRINK); - //RTImage *resetImg = Gtk::manage (new RTImage ("undo-small.png", "redo-small.png")); - //neutral->set_image(*resetImg); Gtk::Button* const neutral = Gtk::manage(new Gtk::Button(M("TP_COLORTONING_NEUTRAL"))); neutral->set_tooltip_text(M("TP_COLORTONING_NEUTRAL_TOOLTIP")); neutralconn = neutral->signal_pressed().connect(sigc::mem_fun(*this, &Wavelet::neutral_pressed)); @@ -1277,7 +1275,7 @@ Wavelet::Wavelet() : guidBox->pack_start(*CurveEditorwavguid); guidFrame->add(*guidBox); finalBox->pack_start(*guidFrame); - + //----------------------------- @@ -1584,7 +1582,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) } else if (pp->wavelet.slimethod == "cur") { slimethod->set_active(1); } - + if (pp->wavelet.quamethod == "cons") { quamethod->set_active(0); } else if (pp->wavelet.quamethod == "agre") { @@ -2053,7 +2051,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) } else { sup->hide(); } - + if (complexmethod->get_active_row_number() == 0) { updateGUIToMode(0); convertParamToNormal(); @@ -2061,7 +2059,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited) } else { updateGUIToMode(1); } - + } /***************************************************************************************************** @@ -3288,7 +3286,7 @@ void Wavelet::convertParamToNormal() cbenab->set_active(false); //final touchup - BAmethod->set_active(0); + BAmethod->set_active(0); sigmafin->setValue(def_params.sigmafin); enableListener(); @@ -3370,7 +3368,7 @@ void Wavelet::updateGUIToMode(int mode) void Wavelet::complexmethodChanged() -{ +{ if (complexmethod->get_active_row_number() == 0) { updateGUIToMode(0); convertParamToNormal(); @@ -3385,7 +3383,7 @@ void Wavelet::complexmethodChanged() } //void Wavelet::denmethodChanged() -//{ +//{ // // if (listener && (multiImage || getEnabled())) { // listener->panelChanged(EvWavdenmethod, denmethod->get_active_text()); @@ -3393,7 +3391,7 @@ void Wavelet::complexmethodChanged() //} void Wavelet::mixmethodChanged() -{ +{ if (listener && (multiImage || getEnabled())) { listener->panelChanged(EvWavmixmethod, mixmethod->get_active_text()); @@ -3401,8 +3399,8 @@ void Wavelet::mixmethodChanged() } void Wavelet::slimethodChanged() -{ - +{ + if (slimethod->get_active_row_number() == 0 && complexmethod->get_active_row_number() == 0) { updateGUIToMode(0); convertParamToNormal(); @@ -3418,7 +3416,7 @@ void Wavelet::slimethodChanged() CurveEditorwavnoiseh->show(); CurveEditorwavnoise->show(); } - + if (listener && (multiImage || getEnabled())) { listener->panelChanged(EvWavslimethod, slimethod->get_active_text()); @@ -3426,7 +3424,7 @@ void Wavelet::slimethodChanged() } void Wavelet::quamethodChanged() -{ +{ if (listener && (multiImage || getEnabled())) { listener->panelChanged(EvWavquamethod, quamethod->get_active_text()); diff --git a/rtgui/whitebalance.cc b/rtgui/whitebalance.cc index 761f2402a..63a1d2100 100644 --- a/rtgui/whitebalance.cc +++ b/rtgui/whitebalance.cc @@ -21,6 +21,7 @@ #include #include "rtimage.h" +#include "rtsurface.h" #include "options.h" #include "eventmapper.h" @@ -36,35 +37,8 @@ using namespace rtengine; using namespace rtengine::procparams; - const Glib::ustring WhiteBalance::TOOL_NAME = "whitebalance"; -Glib::RefPtr WhiteBalance::wbPixbufs[toUnderlying(WBEntry::Type::CUSTOM) + 1]; - -void WhiteBalance::init () -{ - wbPixbufs[toUnderlying(WBEntry::Type::CAMERA)] = RTImage::createPixbufFromFile ("wb-camera-small.png"); - wbPixbufs[toUnderlying(WBEntry::Type::AUTO)] = RTImage::createPixbufFromFile ("wb-auto-small.png"); - wbPixbufs[toUnderlying(WBEntry::Type::DAYLIGHT)] = RTImage::createPixbufFromFile ("wb-sun-small.png"); - wbPixbufs[toUnderlying(WBEntry::Type::CLOUDY)] = RTImage::createPixbufFromFile ("wb-cloudy-small.png"); - wbPixbufs[toUnderlying(WBEntry::Type::SHADE)] = RTImage::createPixbufFromFile ("wb-shade-small.png"); - wbPixbufs[toUnderlying(WBEntry::Type::WATER)] = RTImage::createPixbufFromFile ("wb-water-small.png"); - //wbPixbufs[toUnderlying(WBEntry::Type::WATER2)] = RTImage::createPixbufFromFile ("wb-water-small.png"); - wbPixbufs[toUnderlying(WBEntry::Type::TUNGSTEN)] = RTImage::createPixbufFromFile ("wb-tungsten-small.png"); - wbPixbufs[toUnderlying(WBEntry::Type::FLUORESCENT)] = RTImage::createPixbufFromFile ("wb-fluorescent-small.png"); - wbPixbufs[toUnderlying(WBEntry::Type::LAMP)] = RTImage::createPixbufFromFile ("wb-lamp-small.png"); - wbPixbufs[toUnderlying(WBEntry::Type::FLASH)] = RTImage::createPixbufFromFile ("wb-flash-small.png"); - wbPixbufs[toUnderlying(WBEntry::Type::LED)] = RTImage::createPixbufFromFile ("wb-led-small.png"); - wbPixbufs[toUnderlying(WBEntry::Type::CUSTOM)] = RTImage::createPixbufFromFile ("wb-custom-small.png"); -} - -void WhiteBalance::cleanup () -{ - for (int i = 0; i < toUnderlying(WBEntry::Type::CUSTOM) + 1; i++) { - wbPixbufs[i].reset(); - } -} - static double wbSlider2Temp(double sval) { @@ -149,6 +123,19 @@ static double wbTemp2Slider(double temp) WhiteBalance::WhiteBalance () : FoldableToolPanel(this, TOOL_NAME, M("TP_WBALANCE_LABEL"), true, true), wbp(nullptr), wblistener(nullptr) { + // Assign icon name to wbIcons + wbIcons[toUnderlying(WBEntry::Type::CAMERA)] = "wb-camera-small"; + wbIcons[toUnderlying(WBEntry::Type::AUTO)] = "wb-auto-small"; + wbIcons[toUnderlying(WBEntry::Type::DAYLIGHT)] = "wb-sun-small"; + wbIcons[toUnderlying(WBEntry::Type::CLOUDY)] = "wb-cloudy-small"; + wbIcons[toUnderlying(WBEntry::Type::SHADE)] = "wb-shade-small"; + wbIcons[toUnderlying(WBEntry::Type::WATER)] = "wb-water-small"; + wbIcons[toUnderlying(WBEntry::Type::TUNGSTEN)] = "wb-tungsten-small"; + wbIcons[toUnderlying(WBEntry::Type::FLUORESCENT)] = "wb-fluorescent-small"; + wbIcons[toUnderlying(WBEntry::Type::LAMP)] = "wb-lamp-small"; + wbIcons[toUnderlying(WBEntry::Type::FLASH)] = "wb-flash-small"; + wbIcons[toUnderlying(WBEntry::Type::LED)] = "wb-led-small"; + wbIcons[toUnderlying(WBEntry::Type::CUSTOM)] = "wb-custom-small"; Gtk::Grid* methodgrid = Gtk::manage(new Gtk::Grid()); methodgrid->get_style_context()->add_class("grid-spacing"); @@ -164,6 +151,15 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, TOOL_NAME, M("TP_WBALANC setExpandAlignProperties(method, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); // Assign the model to the Combobox method->set_model(refTreeModel); + method->clear(); // Clear default cell layout to add custom one + Gtk::CellRendererPixbuf* const renderer_icon = Gtk::manage(new Gtk::CellRendererPixbuf()); + renderer_icon->property_stock_size() = Gtk::ICON_SIZE_MENU; + method->pack_start(*renderer_icon, false); + method->add_attribute(*renderer_icon, "icon-name", methodColumns.colIcon); + Gtk::CellRendererText* const renderer_label = Gtk::manage(new Gtk::CellRendererText()); + renderer_label->property_ellipsize() = Pango::ELLIPSIZE_MIDDLE; + method->pack_start(*renderer_label, true); + method->add_attribute(*renderer_label, "markup", methodColumns.colLabel); WBEntry::Type oldType = WBParams::getWbEntries()[0].type; WBEntry::Type currType; @@ -175,7 +171,7 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, TOOL_NAME, M("TP_WBALANC if (currType == WBEntry::Type::FLUORESCENT) { // Creating the Fluorescent subcategory header row = *(refTreeModel->append()); - row[methodColumns.colIcon] = wbPixbufs[toUnderlying(currType)]; + row[methodColumns.colIcon] = wbIcons[toUnderlying(currType)]; row[methodColumns.colLabel] = M("TP_WBALANCE_FLUO_HEADER"); row[methodColumns.colId] = i + 100; } @@ -183,7 +179,7 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, TOOL_NAME, M("TP_WBALANC if (currType == WBEntry::Type::AUTO) { // Creating the auto category row = *(refTreeModel->append()); - row[methodColumns.colIcon] = wbPixbufs[toUnderlying(currType)]; + row[methodColumns.colIcon] = wbIcons[toUnderlying(currType)]; row[methodColumns.colLabel] = M("TP_WBALANCE_AUTO_HEADER"); row[methodColumns.colId] = i + 100; } @@ -191,7 +187,7 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, TOOL_NAME, M("TP_WBALANC if (currType == WBEntry::Type::WATER) { // Creating the under water subcategory header row = *(refTreeModel->append()); - row[methodColumns.colIcon] = wbPixbufs[toUnderlying(currType)]; + row[methodColumns.colIcon] = wbIcons[toUnderlying(currType)]; row[methodColumns.colLabel] = M("TP_WBALANCE_WATER_HEADER"); row[methodColumns.colId] = i + 100; } @@ -199,7 +195,7 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, TOOL_NAME, M("TP_WBALANC if (currType == WBEntry::Type::LAMP) { // Creating the Lamp subcategory header row = *(refTreeModel->append()); - row[methodColumns.colIcon] = wbPixbufs[toUnderlying(currType)]; + row[methodColumns.colIcon] = wbIcons[toUnderlying(currType)]; row[methodColumns.colLabel] = M("TP_WBALANCE_LAMP_HEADER"); row[methodColumns.colId] = i + 100; } @@ -207,7 +203,7 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, TOOL_NAME, M("TP_WBALANC if (currType == WBEntry::Type::LED) { // Creating the LED subcategory header row = *(refTreeModel->append()); - row[methodColumns.colIcon] = wbPixbufs[toUnderlying(currType)]; + row[methodColumns.colIcon] = wbIcons[toUnderlying(currType)]; row[methodColumns.colLabel] = M("TP_WBALANCE_LED_HEADER"); row[methodColumns.colId] = i + 100; } @@ -215,7 +211,7 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, TOOL_NAME, M("TP_WBALANC if (currType == WBEntry::Type::FLASH) { // Creating the Flash subcategory header row = *(refTreeModel->append()); - row[methodColumns.colIcon] = wbPixbufs[toUnderlying(currType)]; + row[methodColumns.colIcon] = wbIcons[toUnderlying(currType)]; row[methodColumns.colLabel] = M("TP_WBALANCE_FLASH_HEADER"); row[methodColumns.colId] = i + 100; } @@ -229,12 +225,12 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, TOOL_NAME, M("TP_WBALANC || currType == WBEntry::Type::AUTO ) { childrow = *(refTreeModel->append(row.children())); - childrow[methodColumns.colIcon] = wbPixbufs[toUnderlying(currType)]; + childrow[methodColumns.colIcon] = wbIcons[toUnderlying(currType)]; childrow[methodColumns.colLabel] = WBParams::getWbEntries()[i].GUILabel; childrow[methodColumns.colId] = i; } else { row = *(refTreeModel->append()); - row[methodColumns.colIcon] = wbPixbufs[toUnderlying(currType)]; + row[methodColumns.colIcon] = wbIcons[toUnderlying(currType)]; row[methodColumns.colLabel] = WBParams::getWbEntries()[i].GUILabel; row[methodColumns.colId] = i; } @@ -246,23 +242,16 @@ 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), - //rendering them in the default way: - method->pack_start(methodColumns.colIcon, false); - method->pack_start(methodColumns.colLabel, true); - - std::vector cells = method->get_cells(); - Gtk::CellRendererText* cellRenderer = dynamic_cast(cells.at(1)); - cellRenderer->property_ellipsize() = Pango::ELLIPSIZE_MIDDLE; - resetButton = Gtk::manage (new Gtk::Button()); // No label, keep it short setExpandAlignProperties(resetButton, false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); resetButton->set_relief(Gtk::RELIEF_NONE); resetButton->get_style_context()->add_class(GTK_STYLE_CLASS_FLAT); - resetButton->set_image (*Gtk::manage (new RTImage ("undo-small.png"))); + resetButton->set_image (*Gtk::manage (new RTImage ("undo-small", Gtk::ICON_SIZE_BUTTON))); method->set_active (0); // Camera methodgrid->attach (*lab, 0, 0, 1, 1); @@ -279,7 +268,7 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, TOOL_NAME, M("TP_WBALANC setExpandAlignProperties(spotbutton, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); spotbutton->get_style_context()->add_class("independent"); spotbutton->set_tooltip_text(M("TP_WBALANCE_SPOTWB")); - spotbutton->set_image (*Gtk::manage (new RTImage ("color-picker-small.png"))); + spotbutton->set_image (*Gtk::manage (new RTImage ("color-picker-small", Gtk::ICON_SIZE_BUTTON))); Gtk::Label* slab = Gtk::manage (new Gtk::Label (M("TP_WBALANCE_SIZE"))); setExpandAlignProperties(slab, false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); @@ -331,17 +320,21 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, TOOL_NAME, M("TP_WBALANC separator->get_style_context()->add_class("grid-row-separator"); pack_start (*separator, Gtk::PACK_SHRINK, 0); - Gtk::Image* itempL = Gtk::manage (new RTImage ("circle-blue-small.png")); - Gtk::Image* itempR = Gtk::manage (new RTImage ("circle-yellow-small.png")); - Gtk::Image* igreenL = Gtk::manage (new RTImage ("circle-magenta-small.png")); - Gtk::Image* igreenR = Gtk::manage (new RTImage ("circle-green-small.png")); - Gtk::Image* iblueredL = Gtk::manage (new RTImage ("circle-blue-small.png")); - Gtk::Image* iblueredR = Gtk::manage (new RTImage ("circle-red-small.png")); - Gtk::Image* itempbiasL = Gtk::manage (new RTImage ("circle-blue-small.png")); - Gtk::Image* itempbiasR = Gtk::manage (new RTImage ("circle-yellow-small.png")); + Gtk::Image* itempL = Gtk::manage (new RTImage ("circle-blue-small", Gtk::ICON_SIZE_BUTTON)); + Gtk::Image* itempR = Gtk::manage (new RTImage ("circle-yellow-small", Gtk::ICON_SIZE_BUTTON)); + Gtk::Image* igreenL = Gtk::manage (new RTImage ("circle-magenta-small", Gtk::ICON_SIZE_BUTTON)); + Gtk::Image* igreenR = Gtk::manage (new RTImage ("circle-green-small", Gtk::ICON_SIZE_BUTTON)); + Gtk::Image* iblueredL = Gtk::manage (new RTImage ("circle-blue-small", Gtk::ICON_SIZE_BUTTON)); + Gtk::Image* iblueredR = Gtk::manage (new RTImage ("circle-red-small", Gtk::ICON_SIZE_BUTTON)); + Gtk::Image* itempbiasL = Gtk::manage (new RTImage ("circle-blue-small", Gtk::ICON_SIZE_BUTTON)); + Gtk::Image* itempbiasR = Gtk::manage (new RTImage ("circle-yellow-small", Gtk::ICON_SIZE_BUTTON)); 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 +343,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,7 +357,35 @@ 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")); + + compatVersionAdjuster.reset(new Adjuster("", 0., procparams::WBParams::CURRENT_COMPAT_VERSION, 1., procparams::WBParams::CURRENT_COMPAT_VERSION)); + /* Gtk::Box* boxgreen = Gtk::manage (new Gtk::Box ()); boxgreen->show (); @@ -373,6 +394,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 +405,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 +453,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 +506,7 @@ void WhiteBalance::adjusterChanged(Adjuster* a, double newval) ( a == equal || a == tempBias + || a == itcwb_green ) && ppMethod.second.type == WBEntry::Type::AUTO ) @@ -467,12 +537,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 +581,7 @@ void WhiteBalance::checkBoxToggled(CheckBox* c, CheckValue newval) } } + void WhiteBalance::optChanged () { Gtk::TreeModel::Row row = getActiveMethod(); @@ -524,6 +599,8 @@ void WhiteBalance::optChanged () } StudLabel->hide(); mulLabel->show(); + PatchLabel->hide(); + PatchlevelLabel->hide(); if (opt != row[methodColumns.colId]) { @@ -535,6 +612,7 @@ void WhiteBalance::optChanged () equal->setEditedState (UnEdited); tempBias->setEditedState (UnEdited); observer10->setEdited(false); + compatVersionAdjuster->setEditedState(UnEdited); } else { unsigned int methodId = findWBEntryId (row[methodColumns.colLabel], WBLT_GUI); const WBEntry& currMethod = WBParams::getWbEntries()[methodId]; @@ -543,8 +621,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) { @@ -626,6 +712,17 @@ void WhiteBalance::optChanged () break; } + + if (compatVersionAdjuster->getIntValue() == 1 && + (!batchMode || currMethod.type != WBEntry::Type::AUTO)) { + // Safe to upgrade version because method changed. In batch + // mode, this method may be called even if there is no change, + // so it's only safe to upgrade if the new method is not auto. + compatVersionAdjuster->setValue(procparams::WBParams::CURRENT_COMPAT_VERSION); + if (batchMode) { + compatVersionAdjuster->setEditedState(Edited); + } + } } if (listener && getEnabled()) { @@ -638,6 +735,8 @@ void WhiteBalance::spotPressed () { StudLabel->hide(); mulLabel->show(); + PatchLabel->hide(); + PatchlevelLabel->hide(); if (wblistener) { wblistener->spotWBRequested (getSize()); @@ -663,6 +762,42 @@ 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); + + compatVersionAdjuster->setValue(pp->wb.compat_version); + + 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 +805,9 @@ 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); + compatVersionAdjuster->setEditedState(pedited->wb.compat_version ? Edited : UnEdited); } if (pedited && !pedited->wb.method) { @@ -780,11 +918,23 @@ 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); } - + } setEnabled(pp->wb.enabled); @@ -808,16 +958,33 @@ 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 (); + pedited->wb.compat_version = compatVersionAdjuster->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 +996,10 @@ 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 (); + pp->wb.compat_version = compatVersionAdjuster->getIntValue(); } void WhiteBalance::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited) @@ -837,6 +1007,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 +1030,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); } } @@ -875,6 +1048,7 @@ void WhiteBalance::setBatchMode (bool batchMode) green->showEditedCB (); equal->showEditedCB (); tempBias->showEditedCB (); + compatVersionAdjuster->showEditedCB(); Gtk::TreeModel::Row row = *(refTreeModel->append()); row[methodColumns.colId] = WBParams::getWbEntries().size(); row[methodColumns.colLabel] = M("GENERAL_UNCHANGED"); @@ -910,7 +1084,7 @@ void WhiteBalance::setWB (int vtemp, double vgreen) void WhiteBalance::resetWB () { - setActiveMethod("Camera"); + setActiveMethod(M("TP_WBALANCE_CAMERA")); } void WhiteBalance::setAdjusterBehavior (bool tempadd, bool greenadd, bool equaladd, bool tempbiasadd) @@ -1015,24 +1189,78 @@ 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, AWBMode aWBMode) { 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, aWBMode]() -> 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)) + ); + if (aWBMode == AWBMode::TEMP_CORRELATION_RAW) { + itcwb_green->set_sensitive(true); + tempBias->set_sensitive(true); + itcwb_alg->set_sensitive(true); + itcwb_prim->set_sensitive(true); + } else if (aWBMode == AWBMode::RGB_GREY) { + itcwb_green->set_sensitive(false); + tempBias->set_sensitive(true); + itcwb_alg->set_sensitive(false); + itcwb_prim->set_sensitive(false); + } else { + itcwb_green->set_sensitive(false); + tempBias->set_sensitive(false); + itcwb_alg->set_sensitive(false); + itcwb_prim->set_sensitive(false); + } temp->setDefault(temperature); green->setDefault(greenVal); enableListener(); diff --git a/rtgui/whitebalance.h b/rtgui/whitebalance.h index 56d8b646c..02706f7e5 100644 --- a/rtgui/whitebalance.h +++ b/rtgui/whitebalance.h @@ -46,13 +46,15 @@ class WhiteBalance final : public ToolParamBlock, public AdjusterListener, publi private: Gtk::Label* StudLabel; + Gtk::Label* PatchLabel; + Gtk::Label* PatchlevelLabel; Gtk::Label* mulLabel; protected: class MethodColumns : public Gtk::TreeModel::ColumnRecord { public: - Gtk::TreeModelColumn< Glib::RefPtr > colIcon; + Gtk::TreeModelColumn colIcon; Gtk::TreeModelColumn colLabel; Gtk::TreeModelColumn colId; MethodColumns() @@ -64,8 +66,11 @@ 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::ustring wbIcons[rtengine::toUnderlying(rtengine::procparams::WBEntry::Type::CUSTOM) + 1]; Glib::RefPtr refTreeModel; MethodColumns methodColumns; MyComboBox* method; @@ -76,6 +81,13 @@ protected: Adjuster* equal; Adjuster* tempBias; CheckBox* observer10; + Gtk::Frame* itcwbFrame; + Gtk::CheckButton* itcwb_alg; + MyComboBoxText* itcwb_prim; + Adjuster* itcwb_green; + std::unique_ptr compatVersionAdjuster; + + bool lastitcwb_alg; Gtk::Button* spotbutton; int opt; @@ -83,7 +95,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; @@ -108,8 +120,6 @@ public: WhiteBalance (); ~WhiteBalance () override; - static void init (); - static void cleanup (); void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr) override; void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr) override; void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr) override; @@ -131,8 +141,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, AWBMode aWBMode) 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/rtgui/zoompanel.cc b/rtgui/zoompanel.cc index c10ec97b9..a683870c9 100644 --- a/rtgui/zoompanel.cc +++ b/rtgui/zoompanel.cc @@ -25,15 +25,15 @@ ZoomPanel::ZoomPanel (ImageArea* iarea) : iarea(iarea) { set_name ("EditorZoomPanel"); - Gtk::Image* imageOut = Gtk::manage (new RTImage ("magnifier-minus.png")); + Gtk::Image* imageOut = Gtk::manage (new RTImage ("magnifier-minus", Gtk::ICON_SIZE_LARGE_TOOLBAR)); imageOut->set_padding(0, 0); - Gtk::Image* imageIn = Gtk::manage (new RTImage ("magnifier-plus.png")); + Gtk::Image* imageIn = Gtk::manage (new RTImage ("magnifier-plus", Gtk::ICON_SIZE_LARGE_TOOLBAR)); imageIn->set_padding(0, 0); - Gtk::Image* image11 = Gtk::manage ( new RTImage ("magnifier-1to1.png")); + Gtk::Image* image11 = Gtk::manage ( new RTImage ("magnifier-1to1", Gtk::ICON_SIZE_LARGE_TOOLBAR)); image11->set_padding(0, 0); - Gtk::Image* imageFit = Gtk::manage (new RTImage ("magnifier-fit.png")); + Gtk::Image* imageFit = Gtk::manage (new RTImage ("magnifier-fit", Gtk::ICON_SIZE_LARGE_TOOLBAR)); imageFit->set_padding(0, 0); - Gtk::Image* imageFitCrop = Gtk::manage (new RTImage ("magnifier-crop.png")); + Gtk::Image* imageFitCrop = Gtk::manage (new RTImage ("magnifier-crop", Gtk::ICON_SIZE_LARGE_TOOLBAR)); imageFit->set_padding(0, 0); zoomOut = Gtk::manage (new Gtk::Button()); @@ -67,7 +67,7 @@ ZoomPanel::ZoomPanel (ImageArea* iarea) : iarea(iarea) setExpandAlignProperties(zoomLabel, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_FILL); attach_next_to (*zoomLabel, Gtk::POS_RIGHT, 1, 1); - Gtk::Image* imageCrop = Gtk::manage (new RTImage ("window-add.png")); + Gtk::Image* imageCrop = Gtk::manage (new RTImage ("window-add", Gtk::ICON_SIZE_LARGE_TOOLBAR)); imageCrop->set_padding(0, 0); newCrop = Gtk::manage (new Gtk::Button()); newCrop->add (*imageCrop); 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/INSTALL.readme.rtf b/tools/osx/INSTALL.readme.rtf index 6c8f2e334..dea38c37f 100644 --- a/tools/osx/INSTALL.readme.rtf +++ b/tools/osx/INSTALL.readme.rtf @@ -1,7 +1,14 @@ -To use the RawTherapee Application: - You must drag the app from the .dmg into the /Applications folder. +To install the RawTherapee application: + +1. Open the RawTherapee .dmg Disk Image included alongside this document. +2. Drag the RawTherapee icon onto the /Applications folder icon + +To run the RawTherapee application: + +1. Open the /Applications folder. +2. Double-click the RawTherapee icon. If you wish to use the Command-Line Interface: - An unsigned -cli is in the zip along with the .dmg. - You must install the app from the .dmg into /Applications and copy the -cli to your /usr/local/bin. + An -cli is in the zip along with the .dmg. + You must first install the app from the .dmg into /Applications and copy the -cli to your /usr/local/bin. The -cli will load its libraries dynamically from the app in /Applications. diff --git a/tools/osx/Info.plist.in b/tools/osx/Info.plist.in index 876d35e3a..2faa69f83 100644 --- a/tools/osx/Info.plist.in +++ b/tools/osx/Info.plist.in @@ -73,6 +73,8 @@ arw CR2 cr2 + CR3 + cr3 CRF crf CRW diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index ca381ec14..bd0dcf3e1 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" "${@}" @@ -63,14 +63,14 @@ if [[ -x $(which git) && -d $PROJECT_SOURCE_DIR/.git ]]; then # Depending on whether you checked out a branch (dev) or a tag (release), # "git describe" will return "5.0-gtk2-2-g12345678" or "5.0-gtk2", respectively. gitDescribe="$(git describe --tags --always)" - + # Apple requires a numeric version of the form n.n.n # https://goo.gl/eWDQv6 - + # Get number of commits since tagging. This is what gitDescribe uses. # Works when checking out branch, tag or commit. gitCommitsSinceTag="$(git rev-list --count HEAD --not $(git tag --merged HEAD))" - + # Create numeric version. # This version is nonsense, either don't use it at all or use it only where you have no other choice, e.g. Inno Setup's VersionInfoVersion. # Strip everything after hyphen, e.g. "5.0-gtk2" -> "5.0", "5.1-rc1" -> "5.1" (ergo BS). @@ -81,7 +81,7 @@ if [[ -x $(which git) && -d $PROJECT_SOURCE_DIR/.git ]]; then gitVersionNumericBS="${gitVersionNumericBS}.${gitCommitsSinceTag}" # Remove everything until after first hyphen: 5.0 fi ### Copy end. - + PROJECT_FULL_VERSION="$gitDescribe" PROJECT_VERSION="$gitVersionNumericBS" fi @@ -155,8 +155,9 @@ fi # In: OSX_CONTINUOUS:BOOL=ON # Out: ON -OSX_CONTINUOUS="$(cmake .. -L -N | grep OSX_CONTINUOUS)"; NIGHTLY="${OSX_CONTINUOUS#*=}" && CONTINUOUS="${OSX_CONTINUOUS#*=}" +OSX_CONTINUOUS="$(cmake .. -L -N | grep OSX_CONTINUOUS)"; CONTINUOUS="${OSX_CONTINUOUS#*=}" if [[ -n $CONTINUOUS ]]; then + NIGHTLY="${OSX_CONTINUOUS#*=}" echo "Continuous/generically-named zip is ON." fi @@ -216,17 +217,14 @@ CheckLink "${EXECUTABLE}" 2>&1 # dylib install names ModifyInstallNames 2>&1 -## Copy libexpat into the app bundle (which is keg-only) -## if [[ -d /usr/local/Cellar/expat ]]; then ditto /usr/local/Cellar/expat/*/lib/libexpat.1.dylib "${CONTENTS}/Frameworks"; else cp "${EXPATLIB}" "${CONTENTS}/Frameworks/libexpat.1.dylib"; fi - -## Copy libz into the app bundle -## cp ${LOCAL_PREFIX}/lib/libz.1.dylib "${CONTENTS}/Frameworks" - # 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" @@ -254,12 +252,8 @@ ditto {"${LOCAL_PREFIX}","${RESOURCES}"}/share/themes/Default/gtk-3.0/gtk-keys.c # Adwaita icons msg "Copy Adwaita icons" -iconfolders=("16x16/actions" "16x16/devices" "16x16/mimetypes" "16x16/places" "16x16/status" "16x16/ui" "48x48/devices") -for f in "${iconfolders[@]}"; do - mkdir -p ${RESOURCES}/share/icons/Adwaita/${f} - cp -RL ${LOCAL_PREFIX}/share/icons/Adwaita/${f}/* "${RESOURCES}"/share/icons/Adwaita/${f} -done -cp -RL {"${LOCAL_PREFIX}","${RESOURCES}"}/share/icons/Adwaita/index.theme +mkdir -p ${RESOURCES}/share/icons/Adwaita +cp -RL ${LOCAL_PREFIX}/share/icons/Adwaita/* "${RESOURCES}"/share/icons/Adwaita/ "${LOCAL_PREFIX}/bin/gtk-update-icon-cache" "${RESOURCES}/share/icons/Adwaita" || "${LOCAL_PREFIX}/bin/gtk-update-icon-cache-3.0" "${RESOURCES}/share/icons/Adwaita" cp -RL "${LOCAL_PREFIX}/share/icons/hicolor" "${RESOURCES}/share/icons/hicolor" @@ -292,7 +286,6 @@ ditto "${PROJECT_SOURCE_DIR}/rtdata/fonts" "${ETC}/fonts" # App bundle resources ditto "${PROJECT_SOURCE_DATA_DIR}/"{rawtherapee,profile}.icns "${RESOURCES}" -#ditto "${PROJECT_SOURCE_DATA_DIR}/PkgInfo" "${CONTENTS}" update-mime-database -V "${RESOURCES}/share/mime" cp -RL "${LOCAL_PREFIX}/share/locale" "${RESOURCES}/share/locale" @@ -316,7 +309,10 @@ 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}"/.. + +# Link to libomp instead of libgomp +sudo install_name_tool -change /Applications/RawTherapee.app/Contents/Frameworks/libgomp.1.dylib /Applications/RawTherapee.app/Contents/Frameworks/libomp.dylib RawTherapee.app/Contents/Frameworks/libfftw3f_omp.3.dylib +rm RawTherapee.app/Contents/Frameworks/libgomp.1.dylib # Merge the app with the other architecture to create the Universal app. if [[ -n $UNIVERSAL_URL ]]; then @@ -324,7 +320,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/*folder/*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) @@ -341,16 +337,19 @@ if [[ -n $UNIVERSAL_URL ]]; then cat RawTherapee-arm64.app/Contents/Resources/AboutThisBuild.txt >> RawTherapee.app/Contents/Resources/AboutThisBuild.txt fi cmake -DPROJECT_SOURCE_DATA_DIR=${PROJECT_SOURCE_DATA_DIR} -DCONTENTS=${CONTENTS} -Dversion=${PROJECT_FULL_VERSION} -DshortVersion=${PROJECT_VERSION} -Dminimum_arm64_version=${minimum_arm64_version} -Dminimum_x86_64_version=${minimum_x86_64_version} -Darch=${arch} -P ${PROJECT_SOURCE_DATA_DIR}/info-plist.cmake + plutil -convert xml1 ${APP}/Contents/Info.plist 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,8 +362,26 @@ 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}" - codesign --force --deep --timestamp --strict -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --entitlements "${CMAKE_BUILD_TYPE}"/rt.entitlements "${APP}" + plutil -convert xml1 "${CMAKE_BUILD_TYPE}"/rt.entitlements + for frame in ${APP}/Contents/Frameworks/* ; do + echo $frame + codesign --preserve-metadata=identifier --digest-algorithm=sha1,sha256 --force --timestamp --strict -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --entitlements "${CMAKE_BUILD_TYPE}"/rt.entitlements $frame + done + for resource in ${APP}/Contents/Resources/* ; do + echo $resource + if [ ! -d $resource ]; then + codesign --preserve-metadata=identifier --digest-algorithm=sha1,sha256 --force --timestamp --strict -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --entitlements "${CMAKE_BUILD_TYPE}"/rt.entitlements $resource + else + for subresource in ${APP}/Contents/Resources/$(basename $resource)/* ; do + if [ ! -d $subresource ]; then + codesign --preserve-metadata=identifier --digest-algorithm=sha1,sha256 --force --timestamp --strict -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --entitlements "${CMAKE_BUILD_TYPE}"/rt.entitlements $subresource + fi + done + fi + done + codesign --preserve-metadata=identifier --digest-algorithm=sha1,sha256 --force --timestamp --strict -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --entitlements "${CMAKE_BUILD_TYPE}"/rt.entitlements "${APP}"/Contents/MacOS/rawtherapee-cli + codesign --preserve-metadata=identifier --digest-algorithm=sha1,sha256 --force --timestamp --strict -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --entitlements "${CMAKE_BUILD_TYPE}"/rt.entitlements "${APP}"/Contents/MacOS/rawtherapee + codesign --preserve-metadata=identifier --digest-algorithm=sha1,sha256 --force --timestamp --strict -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --entitlements "${CMAKE_BUILD_TYPE}"/rt.entitlements "${APP}" spctl -a -vvvv "${APP}" fi @@ -378,12 +395,12 @@ fi function CreateDmg { local srcDir="$(mktemp -dt $$.XXXXXXXXXXXX)" - + msg "Preparing disk image sources at ${srcDir}:" cp -R "${APP}" "${srcDir}" cp "${RESOURCES}"/LICENSE "${srcDir}" ln -s /Applications "${srcDir}" - + # Web bookmarks function CreateWebloc { defaults write "${srcDir}/$1" URL "$2" @@ -393,7 +410,7 @@ function CreateDmg { CreateWebloc 'Documentation' 'https://rawpedia.rawtherapee.com/' CreateWebloc 'Forum' 'https://discuss.pixls.us/c/software/rawtherapee' CreateWebloc 'Report Bug' 'https://github.com/Beep6581/RawTherapee/issues/new' - + # Disk image name if [[ -n $UNIVERSAL_URL ]]; then arch="Universal" @@ -403,33 +420,44 @@ function CreateDmg { if [[ $lower_build_type != release ]]; then dmg_name="${dmg_name}_${lower_build_type}" fi - + msg "Creating disk image:" - if [[ ! -z $FANCY_DMG ]]; then + if [[ $FANCY_DMG == "ON" ]]; then echo "Building Fancy .dmg" - mkdir "${srcDir}/.background" - cp -R "${PROJECT_SOURCE_DATA_DIR}/rtdmg.icns" "${srcDir}/.VolumeIcon.icns" - cp -R "${PROJECT_SOURCE_DATA_DIR}/rtdmg-bkgd.png" "${srcDir}/.background/background.png" - SetFile -c incC "${srcDir}/.VolumeIcon.icns" - create-dmg "${dmg_name}.dmg" "${srcDir}" \ - --volname "${PROJECT_NAME}_${PROJECT_FULL_VERSION}" \ - --appname "${PROJECT_NAME}" \ - --volicon "${srcDir}/.VolumeIcon.icns" \ - --sandbox-safe \ + create-dmg \ + --background ${PROJECT_SOURCE_DATA_DIR}/rtdmg-bkgd.png \ + --volname ${PROJECT_NAME}_${PROJECT_FULL_VERSION} \ + --volicon ${PROJECT_SOURCE_DATA_DIR}/rtdmg.icns \ + --window-pos 72 72 \ + --window-size 1000 689 \ + --text-size 16 \ + --icon-size 80 \ + --icon LICENSE 810 0 \ + --icon RawTherapee.app 250 178 \ + --icon Applications 700 178 \ + --icon Website.webloc 300 423 \ + --icon Forum.webloc 420 423 \ + --icon Report\ Bug.webloc 540 423 \ + --icon Documentation.webloc 680 423 \ --no-internet-enable \ - --eula LICENSE.txt \ + --eula ${PROJECT_SOURCE_DATA_DIR}/../../LICENSE \ --hdiutil-verbose \ - --rez /Library/Developer/CommandLineTools/usr/bin/Rez + --hide-extension Website.webloc \ + --hide-extension Report\ Bug.webloc \ + --hide-extension Forum.webloc \ + --hide-extension Documentation.webloc \ + --filesystem APFS \ + ${dmg_name}.dmg ${srcDir} else hdiutil create -format UDBZ -fs HFS+ -srcdir "${srcDir}" -volname "${PROJECT_NAME}_${PROJECT_FULL_VERSION}" "${dmg_name}.dmg" fi - + # Sign disk image if [[ -n $CODESIGNID ]]; then msg "Signing disk image" - codesign --deep --force -v -s "${CODESIGNID}" --timestamp "${dmg_name}.dmg" + codesign --digest-algorithm=sha1,sha256 --force -v -s "${CODESIGNID}" --timestamp "${dmg_name}.dmg" fi - + # Notarize the dmg if ! test -z "$NOTARY"; then msg "Notarizing the dmg:" @@ -437,11 +465,13 @@ function CreateDmg { echo "Uploading..." sudo xcrun notarytool submit "${dmg_name}.dmg.zip" ${NOTARY} --wait fi - + # 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" + mv "${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}_folder/INSTALL.readme.rtf" "${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}_folder/install-readme.txt" + 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" @@ -457,4 +487,8 @@ function CreateDmg { CreateDmg msg "Finishing build:" +# Clean up items +rm *app.zip +rm *dmg.zip +rm univ.zip echo "Script complete." diff --git a/tools/osx/rtdmg-bkgd.png b/tools/osx/rtdmg-bkgd.png index ecd9b9d42..a8be0cec6 100644 Binary files a/tools/osx/rtdmg-bkgd.png and b/tools/osx/rtdmg-bkgd.png differ diff --git a/tools/win/InnoSetup/WindowsInnoSetup.iss.in b/tools/win/InnoSetup/WindowsInnoSetup.iss.in index 954d39991..a80925d72 100644 --- a/tools/win/InnoSetup/WindowsInnoSetup.iss.in +++ b/tools/win/InnoSetup/WindowsInnoSetup.iss.in @@ -119,7 +119,7 @@ Source: "{#MyBuildBasePath}\*.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "{#MyBuildBasePath}\gspawn-win{#MyBitDepth}-helper.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "{#MyBuildBasePath}\gspawn-win{#MyBitDepth}-helper-console.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "{#MyBuildBasePath}\gdb.exe"; DestDir: "{app}"; Flags: skipifsourcedoesntexist ignoreversion -Source: "{#MyBuildBasePath}\fonts\DroidSansMonoSlashed.ttf"; DestDir: "{fonts}"; FontInstall: "Droid Sans Mono Slashed"; Flags: onlyifdoesntexist uninsneveruninstall +;Source: "{#MyBuildBasePath}\fonts\DroidSansMonoSlashed.ttf"; DestDir: "{fonts}"; FontInstall: "Droid Sans Mono Slashed"; Flags: onlyifdoesntexist uninsneveruninstall ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons]