diff --git a/CMakeLists.txt b/CMakeLists.txt index 3b5dbc665..68eeccd5f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -683,7 +683,7 @@ if(WIN32) elseif(APPLE) set( ABOUT_COMMAND_WITH_ARGS - cmake + ${CMAKE_COMMAND} -DPROJECT_SOURCE_DIR:STRING=${PROJECT_SOURCE_DIR} -DCACHE_NAME_SUFFIX:STRING=${CACHE_NAME_SUFFIX} -P ${PROJECT_SOURCE_DIR}/UpdateInfo.cmake diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f94454b63..041b273df 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,6 +16,7 @@ The most useful feedback is based on the latest development code, and in the cas - Announce and discuss your plans in GitHub before starting work. - Work in a new branch. Fork if necessary. - Keep branches small so that completed and working features can be merged into the "dev" branch often, and so that they can be abandoned if they head in the wrong direction. +- Documentation for your work must be provided in order for your branch to be merged if it changes or adds anything the user should know about. The documentation can be provided in plain-text or markdown form as a comment in the issue or pull request. - Use C++11. - To break header dependencies use forward declarations as much as possible. See [#5197](https://github.com/Beep6581/RawTherapee/pull/5197#issuecomment-468938190) for some tips. - The naming isn't homogeneous throughout the code but here is a rough guideline: diff --git a/licenses/sleef_LICENSE.txt b/licenses/sleef_LICENSE.txt new file mode 100644 index 000000000..8170d3224 --- /dev/null +++ b/licenses/sleef_LICENSE.txt @@ -0,0 +1,30 @@ +============================================================================= +Boost Software License - Version 1.0 + +This license applies to selected portions of the software derived from SLEEF +(https://sleef.org/), as noted in the applicable source file headers. +============================================================================= + +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/rtdata/languages/Chinese (Simplified) b/rtdata/languages/Chinese (Simplified) index 11a478c22..9e2990aa1 100644 --- a/rtdata/languages/Chinese (Simplified) +++ b/rtdata/languages/Chinese (Simplified) @@ -11,11 +11,18 @@ ABOUT_TAB_CREDITS;致谢名单 ABOUT_TAB_LICENSE;授权协议 ABOUT_TAB_RELEASENOTES;发布说明 ABOUT_TAB_SPLASH;启动页 +ADJUSTER_RESET_TO_DEFAULT;单击-恢复默认值\nCtrl+单击-恢复初始值 BATCH_PROCESSING;批量处理 +CURVEEDITOR_AXIS_IN;I: +CURVEEDITOR_AXIS_LEFT_TAN;LT: +CURVEEDITOR_AXIS_OUT;O: +CURVEEDITOR_AXIS_RIGHT_TAN;RT: +CURVEEDITOR_CATMULLROM;灵活 CURVEEDITOR_CURVE;曲线 CURVEEDITOR_CURVES;曲线 CURVEEDITOR_CUSTOM;自定义 CURVEEDITOR_DARKS;暗 +CURVEEDITOR_EDITPOINT_HINT;启用对于节点进/出值的编辑\n\n右击节点以选中\n右击空白处以取消选中节点 CURVEEDITOR_HIGHLIGHTS;高光 CURVEEDITOR_LIGHTS;光 CURVEEDITOR_LINEAR;线性 @@ -47,6 +54,8 @@ DYNPROFILEEDITOR_NEW;新建 DYNPROFILEEDITOR_NEW_RULE;新建动态配置规则 DYNPROFILEEDITOR_PROFILE;处理配置规则 EDITWINDOW_TITLE;图片修改 +EDIT_OBJECT_TOOLTIP;在预览窗口中展示一个允许你调整本工具的可视窗口。 +EDIT_PIPETTE_TOOLTIP;要向曲线添加调整点,点击此按钮,按住Ctrl键并用鼠标左键点击图像预览中你想调整的地方。\n要调整点的位置,按住Ctrl键并用鼠标左键点击图像预览中的对应位置,然后松开Ctrl(除非你希望精调)同时按住鼠标左键,将鼠标向上/下移动以上下调整曲线中的点。 EXIFFILTER_APERTURE;光圈 EXIFFILTER_CAMERA;相机 EXIFFILTER_EXPOSURECOMPENSATION;曝光补偿值 (EV) @@ -79,9 +88,9 @@ EXPORT_BYPASS_DIRPYRDENOISE;跳过降噪处理 EXPORT_BYPASS_DIRPYREQUALIZER;跳过分频反差调整 EXPORT_BYPASS_EQUALIZER;跳过小波层级处理 EXPORT_BYPASS_RAW_CA;跳过 [raw] 色差矫正 +EXPORT_BYPASS_RAW_CCSTEPS;跳过 [raw] 伪色抑制 EXPORT_BYPASS_RAW_DCB_ENHANCE;跳过 [raw] DCB优化步长 EXPORT_BYPASS_RAW_DCB_ITERATIONS;跳过 [raw] DCB迭代 -EXPORT_BYPASS_RAW_CCSTEPS;跳过 [raw] 伪色抑制 EXPORT_BYPASS_RAW_DF;跳过 [raw] 暗场处理 EXPORT_BYPASS_RAW_FF;跳过 [raw] 平场 EXPORT_BYPASS_RAW_GREENTHRESH;跳过 [raw] 绿平衡 @@ -106,13 +115,22 @@ FILEBROWSER_APPLYPROFILE;应用配置 FILEBROWSER_APPLYPROFILE_PARTIAL;部分应用配置 FILEBROWSER_AUTODARKFRAME;自动暗场 FILEBROWSER_AUTOFLATFIELD;自动平场 +FILEBROWSER_BROWSEPATHBUTTONHINT;点击以打开路径,刷新文件夹并搜索“查找”框中的关键词 +FILEBROWSER_BROWSEPATHHINT;输入你想前往的路径。\n\n快捷键:\nCtrl-o 让文本框获得焦点\nEnter / Ctrl-Enter 前往输入的目录\nEsc 清除改动\nShift-Esc 让文本框失去焦点\n\n路径快捷键:\n~ - 用户的home/文档路径\n! - 用户的图片路径 FILEBROWSER_CACHE;缓存 +FILEBROWSER_CACHECLEARFROMFULL;清除全部,包括缓存文件 +FILEBROWSER_CACHECLEARFROMPARTIAL;清除全部,不包括缓存文件 FILEBROWSER_CLEARPROFILE;清空 +FILEBROWSER_COLORLABEL_TOOLTIP;颜色标记,\n\n使用下拉菜单或快捷键:\nShift-Ctrl-0 无颜色\nShift-Ctrl-1 红\nShift-Ctrl-2 黄\nShift-Ctrl-3 绿\nShift-Ctrl-4 蓝\nShift-Ctrl-5 紫 FILEBROWSER_COPYPROFILE;复制 FILEBROWSER_CURRENT_NAME;当前名称: FILEBROWSER_DARKFRAME;暗场 +FILEBROWSER_DELETEDIALOG_ALL;你确定要永久删除%1个垃圾桶中的文件吗? FILEBROWSER_DELETEDIALOG_HEADER;删除确认 +FILEBROWSER_DELETEDIALOG_SELECTED;你希望永久删除%1个被选中的文件吗? +FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;你希望永久删除%1个被选中的文件,包括已进行过队列处理的版本吗? FILEBROWSER_EMPTYTRASH;清空垃圾箱 +FILEBROWSER_EMPTYTRASHHINT;永久删除垃圾桶的所有文件 FILEBROWSER_EXTPROGMENU;打开方式 FILEBROWSER_FLATFIELD;平场 FILEBROWSER_MOVETODARKFDIR;移动到暗场路径 @@ -146,12 +164,15 @@ FILEBROWSER_POPUPRANK2;评2星 FILEBROWSER_POPUPRANK3;评3星 FILEBROWSER_POPUPRANK4;评4星 FILEBROWSER_POPUPRANK5;评5星 +FILEBROWSER_POPUPREMOVE;永久删除 +FILEBROWSER_POPUPREMOVEINCLPROC;永久删除,包括队列处理的版本 FILEBROWSER_POPUPRENAME;重命名 FILEBROWSER_POPUPSELECTALL;全部选中 FILEBROWSER_POPUPTRASH;移动到垃圾箱 FILEBROWSER_POPUPUNRANK;取消星级 FILEBROWSER_POPUPUNTRASH;从垃圾箱中移除 FILEBROWSER_QUERYBUTTONHINT;清除搜索队列 +FILEBROWSER_QUERYHINT;输入文件名进行搜索。支持不完整文件名。使用英文逗号分割关键词,例:\n1001,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 @@ -162,17 +183,29 @@ FILEBROWSER_RENAMEDLGLABEL;文件重命名 FILEBROWSER_RESETDEFAULTPROFILE;还原到默认 FILEBROWSER_SELECTDARKFRAME;选择暗场… FILEBROWSER_SELECTFLATFIELD;选择平场… +FILEBROWSER_SHOWCOLORLABEL1HINT;显示被标记为红色的照片\n快捷键:Alt-1 +FILEBROWSER_SHOWCOLORLABEL2HINT;显示被标记为黄色的照片\n快捷键:Alt-2 +FILEBROWSER_SHOWCOLORLABEL3HINT;显示被标记为绿色的照片\n快捷键:Alt-3 +FILEBROWSER_SHOWCOLORLABEL4HINT;显示被标记为蓝色的照片\n快捷键:Alt-4 +FILEBROWSER_SHOWCOLORLABEL5HINT;显示被标记为紫色的照片\n快捷键:Alt-5 FILEBROWSER_SHOWDIRHINT;显示文件夹中所有图片 +FILEBROWSER_SHOWEDITEDHINT;显示已编辑的照片\n快捷键:7 +FILEBROWSER_SHOWEDITEDNOTHINT;显示未编辑的照片\n快捷键:6 FILEBROWSER_SHOWEXIFINFO;显示Exif信息\n\n快捷键:\ni - 多编辑标签页模式, \nAlt-i - 单编辑标签模式 +FILEBROWSER_SHOWNOTTRASHHINT;仅显示未进入垃圾箱的照片 +FILEBROWSER_SHOWORIGINALHINT;仅显示原图\n\n当多张文件名相同,但扩展名不同的图片存在时,在参数设置-文件浏览器-已知扩展名列表中,扩展名排得更靠上的图片会被当作这些图片的原图。 FILEBROWSER_SHOWRANK1HINT;显示1星图片 FILEBROWSER_SHOWRANK2HINT;显示2星图片 FILEBROWSER_SHOWRANK3HINT;显示3星图片 FILEBROWSER_SHOWRANK4HINT;显示4星图片 FILEBROWSER_SHOWRANK5HINT;显示5星图片 FILEBROWSER_SHOWRECENTLYSAVEDHINT;显示保存的图片\n快捷键:Alt-7 +FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;显示未保存的图片\n快捷键:Alt-6 FILEBROWSER_SHOWTRASHHINT;显示垃圾箱内容 +FILEBROWSER_SHOWUNCOLORHINT;显示没有颜色标记的照片\n快捷键:Alt-0 FILEBROWSER_SHOWUNRANKHINT;显示未评星图片 FILEBROWSER_THUMBSIZE;缩略图大小 +FILEBROWSER_UNRANK_TOOLTIP;未评级\n快捷键:Shift-0 FILEBROWSER_ZOOMINHINT;增大缩略图 FILEBROWSER_ZOOMOUTHINT;缩小缩略图 FILECHOOSER_FILTER_ANY;所有文件 @@ -190,11 +223,13 @@ GENERAL_AUTO;自动 GENERAL_BEFORE;处理前 GENERAL_CANCEL;取消 GENERAL_CLOSE;关闭 +GENERAL_CURRENT;当前 GENERAL_DISABLE;禁用 GENERAL_DISABLED;禁用 GENERAL_ENABLE;启用 GENERAL_ENABLED;开启 GENERAL_FILE;文件 +GENERAL_HELP;帮助 GENERAL_LANDSCAPE;横向 GENERAL_NA;不适用 GENERAL_NO;否 @@ -202,13 +237,20 @@ GENERAL_NONE;无 GENERAL_OK;确定 GENERAL_OPEN;打开 GENERAL_PORTRAIT;纵向 +GENERAL_RESET;重置 GENERAL_SAVE;保存 +GENERAL_SLIDER;滑条 GENERAL_UNCHANGED;(不改变) GENERAL_WARNING;警告 +GIMP_PLUGIN_INFO;欢迎使用RawTherapee的GIMP插件!\n当你完成编辑后,关闭RawTherapee主窗口,图片就会被自动导入到GIMP中 HISTOGRAM_TOOLTIP_B;显示/隐藏 蓝色直方图 +HISTOGRAM_TOOLTIP_BAR;显示/隐藏RGB指示条 +HISTOGRAM_TOOLTIP_CHRO;显示/隐藏色度直方图 HISTOGRAM_TOOLTIP_G;显示/隐藏 绿色直方图 HISTOGRAM_TOOLTIP_L;显示/隐藏 CIELAB 亮度直方图 +HISTOGRAM_TOOLTIP_MODE;将直方图显示模式切换为线性/对数线性/双对数 HISTOGRAM_TOOLTIP_R;显示/隐藏 红色直方图 +HISTOGRAM_TOOLTIP_RAW;显示/隐藏Raw直方图 HISTORY_CHANGED;已更改 HISTORY_CUSTOMCURVE;自定义曲线 HISTORY_FROMCLIPBOARD;从剪贴板 @@ -298,14 +340,41 @@ HISTORY_MSG_82;档案修改 HISTORY_MSG_83;阴影/高光-锐度蒙板 HISTORY_MSG_84;视角矫正 HISTORY_MSG_85;镜头矫正-LCP档案 +HISTORY_MSG_86;RGB曲线-色度模式 +HISTORY_MSG_87;脉冲噪声降低 +HISTORY_MSG_88;脉冲降噪阈值 HISTORY_MSG_89;降噪 HISTORY_MSG_90;降噪-亮度 +HISTORY_MSG_91;降噪-色度主控 HISTORY_MSG_92;降噪-伽马 +HISTORY_MSG_93;CbDL-数值 +HISTORY_MSG_94;分频反差调整(CbDL) +HISTORY_MSG_95;L*a*b*-色度 +HISTORY_MSG_96;L*a*b*-a* 曲线 +HISTORY_MSG_97;L*a*b*-b* 曲线 +HISTORY_MSG_98;去马赛克方法 +HISTORY_MSG_99;热像素过滤器 +HISTORY_MSG_100;曝光-饱和度 +HISTORY_MSG_101;HSV-色度(Hue) +HISTORY_MSG_102;HSV-饱和度(Saturation) HISTORY_MSG_103;HSV-数值 +HISTORY_MSG_104;HSV均衡器 +HISTORY_MSG_105;去除色边 +HISTORY_MSG_106;去除色边-半径 +HISTORY_MSG_107;去除色边-阈值 +HISTORY_MSG_108;曝光-高光压缩阈值 +HISTORY_MSG_109;调整大小-边界限制网格 +HISTORY_MSG_110;调整大小-应用到 HISTORY_MSG_111;Lab-避免色彩偏移 HISTORY_MSG_113;Lab-保护 HISTORY_MSG_114;DCB 迭代 +HISTORY_MSG_115;伪色抑制 +HISTORY_MSG_116;DCB增强 +HISTORY_MSG_117;Raw色差矫正-红 +HISTORY_MSG_118;Raw色差矫正-蓝 HISTORY_MSG_119;线状噪点过滤器 +HISTORY_MSG_120;绿平衡 +HISTORY_MSG_121;Raw色差矫正-自动 HISTORY_MSG_122;自动暗场 HISTORY_MSG_123;暗场文件 HISTORY_MSG_124;线性曝光修正 @@ -314,15 +383,54 @@ HISTORY_MSG_127;平场自动选择 HISTORY_MSG_128;平场模糊半径 HISTORY_MSG_129;平场模糊类型 HISTORY_MSG_130;自动扭曲纠正 +HISTORY_MSG_131;降噪-亮度 +HISTORY_MSG_132;降噪-色度 +HISTORY_MSG_142;边缘锐化-迭代 +HISTORY_MSG_143;边缘锐化-数量 +HISTORY_MSG_144;微反差-数量 +HISTORY_MSG_145;微反差-均匀度 HISTORY_MSG_146;边缘锐化 -HISTORY_MSG_147;边缘锐化-单纯亮度 +HISTORY_MSG_147;边缘锐化-仅亮度 +HISTORY_MSG_148;微反差 +HISTORY_MSG_149;微反差-3×3阵列 HISTORY_MSG_155;Vib-避免色彩偏移 HISTORY_MSG_158;力度 HISTORY_MSG_159;边缘停止 HISTORY_MSG_160;拉伸 HISTORY_MSG_162;色调映射 +HISTORY_MSG_163;RGB曲线-红 +HISTORY_MSG_164;RGB曲线-绿 +HISTORY_MSG_165;RGB曲线-蓝 +HISTORY_MSG_166;曝光-重置 +HISTORY_MSG_167;去马赛克方法 +HISTORY_MSG_168;L*a*b*-CC曲线 +HISTORY_MSG_169;L*a*b*-CH曲线 +HISTORY_MSG_170;Vibrance-HH曲线 +HISTORY_MSG_171;L*a*b*-LC曲线 +HISTORY_MSG_172;L*a*b*-限制LC +HISTORY_MSG_173;降噪-细节恢复 HISTORY_MSG_174;CIECAM02 +HISTORY_MSG_180;CAM02-亮度 (J) +HISTORY_MSG_181;CAM02-色度 (C) HISTORY_MSG_183;CAM02-对比度 (J) +HISTORY_MSG_186;CAM02-算法 +HISTORY_MSG_187;CAM02-红色/肤色保护 +HISTORY_MSG_188;CAM02-亮度 (Q) +HISTORY_MSG_189;CAM02-对比度 (Q) +HISTORY_MSG_190;CAM02-饱和度 (S) +HISTORY_MSG_191;CAM02-色彩丰富度 (M) +HISTORY_MSG_192;CAM02-色度 (h) +HISTORY_MSG_193;CAM02-色调曲线1 +HISTORY_MSG_194;CAM02-色调曲线2 +HISTORY_MSG_195;CAM02-色调曲线1 +HISTORY_MSG_196;CAM02-色调曲线2 +HISTORY_MSG_200;CAM02-色调映射 +HISTORY_MSG_201;降噪-色度-红&绿 +HISTORY_MSG_202;降噪-色度-蓝&黄 +HISTORY_MSG_203;降噪-色彩空间 +HISTORY_MSG_204;LMMSE优化步长 +HISTORY_MSG_205;CAM02-热像素/坏点过滤器 +HISTORY_MSG_207;去除色边-色度曲线 HISTORY_MSG_210;渐变-角度 HISTORY_MSG_211;渐变滤镜 HISTORY_MSG_212;暗角-力度 @@ -330,10 +438,129 @@ HISTORY_MSG_213;暗角滤镜 HISTORY_MSG_239;GF-力度 HISTORY_MSG_244;暗角矫正-力度 HISTORY_MSG_245;暗角矫正-中心 +HISTORY_MSG_246;L*a*b*-CL曲线 +HISTORY_MSG_247;L*a*b*-LH曲线 +HISTORY_MSG_248;L*a*b*-HH曲线 +HISTORY_MSG_249;CbDL-阈值 +HISTORY_MSG_252;CbDL-肤色保护 +HISTORY_MSG_253;CbDL-减少杂色 +HISTORY_MSG_254;CbDL-皮肤色相 +HISTORY_MSG_255;降噪-中值滤波器 +HISTORY_MSG_256;降噪-中值滤波器-方法 +HISTORY_MSG_285;降噪-中值滤波-方法 +HISTORY_MSG_286;降噪-中值滤波-类型 +HISTORY_MSG_287;降噪-中值滤波-迭代 +HISTORY_MSG_288;平场-溢出控制 +HISTORY_MSG_289;平场-溢出控制-自动 +HISTORY_MSG_293;胶片模拟 +HISTORY_MSG_294;胶片模拟-力度 +HISTORY_MSG_295;胶片模拟-胶片 +HISTORY_MSG_296;降噪-亮度曲线 +HISTORY_MSG_297;降噪-模式 +HISTORY_MSG_298;坏点过滤器 +HISTORY_MSG_299;降噪-色度曲线 +HISTORY_MSG_301;降噪-亮度控制 +HISTORY_MSG_302;降噪-色度方法 +HISTORY_MSG_303;降噪-色度方法 +HISTORY_MSG_305;小波层级 +HISTORY_MSG_306;W-处理 +HISTORY_MSG_307;W-处理 +HISTORY_MSG_308;W-处理方向 +HISTORY_MSG_309;小波-边缘锐度-细节 +HISTORY_MSG_310;W-残差图-肤色保护 +HISTORY_MSG_311;小波-小波层级 +HISTORY_MSG_312;W-残差图-阴影阈值 +HISTORY_MSG_338;小波-边缘锐度-半径 +HISTORY_MSG_339;小波-边缘锐度-力度 +HISTORY_MSG_340;小波-力度 +HISTORY_MSG_347;小波-去噪-第1级 +HISTORY_MSG_348;小波-去噪-第2级 +HISTORY_MSG_349;小波-去噪-第3级 +HISTORY_MSG_357;W-去噪-边缘锐度挂钩 +HISTORY_MSG_371;调整大小后加锐(PRS) +HISTORY_MSG_372;PRS USM-半径 +HISTORY_MSG_373;PRS USM-数量 +HISTORY_MSG_374;PRS USM-阈值 +HISTORY_MSG_375;PRS USM-仅加锐边缘 +HISTORY_MSG_376;PRS USM-边缘检测半径 +HISTORY_MSG_377;PRS USM-边缘容差 +HISTORY_MSG_378;PRS USM-光晕控制 +HISTORY_MSG_379;PRS USM-光晕控制数量 +HISTORY_MSG_380;PRS-方法 +HISTORY_MSG_381;PRS RLD-半径 +HISTORY_MSG_382;PRS RLD-数量 +HISTORY_MSG_383;PRS RLD-衰减 +HISTORY_MSG_384;PRS RLD-迭代 +HISTORY_MSG_405;小波-去噪-第4级 +HISTORY_MSG_445;Raw子图像 +HISTORY_MSG_449;像素偏移-ISO适应 +HISTORY_MSG_452;像素偏移-显示动体 +HISTORY_MSG_453;像素偏移-仅显示动体蒙版 +HISTORY_MSG_457;像素偏移-检测红/蓝 +HISTORY_MSG_462;像素偏移-检测绿 +HISTORY_MSG_464;像素偏移-动体蒙版模糊 +HISTORY_MSG_465;像素偏移-模糊半径 +HISTORY_MSG_468;像素偏移-填洞 +HISTORY_MSG_469;像素偏移-中值 +HISTORY_MSG_471;像素偏移-动体补正 +HISTORY_MSG_472;像素偏移-顺滑过渡 +HISTORY_MSG_473;像素偏移-使用LMMSE +HISTORY_MSG_474;像素偏移-亮度均等 +HISTORY_MSG_475;像素偏移-均等各通道 +HISTORY_MSG_485;镜头矫正 +HISTORY_MSG_486;镜头矫正-相机 +HISTORY_MSG_487;镜头矫正-镜头 +HISTORY_MSG_488;动态范围压缩(DRC) +HISTORY_MSG_489;DRC-细节 +HISTORY_MSG_490;DRC-数量 +HISTORY_MSG_491;白平衡 +HISTORY_MSG_492;RGB曲线 +HISTORY_MSG_493;L*a*b*调整 +HISTORY_MSG_494;捕图加锐 +HISTORY_MSG_CLAMPOOG;超色域色彩溢出 +HISTORY_MSG_DEHAZE_DEPTH;去雾-纵深值 +HISTORY_MSG_DEHAZE_ENABLED;去雾 +HISTORY_MSG_DEHAZE_LUMINANCE;去雾-仅亮度 +HISTORY_MSG_DEHAZE_SHOW_DEPTH_MAP;去雾-显示纵深蒙版 +HISTORY_MSG_DEHAZE_STRENGTH;去雾-力度 +HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST;双重去马赛克-自动阈值 +HISTORY_MSG_DUALDEMOSAIC_CONTRAST;双重去马赛克-反差阈值 +HISTORY_MSG_FILMNEGATIVE_ENABLED;胶片负片 +HISTORY_MSG_HISTMATCHING;自适应色调曲线 +HISTORY_MSG_LOCALCONTRAST_AMOUNT;局部反差-数量 +HISTORY_MSG_LOCALCONTRAST_DARKNESS;局部反差-黑部 +HISTORY_MSG_LOCALCONTRAST_ENABLED;局部反差 +HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;局部反差-亮部 +HISTORY_MSG_LOCALCONTRAST_RADIUS;局部反差-半径 +HISTORY_MSG_METADATA_MODE;元数据复制模式 +HISTORY_MSG_MICROCONTRAST_CONTRAST;微反差-反差阈值 +HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;捕图加锐-自动阈值 +HISTORY_MSG_PDSHARPEN_AUTO_RADIUS;捕图加锐-自动半径 +HISTORY_MSG_PDSHARPEN_CHECKITER;捕图加锐-自动限制迭代 +HISTORY_MSG_PDSHARPEN_CONTRAST;捕图加锐-反差阈值 +HISTORY_MSG_PDSHARPEN_ITERATIONS;捕图加锐-迭代 +HISTORY_MSG_PDSHARPEN_RADIUS;捕图加锐-半径 +HISTORY_MSG_PDSHARPEN_RADIUS_BOOST;捕图加锐-边缘半径值提升 +HISTORY_MSG_PIXELSHIFT_DEMOSAIC;像素偏移-动体部分去马赛克算法 +HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;线状噪点过滤方向 +HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF条纹过滤 +HISTORY_MSG_PRSHARPEN_CONTRAST;PRS-反差阈值 +HISTORY_MSG_RAWCACORR_AUTOIT;Raw色差矫正-迭代 +HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw色差矫正-避免色偏 +HISTORY_MSG_RAW_BORDER;Raw边界 +HISTORY_MSG_RESIZE_ALLOWUPSCALING;调整大小-允许升采样 +HISTORY_MSG_SHARPENING_BLUR;加锐-模糊半径 +HISTORY_MSG_SHARPENING_CONTRAST;加锐-反差阈值 +HISTORY_MSG_SH_COLORSPACE;阴影/高光-色彩空间 +HISTORY_MSG_TM_FATTAL_ANCHOR;DRC-锚点 HISTORY_NEWSNAPSHOT;新建快照 HISTORY_NEWSNAPSHOT_TOOLTIP;快捷键:Alt-s HISTORY_SNAPSHOT;快照 HISTORY_SNAPSHOTS;快照 +ICCPROFCREATOR_COPYRIGHT;版权: +ICCPROFCREATOR_CUSTOM;自定义 +ICCPROFCREATOR_DESCRIPTION;描述: +ICCPROFCREATOR_SAVEDIALOG_TITLE;将ICC档案保存为... IPTCPANEL_CATEGORY;类别 IPTCPANEL_CITY;城市 IPTCPANEL_COPYHINT;将IPTC设置复制到剪贴板 @@ -355,17 +582,18 @@ MAIN_BUTTON_FULLSCREEN;全屏 MAIN_BUTTON_PREFERENCES;参数设置 MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;将当前图片放入处理队列中\n快捷键:Ctrl+b MAIN_BUTTON_SAVE;保存图片 -MAIN_BUTTON_SAVE_TOOLTIP;保存当前图像 \n快捷键:Ctrl+S +MAIN_BUTTON_SAVE_TOOLTIP;保存当前图像\n快捷键:Ctrl+S MAIN_BUTTON_SENDTOEDITOR;发送到编辑器 -MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;使用外部工具编辑当前图像 \n快捷键:Ctrl+E +MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;使用外部工具编辑当前图像\n快捷键:Ctrl+E MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;显示/隐藏全部侧边栏\n快捷键:m MAIN_BUTTON_UNFULLSCREEN;退出全屏 MAIN_FRAME_EDITOR;编辑器 -MAIN_FRAME_EDITOR_TOOLTIP;编辑器.\n快捷键:Ctrl-F4 +MAIN_FRAME_EDITOR_TOOLTIP;编辑器\n快捷键:Ctrl-F4 MAIN_FRAME_FILEBROWSER;文件浏览器 MAIN_FRAME_FILEBROWSER_TOOLTIP;文件浏览器\n快捷键:Ctrl-F2 MAIN_FRAME_PLACES;位置 MAIN_FRAME_PLACES_ADD;添加 +MAIN_FRAME_PLACES_DEL;移除 MAIN_FRAME_QUEUE;批处理队列 MAIN_FRAME_QUEUE_TOOLTIP;处理队列\n快捷键:Ctrl-F3 MAIN_FRAME_RECENT;最近使用的文件夹 @@ -373,11 +601,13 @@ MAIN_MSG_ALREADYEXISTS;该文件已存在 MAIN_MSG_CANNOTLOAD;无法加载图片 MAIN_MSG_CANNOTSAVE;文件保存中出错 MAIN_MSG_CANNOTSTARTEDITOR;无法启动编辑器 -MAIN_MSG_CANNOTSTARTEDITOR_SECONDARY;请在“参数设置“中设置正确的路径 +MAIN_MSG_CANNOTSTARTEDITOR_SECONDARY;请在“参数设置”中设置正确的路径 MAIN_MSG_EMPTYFILENAME;未指定文件名! MAIN_MSG_NAVIGATOR;导航器 MAIN_MSG_OPERATIONCANCELLED;取消 MAIN_MSG_QOVERWRITE;是否覆盖? +MAIN_TAB_ADVANCED;高级 +MAIN_TAB_ADVANCED_TOOLTIP;快捷键:Alt-a MAIN_TAB_COLOR;色彩 MAIN_TAB_COLOR_TOOLTIP;快捷键:Alt-c MAIN_TAB_DETAIL;细节 @@ -387,8 +617,9 @@ MAIN_TAB_EXIF;Exif MAIN_TAB_EXPORT;快速导出 MAIN_TAB_EXPOSURE;曝光 MAIN_TAB_EXPOSURE_TOOLTIP;快捷键:Alt-e +MAIN_TAB_FAVORITES_TOOLTIP;快捷键: Alt-u MAIN_TAB_FILTER;过滤器 -MAIN_TAB_INSPECT;检阅 +MAIN_TAB_INSPECT;检视 MAIN_TAB_IPTC;IPTC MAIN_TAB_METADATA;元数据 MAIN_TAB_METADATA_TOOLTIP;快捷键:Alt-m @@ -396,16 +627,26 @@ MAIN_TAB_RAW;Raw MAIN_TAB_RAW_TOOLTIP;快捷键:Alt-R MAIN_TAB_TRANSFORM;变换 MAIN_TAB_TRANSFORM_TOOLTIP;快捷键:Alt-t -MAIN_TOOLTIP_HIDEHP;显示/隐藏左面板 (包含历史, 快捷键:H) +MAIN_TOOLTIP_BACKCOLOR0;预览图的背景色:基于主题调整\n快捷键:9 +MAIN_TOOLTIP_BACKCOLOR1;预览图的背景色:黑色\n快捷键:9 +MAIN_TOOLTIP_BACKCOLOR2;预览图的背景色:白色\n快捷键:9 +MAIN_TOOLTIP_BACKCOLOR3;预览图的背景色:中灰色\n快捷键:9 +MAIN_TOOLTIP_HIDEHP;显示/隐藏左面板(包含历史,快捷键:H) MAIN_TOOLTIP_INDCLIPPEDH;高光溢出提示 MAIN_TOOLTIP_INDCLIPPEDS;阴影不足提示 +MAIN_TOOLTIP_PREVIEWB;预览蓝色通道\n快捷键:b +MAIN_TOOLTIP_PREVIEWFOCUSMASK;预览合焦蒙版\n快捷键:Shift-f\n\n在浅景深,噪点少,放大得大的图片中更加精准\n在噪点多的图像中,把图片缩放到10%-30%以提升检测精准度 +MAIN_TOOLTIP_PREVIEWG;预览绿色通道\n快捷键:g +MAIN_TOOLTIP_PREVIEWL;预览亮度\n快捷键:v\n\n0.299*R + 0.587*G + 0.114*B MAIN_TOOLTIP_PREVIEWR;预览红色通道\n快捷键:r -MAIN_TOOLTIP_QINFO;图片简短信息 +MAIN_TOOLTIP_PREVIEWSHARPMASK;预览加锐反差蒙版\n快捷键:p +MAIN_TOOLTIP_QINFO;图片简略信息 MAIN_TOOLTIP_SHOWHIDELP1;显示/隐藏左面板\n快捷键:l MAIN_TOOLTIP_SHOWHIDERP1;显示/隐藏右面板\n快捷键:Alt-l MAIN_TOOLTIP_SHOWHIDETP1;显示/隐藏上面板\n快捷键:Shift-L MAIN_TOOLTIP_THRESHOLD;阈值 -MAIN_TOOLTIP_TOGGLE;切换 处理前/处理后视图\n快捷键:Shift-b +MAIN_TOOLTIP_TOGGLE;切换处理前/处理后视图\n快捷键:Shift-b +MONITOR_PROFILE_SYSTEM;系统默认 NAVIGATOR_B;B: NAVIGATOR_G;G: NAVIGATOR_H;H: @@ -418,6 +659,8 @@ NAVIGATOR_S;S: NAVIGATOR_V;V: NAVIGATOR_XY_FULL;宽 = %1, 高 = %2 NAVIGATOR_XY_NA;x = n/a, y = n/a +OPTIONS_BUNDLED_MISSING;找不到附带档案"%1"!\n\n程序可能受损。\n\n将使用内部默认值 +PARTIALPASTE_ADVANCEDGROUP;高级设置 PARTIALPASTE_BASICGROUP;基本设置 PARTIALPASTE_CACORRECTION;色彩矫正 PARTIALPASTE_CHANNELMIXER;通道混合器 @@ -432,6 +675,7 @@ PARTIALPASTE_CROP;裁剪 PARTIALPASTE_DARKFRAMEAUTOSELECT;暗场自动选择 PARTIALPASTE_DARKFRAMEFILE;暗场文件 PARTIALPASTE_DEFRINGE;去除色边 +PARTIALPASTE_DEHAZE;去雾 PARTIALPASTE_DETAILGROUP;细节设置 PARTIALPASTE_DIALOGLABEL;选择性粘贴配置 PARTIALPASTE_DIRPYRDENOISE;降噪 @@ -442,6 +686,7 @@ PARTIALPASTE_EQUALIZER;小波变换层级 PARTIALPASTE_EVERYTHING;全部 PARTIALPASTE_EXIFCHANGES;对exif所做的修改 PARTIALPASTE_EXPOSURE;曝光 +PARTIALPASTE_FILMNEGATIVE;胶片负片 PARTIALPASTE_FILMSIMULATION;胶片模拟 PARTIALPASTE_FLATFIELDAUTOSELECT;平场自动选择 PARTIALPASTE_FLATFIELDBLURRADIUS;平场模糊半径 @@ -456,6 +701,8 @@ PARTIALPASTE_IPTCINFO;IPTC 信息 PARTIALPASTE_LABCURVE;Lab调整 PARTIALPASTE_LENSGROUP;镜头相关设置 PARTIALPASTE_LENSPROFILE;镜片修正档案 +PARTIALPASTE_LOCALCONTRAST;局部反差 +PARTIALPASTE_METADATA;元数据模式 PARTIALPASTE_METAGROUP;元数据 PARTIALPASTE_PCVIGNETTE;暗角滤镜 PARTIALPASTE_PERSPECTIVE;视角 @@ -463,12 +710,15 @@ PARTIALPASTE_PREPROCESS_DEADPIXFILT;坏点过滤器 PARTIALPASTE_PREPROCESS_GREENEQUIL;绿平衡 PARTIALPASTE_PREPROCESS_HOTPIXFILT;热噪过滤器 PARTIALPASTE_PREPROCESS_LINEDENOISE;线状噪点过滤 +PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF条纹过滤器 PARTIALPASTE_PRSHARPENING;调整大小后锐化 PARTIALPASTE_RAWCACORR_AUTO;色差自动矫正 +PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA避免偏色 PARTIALPASTE_RAWCACORR_CAREDBLUE;红蓝色差 PARTIALPASTE_RAWEXPOS_BLACK;黑色等级 PARTIALPASTE_RAWEXPOS_LINEAR;白点纠正 PARTIALPASTE_RAWGROUP;Raw设置 +PARTIALPASTE_RAW_BORDER;Raw边界 PARTIALPASTE_RAW_DCBENHANCE;DCB增强 PARTIALPASTE_RAW_DCBITERATIONS;DCB迭代 PARTIALPASTE_RAW_DMETHOD;去马赛克方法 @@ -477,78 +727,101 @@ PARTIALPASTE_RAW_IMAGENUM;子图像 PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE优化步长 PARTIALPASTE_RAW_PIXELSHIFT;像素偏移 PARTIALPASTE_RESIZE;调整大小 -!PARTIALPASTE_RETINEX;Retinex PARTIALPASTE_RGBCURVES;RGB曲线 PARTIALPASTE_ROTATION;旋转 PARTIALPASTE_SHADOWSHIGHLIGHTS;阴影/高光 -PARTIALPASTE_SHARPENEDGE;边缘 +PARTIALPASTE_SHARPENEDGE;边缘锐化 PARTIALPASTE_SHARPENING;锐化 PARTIALPASTE_SHARPENMICRO;微反差 +PARTIALPASTE_TM_FATTAL;动态范围压缩 PARTIALPASTE_VIBRANCE;鲜艳度 PARTIALPASTE_VIGNETTING;暗角矫正 PARTIALPASTE_WHITEBALANCE;白平衡 PREFERENCES_ADD;相加 +PREFERENCES_APPEARANCE;外观 +PREFERENCES_APPEARANCE_COLORPICKERFONT;拾色器字体 +PREFERENCES_APPEARANCE_CROPMASKCOLOR;裁剪蒙版颜色 +PREFERENCES_APPEARANCE_MAINFONT;主字体 PREFERENCES_APPEARANCE_NAVGUIDECOLOR;导航器图框颜色 +PREFERENCES_APPEARANCE_PSEUDOHIDPI;伪-高DPI模式 +PREFERENCES_APPEARANCE_THEME;主题 PREFERENCES_APPLNEXTSTARTUP;下次启动生效 PREFERENCES_AUTOMONPROFILE;使用操作系统主显示器的色彩档案 +PREFERENCES_AUTOSAVE_TP_OPEN;在退出时保存工具的展开/折叠状态 PREFERENCES_BATCH_PROCESSING;批处理 -PREFERENCES_BEHADDALL;全 “相加” +PREFERENCES_BEHADDALL;全“相加” +PREFERENCES_BEHADDALLHINT;将所有选项设为相加模式。\n批量调整栏的处理参数将在图片当前参数的基础上加减 PREFERENCES_BEHAVIOR;行为 -PREFERENCES_BEHSETALL;全“ 设定” +PREFERENCES_BEHSETALL;全“设定” +PREFERENCES_BEHSETALLHINT;将所有选项设为设定模式。\n批量调整栏的处理参数将是绝对值,数值会被显示 +PREFERENCES_CACHECLEAR;清空 +PREFERENCES_CACHECLEAR_ALL;清空所有缓存文件: +PREFERENCES_CACHECLEAR_ALLBUTPROFILES;清除所有缓存文件,已缓存的后期档案除外: +PREFERENCES_CACHECLEAR_ONLYPROFILES;仅清除已缓存的后期档案: +PREFERENCES_CACHECLEAR_SAFETY;仅缓存中的文件会被清除,与原图片保存在一起的后期档案不会受到影响。 PREFERENCES_CACHEMAXENTRIES;最大缓存数量 PREFERENCES_CACHEOPTS;缓存选项 PREFERENCES_CACHETHUMBHEIGHT;最大缩略图高度 +PREFERENCES_CHUNKSIZES;每个线程的切片数 +PREFERENCES_CHUNKSIZE_RAW_AMAZE;AMaZE去马赛克 +PREFERENCES_CHUNKSIZE_RAW_CA;Raw色差矫正 +PREFERENCES_CHUNKSIZE_RAW_RCD;RCD去马赛克 +PREFERENCES_CHUNKSIZE_RGB;RGB处理 PREFERENCES_CLIPPINGIND;高光溢出提示 PREFERENCES_CLUTSCACHE;HaldCLUT缓存 PREFERENCES_CLUTSCACHE_LABEL;CLUT最大缓存数 PREFERENCES_CLUTSDIR;HaldCLUT路径 PREFERENCES_CMMBPC;黑场补偿 +PREFERENCES_CROP;裁剪编辑 +PREFERENCES_CROP_AUTO_FIT;自动放大以适应裁剪 +PREFERENCES_CROP_GUIDES;在不编辑裁剪区域时,裁剪区域所显示的辅助方式 +PREFERENCES_CROP_GUIDES_FRAME;方框 +PREFERENCES_CROP_GUIDES_FULL;原方式 +PREFERENCES_CROP_GUIDES_NONE;无 PREFERENCES_CURVEBBOXPOS;曲线复制/粘贴按钮位置 PREFERENCES_CURVEBBOXPOS_ABOVE;上 PREFERENCES_CURVEBBOXPOS_BELOW;下 PREFERENCES_CURVEBBOXPOS_LEFT;左 PREFERENCES_CURVEBBOXPOS_RIGHT;右 -!PREFERENCES_CUSTPROFBUILD;Custom Processing Profile Builder -!PREFERENCES_CUSTPROFBUILDKEYFORMAT;Keys format -!PREFERENCES_CUSTPROFBUILDKEYFORMAT_NAME;Name -!PREFERENCES_CUSTPROFBUILDKEYFORMAT_TID;TagID PREFERENCES_CUSTPROFBUILDPATH;可执行文件路径 PREFERENCES_DARKFRAMEFOUND;找到 PREFERENCES_DARKFRAMESHOTS;张 PREFERENCES_DARKFRAMETEMPLATES;模板 PREFERENCES_DATEFORMAT;日期格式 -PREFERENCES_DATEFORMATHINT;你可以使用下列控制符:\n%y : 年\n%m : 月h\n%d : 日\n\n例如, 中文日期格式:\n%y/%m/%d +PREFERENCES_DATEFORMATHINT;你可以使用下列控制符:\n%y :年\n%m :月\n%d :日\n\n例如,ISO 8601标准的时间格式为:\n%y/%m/%d PREFERENCES_DIRDARKFRAMES;暗场图像路径 +PREFERENCES_DIRECTORIES;目录 PREFERENCES_DIRHOME;用户文件路径 PREFERENCES_DIRLAST;上次访问路径 PREFERENCES_DIROTHER;其他 PREFERENCES_DIRSELECTDLG;启动时选择图片路径... PREFERENCES_DIRSOFTWARE;软件安装路径 +PREFERENCES_EDITORCMDLINE;自定义命令行 PREFERENCES_EDITORLAYOUT;编辑器布局 PREFERENCES_EXTERNALEDITOR;外部编辑器 PREFERENCES_FBROWSEROPTS;文件浏览器选项 +PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;在文件浏览器中显示紧凑的工具栏 PREFERENCES_FLATFIELDFOUND;找到 PREFERENCES_FLATFIELDSDIR;平场图像路径 PREFERENCES_FLATFIELDSHOTS;张 PREFERENCES_FLATFIELDTEMPLATES;模板 PREFERENCES_FORIMAGE;用于图片文件 PREFERENCES_FORRAW;用于Raw文件 -!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_FSTRIP_SAME_THUMB_HEIGHT;令文件浏览器和编辑器的缩略图高度相同 +PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;若文件浏览器和编辑器的缩略图大小不同,那么在二者间切换时,生成缩略图的用时就会变长 PREFERENCES_GIMPPATH;GIMP安装文件夹 PREFERENCES_HISTOGRAMPOSITIONLEFT;将直方图放置在左面板 -PREFERENCES_HISTOGRAM_TOOLTIP;启用后,当前使用的后期配置档案将被用于渲染主直方图和导航栏,不启用则将使用伽马矫正的输出档案进行渲染。 +PREFERENCES_HISTOGRAM_TOOLTIP;启用后,当前使用的后期配置档案将被用于渲染主直方图和导航栏,不启用则将使用伽马矫正的输出档案进行渲染 PREFERENCES_HLTHRESHOLD;高光溢出阈值 PREFERENCES_ICCDIR;ICC配置路径 PREFERENCES_IMPROCPARAMS;默认图片处理参数 -PREFERENCES_INSPECT_LABEL;查看 +PREFERENCES_INSPECT_LABEL;检视 PREFERENCES_INSPECT_MAXBUFFERS_LABEL;最大缓存图片数 -!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_INTENT_ABSOLUTE;绝对比色 PREFERENCES_INTENT_PERCEPTUAL;可感知 PREFERENCES_INTENT_RELATIVE;相对比色 PREFERENCES_INTENT_SATURATION;饱和度 -PREFERENCES_INTERNALTHUMBIFUNTOUCHED;如果RAW文件没有修改, 显示内嵌JPEG的缩略图 +PREFERENCES_INTERNALTHUMBIFUNTOUCHED;如果RAW文件没有被修改,显示内嵌JPEG的缩略图 PREFERENCES_LANG;语言 PREFERENCES_LANGAUTODETECT;使用系统语言 PREFERENCES_MAXRECENTFOLDERS;最近访问路径历史记录数 @@ -563,11 +836,11 @@ PREFERENCES_MONITOR;显示器 PREFERENCES_MONPROFILE;默认色彩配置文件 PREFERENCES_MONPROFILE_WARNOSX;受MacOS限制, 仅支持sRGB PREFERENCES_MULTITAB;多编辑器标签模式 -PREFERENCES_MULTITABDUALMON;多编辑器,编辑器标签独立模式 +PREFERENCES_MULTITABDUALMON;多编辑器标签,标签独立模式 PREFERENCES_NAVIGATIONFRAME;导航器 -PREFERENCES_OVERLAY_FILENAMES;在文件浏览器中显示紧凑的工具栏 -!PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel -!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files +PREFERENCES_OVERLAY_FILENAMES;在文件浏览器的缩略图上显示文件名 +PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;在编辑器的缩略图上显示文件名 +PREFERENCES_OVERWRITEOUTPUTFILE;覆盖已存在的输出文件 PREFERENCES_PANFACTORLABEL;拖移速率增幅 PREFERENCES_PARSEDEXT;已知扩展名 PREFERENCES_PARSEDEXTADD;添加扩展名 @@ -575,6 +848,10 @@ PREFERENCES_PARSEDEXTADDHINT;输入扩展名并按此按钮将其添加至列表 PREFERENCES_PARSEDEXTDELHINT;从列表中删除选中的扩展名 PREFERENCES_PARSEDEXTDOWNHINT;让选中的扩展名在列表中的位置下降 PREFERENCES_PARSEDEXTUPHINT;让选中的扩展名在列表中的位置上升 +PREFERENCES_PERFORMANCE_MEASURE;测速 +PREFERENCES_PERFORMANCE_MEASURE_HINT;在控制台记录处理时间 +PREFERENCES_PERFORMANCE_THREADS;线程 +PREFERENCES_PERFORMANCE_THREADS_LABEL;用于降噪和小波层级的最大线程数(0=自动) PREFERENCES_PREVDEMO;预览去马赛克方法 PREFERENCES_PREVDEMO_FAST;快速 PREFERENCES_PREVDEMO_LABEL;小于100%缩放查看时使用的去马赛克算法: @@ -595,19 +872,20 @@ PREFERENCES_PRTPROFILE;色彩配置文件 PREFERENCES_PSPATH;Adobe Photoshop安装路径 PREFERENCES_REMEMBERZOOMPAN;记忆图片的缩放和拖动位置 PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;当打开新图片时,记忆上一张图片放大的百分比和被拖动到的位置。\n\n这个选项仅在使用“单编辑器模式”且“小于100%缩放查看时使用的去马赛克方法”被设为“与PP3相同”时才有效 +PREFERENCES_SAVE_TP_OPEN_NOW;保存工具的展开/折叠状态 PREFERENCES_SELECTLANG;选择语言 PREFERENCES_SERIALIZE_TIFF_READ;TIFF读取设定 -PREFERENCES_SERIALIZE_TIFF_READ_LABEL;连续载入TIFF文件 -PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;开启后可以提高在无压缩TIFF图片文件夹中的缩略图生成速度 +PREFERENCES_SERIALIZE_TIFF_READ_LABEL;序列化载入TIFF文件 +PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;启用此选项后,在打开包含大量无压缩TIFF的文件夹时,缩略图生成速度会加快 PREFERENCES_SET;设定 PREFERENCES_SHOWBASICEXIF;显示基本Exif信息 PREFERENCES_SHOWDATETIME;显示时间日期 PREFERENCES_SHOWEXPOSURECOMPENSATION;附带曝光补偿 PREFERENCES_SHOWFILMSTRIPTOOLBAR;显示“数码底片夹”栏 PREFERENCES_SHTHRESHOLD;阴影过暗阈值 -PREFERENCES_SINGLETAB;单编辑器模式 -PREFERENCES_SINGLETABVERTAB;单编辑器模式, 标签栏垂直 -PREFERENCES_SND_HELP;输入完整路径来指定声音文件, 或者留空表示无声。\nWindows系统声音可以使用 "SystemDefault", "SystemAsterisk" 等\nLinux则可以使用 "complete", "window-attention" 等 +PREFERENCES_SINGLETAB;单编辑器标签模式 +PREFERENCES_SINGLETABVERTAB;单编辑器标签模式, 标签栏垂直 +PREFERENCES_SND_HELP;输入完整路径来指定声音文件, 或者留空表示无声。\nWindows系统声音可以使用"SystemDefault", "SystemAsterisk" 等\nLinux则可以使用 "complete", "window-attention"等 PREFERENCES_SND_LNGEDITPROCDONE;编辑器处理完成 PREFERENCES_SND_QUEUEDONE;完成队列 PREFERENCES_SND_THRESHOLDSECS;等待秒数 @@ -617,13 +895,19 @@ PREFERENCES_TAB_COLORMGR;色彩管理 PREFERENCES_TAB_DYNAMICPROFILE;动态预设规则 PREFERENCES_TAB_GENERAL;通用 PREFERENCES_TAB_IMPROC;图片处理 +PREFERENCES_TAB_PERFORMANCE;性能 PREFERENCES_TAB_SOUND;音效 +PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;内嵌JPEG预览 +PREFERENCES_THUMBNAIL_INSPECTOR_MODE;展示的图片 +PREFERENCES_THUMBNAIL_INSPECTOR_RAW;中性Raw渲染图 +PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;若内嵌JPEG为全尺寸,则预览它;否则预览中性Raw PREFERENCES_TP_LABEL;工具栏 -PREFERENCES_TP_VSCROLLBAR;隐藏垂直滚动栏 +PREFERENCES_TP_VSCROLLBAR;隐藏垂直滚动条 PREFERENCES_USEBUNDLEDPROFILES;启用内置预设 PREFERENCES_WORKFLOW;排版 PROFILEPANEL_LABEL;处理参数配置 PROFILEPANEL_LOADDLGLABEL;加载处理参数为... +PROFILEPANEL_MODE_TIP;后期档案应用模式。\n\n按下按钮:部分性档案将被转化为全面性档案;没有被使用的工具将会用预定的参数得到处理。\n\n松开按钮:档案按照其制作时的形式被应用,只有被调整过的工具参数会被应用。 PROFILEPANEL_MYPROFILES;我的档案 PROFILEPANEL_PCUSTOM;自定义 PROFILEPANEL_PFILE;由文件 @@ -633,6 +917,11 @@ PROFILEPANEL_TOOLTIPCOPY;将当前配置复制到剪贴板 PROFILEPANEL_TOOLTIPLOAD;由文件加载配置 PROFILEPANEL_TOOLTIPPASTE;从剪贴板粘贴配置 PROFILEPANEL_TOOLTIPSAVE;保存当前配置 +PROGRESSBAR_DECODING;解码中... +PROGRESSBAR_GREENEQUIL;绿平衡... +PROGRESSBAR_HLREC;高光还原... +PROGRESSBAR_HOTDEADPIXELFILTER;热像素/坏点过滤... +PROGRESSBAR_LINEDENOISE;线状噪点过滤... PROGRESSBAR_LOADING;图片加载中... PROGRESSBAR_LOADINGTHUMBS;读取缩略图... PROGRESSBAR_LOADJPEG;JPEG文件加载中... @@ -640,20 +929,36 @@ PROGRESSBAR_LOADPNG;PNG文件加载中... PROGRESSBAR_LOADTIFF;TIFF文件加载中... PROGRESSBAR_NOIMAGES;未找到图片 PROGRESSBAR_PROCESSING;图片处理中... +PROGRESSBAR_PROCESSING_PROFILESAVED;处理配置档案已保存 +PROGRESSBAR_RAWCACORR;Raw色差矫正... PROGRESSBAR_READY;就绪 PROGRESSBAR_SAVEJPEG;JPEG文件保存中... PROGRESSBAR_SAVEPNG;PNG文件保存中... PROGRESSBAR_SAVETIFF;TIFF文件保存中... +PROGRESSBAR_SNAPSHOT_ADDED;快照已添加 +QINFO_FRAMECOUNT;%2帧 +QINFO_HDR;HDR / %2帧 QINFO_ISO;ISO QINFO_NOEXIF;Exif数据不可用 +QINFO_PIXELSHIFT;像素偏移/ %2帧 QUEUE_AUTOSTART;自动开始 +QUEUE_AUTOSTART_TOOLTIP;当新工作被发送到队列后,立刻自动开始处理 QUEUE_DESTFILENAME;路径和文件名 QUEUE_FORMAT_TITLE;文件格式 QUEUE_LOCATION_FOLDER;保存至文件夹 QUEUE_LOCATION_TEMPLATE;使用模板 -QUEUE_LOCATION_TEMPLATE_TOOLTIP;根据图片的位置,评级,被置于垃圾桶与否,或是在队列中的位置来决定其被保存的位置。\n\n以这个路径为例:\n/home/tom/photos/2010-10-31/photo1.raw\n下列格式化的字符串意义如下:\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的意思是,照片的文件名会变成它在队列中的排序位次。"%s"后面所跟的数字规定着文件名的长度,比如%s3所导出的第一张照片就会被命名为'001'。\n\n如果你想把图片保存到和原图相同的位置,输入:\n%p1/%f\n\n如果你想把图片保存到原图片所在文件夹的'converted'子文件夹下的话,输入:\n%p1/converted/%f\n\n如果你想把图片保存到\n'/home/tom/photos/converted/2010-10-31',输入:\n%p2/converted/%d1/%f +QUEUE_LOCATION_TEMPLATE_TOOLTIP;根据图片的位置,评级,被置于垃圾桶与否,或是在队列中的位次来决定其被保存的位置。\n\n以这个路径为例:\n/home/tom/photos/2010-10-31/photo1.raw\n下列格式化的字符串意义如下:\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(在文件名中)会变为图片的评级。若图片无评级,则变为'0'。若图片被置于垃圾箱,则变为'x'。\n\n%s1, ..., %s9会变为照片在队列中的排序位次。"%s"后面所跟的数字规定着文件名的长度,比如使用%s3导出队列中的第一张照片,其将被命名为'001'。\n\n如果你想把图片保存到和原图相同的目录,输入:\n%p1/%f\n\n如果你想把图片保存到原图片所在文件夹的'converted'子文件夹下,输入:\n%p1/converted/%f\n\n如果你想把图片保存到\n'/home/tom/photos/converted/2010-10-31',输入:\n%p2/converted/%d1/%f +QUEUE_LOCATION_TITLE;输出位置 +QUEUE_STARTSTOP_TOOLTIP;开始/停止处理队列中的图像\n\n快捷键:Ctrl+s +SAMPLEFORMAT_0;未知数据格式 +SAMPLEFORMAT_1;8-bit unsigned +SAMPLEFORMAT_2;16-bit unsigned +SAMPLEFORMAT_16;16-bit浮点数 +SAMPLEFORMAT_32;24-bit浮点数 +SAMPLEFORMAT_64;32-bit浮点数 SAVEDLG_AUTOSUFFIX;自动加后缀到已经存在的文件 SAVEDLG_FILEFORMAT;文件格式 +SAVEDLG_FILEFORMAT_FLOAT;浮点数 SAVEDLG_FORCEFORMATOPTS;强制保存选项 SAVEDLG_JPEGQUAL;JPEG质量 SAVEDLG_PUTTOQUEUE;放入队列 @@ -665,7 +970,7 @@ SAVEDLG_SUBSAMP;二次抽样 SAVEDLG_SUBSAMP_1;极限压缩 SAVEDLG_SUBSAMP_2;平衡 SAVEDLG_SUBSAMP_3;质量至优 -SAVEDLG_TIFFUNCOMPRESSED;未压缩的TIFF +SAVEDLG_TIFFUNCOMPRESSED;无压缩TIFF SAVEDLG_WARNFILENAME;文件将被命名 TOOLBAR_TOOLTIP_CROP;裁剪选择\n快捷键:c TOOLBAR_TOOLTIP_HAND;手形工具\n快捷键:n @@ -688,8 +993,11 @@ TP_BWMIX_GAMMA;伽马矫正 TP_BWMIX_GAM_TOOLTIP;矫正红绿蓝三色通道(RGB)伽马 TP_BWMIX_LABEL;黑白 TP_BWMIX_MET;方法 +TP_BWMIX_MET_CHANMIX;通道混合器 TP_BWMIX_MET_DESAT;去饱和 TP_BWMIX_MET_LUMEQUAL;亮度均衡工具 +TP_BWMIX_MIXC;通道混合器 +TP_BWMIX_NEUTRAL;重置 TP_BWMIX_SETTING;预设 TP_BWMIX_SETTING_TOOLTIP;不同预设 (胶片、风光等)或手动的通道混合工具设置 TP_BWMIX_SET_HIGHCONTAST;高对比度 @@ -700,12 +1008,20 @@ TP_BWMIX_SET_LOWSENSIT;低灵敏度 TP_BWMIX_SET_LUMINANCE;亮度 TP_BWMIX_SET_PANCHRO;全色的 TP_BWMIX_SET_PORTRAIT;垂直排布(肖像) -TP_BWMIX_TCMODE_FILMLIKE;黑白电影样式 -TP_BWMIX_TCMODE_STANDARD;黑白电影标准 +TP_BWMIX_SET_RGBABS;绝对RGB +TP_BWMIX_SET_RGBREL;相对RGB +TP_BWMIX_TCMODE_FILMLIKE;黑白 仿胶片式 +TP_BWMIX_TCMODE_SATANDVALBLENDING;黑白 饱和度亮度混合 +TP_BWMIX_TCMODE_STANDARD;黑白 标准 +TP_BWMIX_TCMODE_WEIGHTEDSTD;黑白 加权标准 TP_BWMIX_VAL;L TP_CACORRECTION_BLUE;蓝 TP_CACORRECTION_LABEL;色散矫正 TP_CACORRECTION_RED;红 +TP_CBDL_AFT;在黑白工具之后 +TP_CBDL_BEF;在黑白工具之前 +TP_CBDL_METHOD;处理时机 +TP_CBDL_METHOD_TOOLTIP;选择让分频反差调整工具先于黑白工具生效(使分频反差的工作色彩空间为L*a*b*),或后于黑白工具生效(此时的工作色彩空间为RGB) TP_CHMIXER_BLUE;蓝 TP_CHMIXER_GREEN;绿 TP_CHMIXER_LABEL;通道混合 @@ -714,6 +1030,7 @@ TP_COARSETRAF_TOOLTIP_HFLIP;水平翻转 TP_COARSETRAF_TOOLTIP_ROTLEFT;左转\n\n快捷键:\n[ - 多编辑器模式,\nAlt-[ - 单编辑器模式 TP_COARSETRAF_TOOLTIP_ROTRIGHT;右转\n\n快捷键:\n] - 多编辑器模式,\nAlt-] - 单编辑器模式 TP_COARSETRAF_TOOLTIP_VFLIP;竖直翻转 +TP_COLORAPP_BADPIXSL;热像素/坏点过滤器 TP_COLORAPP_LABEL_CAM02;图像调整 TP_COLORAPP_LIGHT;明度 (J) TP_COLORAPP_LIGHT_TOOLTIP; CIECAM02, Lab, RGB中,明度的意义各不相同 @@ -736,6 +1053,8 @@ TP_CROP_GTTRIANGLE2;黄金三角 2 TP_CROP_GUIDETYPE;辅助方式: TP_CROP_H;高 TP_CROP_LABEL;裁剪 +TP_CROP_RESETCROP;重置 +TP_CROP_SELECTCROP;选择区域 TP_CROP_W;宽 TP_CROP_X;x TP_CROP_Y;y @@ -743,9 +1062,53 @@ TP_DARKFRAME_AUTOSELECT;自动选择 TP_DARKFRAME_LABEL;暗场 TP_DEFRINGE_LABEL;去除色边 TP_DEFRINGE_RADIUS;半径 +TP_DEFRINGE_THRESHOLD;阈值 +TP_DEHAZE_DEPTH;纵深 +TP_DEHAZE_LABEL;去雾 +TP_DEHAZE_LUMINANCE;仅亮度 +TP_DEHAZE_SHOW_DEPTH_MAP;显示纵深蒙版 +TP_DEHAZE_STRENGTH;力度 +TP_DIRPYRDENOISE_CHROMINANCE_AUTOGLOBAL;全局自动 +TP_DIRPYRDENOISE_CHROMINANCE_BLUEYELLOW;色度—蓝-黄 +TP_DIRPYRDENOISE_CHROMINANCE_CURVE;色度曲线 +TP_DIRPYRDENOISE_CHROMINANCE_FRAME;色度噪点 +TP_DIRPYRDENOISE_CHROMINANCE_MANUAL;手动 +TP_DIRPYRDENOISE_CHROMINANCE_MASTER;色度—主控 +TP_DIRPYRDENOISE_CHROMINANCE_METHOD;方法 +TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO;当前预览处噪点:中位数=%1 最大=%2 +TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO_EMPTY;当前预览处噪点:中位数= - 最大= - +TP_DIRPYRDENOISE_CHROMINANCE_REDGREEN;色度—红-绿 +TP_DIRPYRDENOISE_LABEL;降噪 +TP_DIRPYRDENOISE_LUMINANCE_CONTROL;亮度控制 +TP_DIRPYRDENOISE_LUMINANCE_CURVE;亮度曲线 TP_DIRPYRDENOISE_LUMINANCE_DETAIL;细节恢复 +TP_DIRPYRDENOISE_LUMINANCE_FRAME;亮度噪点 TP_DIRPYRDENOISE_LUMINANCE_SMOOTHING;亮度 +TP_DIRPYRDENOISE_MAIN_COLORSPACE;色彩空间 TP_DIRPYRDENOISE_MAIN_COLORSPACE_RGB;RGB +TP_DIRPYRDENOISE_MAIN_COLORSPACE_TOOLTIP;对于Raw文件,RGB和L*a*b*均可用\n\n非Raw文件只可用L*a*b*空间,不论用户选择了哪个 +TP_DIRPYRDENOISE_MAIN_MODE;模式 +TP_DIRPYRDENOISE_MAIN_MODE_AGGRESSIVE;激进 +TP_DIRPYRDENOISE_MAIN_MODE_CONSERVATIVE;保守 +TP_DIRPYRDENOISE_MAIN_MODE_TOOLTIP;“保守”会保留低频的色度纹路,而“激进”会消除它们 +TP_DIRPYRDENOISE_MEDIAN_METHOD;中值法 +TP_DIRPYRDENOISE_MEDIAN_METHOD_CHROMINANCE;仅色度 +TP_DIRPYRDENOISE_MEDIAN_METHOD_LAB;L*a*b* +TP_DIRPYRDENOISE_MEDIAN_METHOD_LABEL;中值滤波器 +TP_DIRPYRDENOISE_MEDIAN_METHOD_LUMINANCE;仅亮度 +TP_DIRPYRDENOISE_MEDIAN_METHOD_RGB;RGB +TP_DIRPYRDENOISE_MEDIAN_METHOD_TOOLTIP;当使用“仅亮度”和“L*a*b*”法时,在降噪流水线中,\n中值滤波会在小波被应用后进行。\n当使用“RGB”模式时,它会在降噪流水线的最后被进行 +TP_DIRPYRDENOISE_MEDIAN_METHOD_WEIGHTED;权重L* (小) + a*b* (正常) +TP_DIRPYRDENOISE_MEDIAN_PASSES;中值迭代 +TP_DIRPYRDENOISE_MEDIAN_PASSES_TOOLTIP;使用3x3窗口进行三次中值迭代通常比使用7x7窗口进行一次迭代的效果更好 +TP_DIRPYRDENOISE_MEDIAN_TYPE;中值类型 +TP_DIRPYRDENOISE_MEDIAN_TYPE_TOOLTIP;使用你想要的窗口大小的中值滤波器。窗口大小越大,处理用时越长。\n3×3柔和:处理3x3窗口中的5个像素。\n3x3:处理3x3窗口里面的9个像素。\n5x5柔和:处理5x5窗口中的13个像素。\n5x5:处理5x5窗口中的25个像素。\n7x7:处理7x7窗口中的49个像素。\n9x9:处理9x9窗口中的81个像素。\n\n有时使用小窗口进行多次迭代的效果会优于使用大窗口进行一次迭代的效果 +TP_DIRPYRDENOISE_TYPE_3X3;3×3 +TP_DIRPYRDENOISE_TYPE_3X3SOFT;3×3柔和 +TP_DIRPYRDENOISE_TYPE_5X5;5×5 +TP_DIRPYRDENOISE_TYPE_5X5SOFT;5×5柔和 +TP_DIRPYRDENOISE_TYPE_7X7;7×7 +TP_DIRPYRDENOISE_TYPE_9X9;9×9 TP_DIRPYREQUALIZER_ALGO;皮肤色彩范围 TP_DIRPYREQUALIZER_ARTIF;减少杂色 TP_DIRPYREQUALIZER_HUESKIN;皮肤色相 @@ -754,7 +1117,7 @@ TP_DIRPYREQUALIZER_LUMACOARSEST;最粗糙 TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;反差 - TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;反差 + TP_DIRPYREQUALIZER_LUMAFINEST;最精细 -TP_DIRPYREQUALIZER_LUMANEUTRAL;自然 +TP_DIRPYREQUALIZER_LUMANEUTRAL;还原 TP_DIRPYREQUALIZER_SKIN;肤色针对/保护 TP_DIRPYREQUALIZER_THRESHOLD;阈值 TP_DISTORTION_AMOUNT;数量 @@ -765,7 +1128,9 @@ TP_EPD_STRENGTH;力度 TP_EXPOSURE_AUTOLEVELS;自动色阶 TP_EXPOSURE_BLACKLEVEL;黑点 TP_EXPOSURE_BRIGHTNESS;光亮度 +TP_EXPOSURE_CLAMPOOG;令超出色域的色彩溢出 TP_EXPOSURE_CLIP;可溢出% +TP_EXPOSURE_CLIP_TIP;自动色阶功能可以让占总数的多少比例的像素溢出 TP_EXPOSURE_COMPRHIGHLIGHTS;高光压缩 TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;高光压缩阈值 TP_EXPOSURE_COMPRSHADOWS;阴影压缩 @@ -775,14 +1140,26 @@ TP_EXPOSURE_CURVEEDITOR1;色调曲线 1 TP_EXPOSURE_CURVEEDITOR2;色调曲线 2 TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;请在RawPedia的Exposure > Tone Curve文章中了解如何使用双色调曲线 TP_EXPOSURE_EXPCOMP;曝光补偿 +TP_EXPOSURE_HISTMATCHING;自适应色调曲线 +TP_EXPOSURE_HISTMATCHING_TOOLTIP;自动调整滑条和曲线(不包括曝光补偿)以使图片贴近于内嵌于Raw的JPEG预览图 TP_EXPOSURE_LABEL;曝光 TP_EXPOSURE_SATURATION;色彩饱和度 TP_EXPOSURE_TCMODE_FILMLIKE;仿胶片式 TP_EXPOSURE_TCMODE_LABEL1;曲线模式1 TP_EXPOSURE_TCMODE_LABEL2;曲线模式2 +TP_EXPOSURE_TCMODE_LUMINANCE;亮度 +TP_EXPOSURE_TCMODE_PERCEPTUAL;感知性 TP_EXPOSURE_TCMODE_SATANDVALBLENDING;饱和度-亮度混合 TP_EXPOSURE_TCMODE_STANDARD;标准 TP_EXPOSURE_TCMODE_WEIGHTEDSTD;加权标准 +TP_EXPOS_BLACKPOINT_LABEL;Raw黑点 +TP_EXPOS_WHITEPOINT_LABEL;Raw白点 +TP_FILMNEGATIVE_LABEL;胶片负片 +TP_FILMNEGATIVE_PICK;选择(两个)中灰点 +TP_FILMSIMULATION_LABEL;胶片模拟 +TP_FILMSIMULATION_SLOWPARSEDIR;RawTherapee被设置寻找用于胶片模拟工具的Hald CLUT图像,图像所在的文件夹加载时间过长。\n前往参数设置-图片处理-Hald CLUT路径\n以寻找被使用的文件夹是哪个。你应该令该文件夹指向一个只有Hald CLUT图像而没有其他图片的文件夹,而如果你不想用胶片模拟功能,就将它指向一个空文件夹。\n\n阅读RawPedia的Film Simulation词条以获取更多信息。\n\n你现在想取消扫描吗? +TP_FILMSIMULATION_STRENGTH;力度 +TP_FILMSIMULATION_ZEROCLUTSFOUND;在参数设置中设定HaldCLUT目录 TP_FLATFIELD_AUTOSELECT;自动选择 TP_FLATFIELD_BLURRADIUS;模糊半径 TP_FLATFIELD_BLURTYPE;模糊种类 @@ -790,19 +1167,26 @@ TP_FLATFIELD_BT_AREA;区域 TP_FLATFIELD_BT_HORIZONTAL;水平 TP_FLATFIELD_BT_VERTHORIZ;垂直+水平 TP_FLATFIELD_BT_VERTICAL;垂直 +TP_FLATFIELD_CLIPCONTROL;溢出控制 +TP_FLATFIELD_CLIPCONTROL_TOOLTIP;溢出控制能够避免由于平场的应用而导致的高光溢出。如果在应用平场之前就有溢出的高光,数值就会为0 TP_FLATFIELD_LABEL;平场 +TP_GENERAL_11SCALE_TOOLTIP;此工具的效果仅在以1:1大小预览时才可见/准确 TP_GRADIENT_CENTER;中心 TP_GRADIENT_CENTER_X;中心 X +TP_GRADIENT_CENTER_X_TOOLTIP;将渐变滤镜向左(负值)或向右(正值)移动 TP_GRADIENT_CENTER_Y;中心 Y +TP_GRADIENT_CENTER_Y_TOOLTIP;将渐变滤镜向上(负值)或向下(正值)移动 TP_GRADIENT_DEGREE;角度 TP_GRADIENT_DEGREE_TOOLTIP;转动的角度数 TP_GRADIENT_FEATHER;羽化 TP_GRADIENT_FEATHER_TOOLTIP;以图像对角线的长度为100,设定渐变的宽度 TP_GRADIENT_LABEL;渐变滤镜 -TP_GRADIENT_STRENGTH;延展 +TP_GRADIENT_STRENGTH;力度 +TP_GRADIENT_STRENGTH_TOOLTIP;滤镜的强度(档数) TP_HLREC_BLEND;混合 TP_HLREC_CIELAB;CIELab混合 TP_HLREC_COLOR;色彩延伸 +TP_HLREC_ENA_TOOLTIP;可能会被自动色阶功能启用 TP_HLREC_LABEL;高光还原 TP_HLREC_LUMINANCE;亮度还原 TP_HLREC_METHOD;方法: @@ -812,17 +1196,19 @@ TP_HSVEQUALIZER_LABEL;HSV均衡器 TP_HSVEQUALIZER_SAT;S TP_HSVEQUALIZER_VAL;V TP_ICM_INPUTCAMERA;相机缺省 +TP_ICM_INPUTCAMERAICC;自适应相机档案 TP_ICM_INPUTCUSTOM;自定义 TP_ICM_INPUTCUSTOM_TOOLTIP;选择你自己的DCP/ICC色彩档案 TP_ICM_INPUTDLGLABEL;选择输入ICC配置... TP_ICM_INPUTEMBEDDED;如可能, 使用内置 -TP_ICM_INPUTEMBEDDED_TOOLTIP;使用色彩档案嵌入非raw文件 +TP_ICM_INPUTEMBEDDED_TOOLTIP;使用非raw文件内嵌的色彩档案 TP_ICM_INPUTNONE;无档案 +TP_ICM_INPUTNONE_TOOLTIP;不使用任何色彩档案。\n仅在特殊情况下使用此选项 TP_ICM_INPUTPROFILE;输入配置 TP_ICM_LABEL;ICM TP_ICM_NOICM;无ICM:sRGB配置 TP_ICM_OUTPUTPROFILE;输出配置 -TP_ICM_TONECURVE;使用 DCP色调曲线 +TP_ICM_TONECURVE;使用DCP色调曲线 TP_ICM_WORKINGPROFILE;当前配置 TP_IMPULSEDENOISE_LABEL;脉冲噪声降低 TP_IMPULSEDENOISE_THRESH;阈值 @@ -830,27 +1216,160 @@ TP_LABCURVE_AVOIDCOLORSHIFT;避免色彩偏移 TP_LABCURVE_AVOIDCOLORSHIFT_TOOLTIP;使色彩适应当前色彩空间范围, 并使用Munsell色矫正 TP_LABCURVE_BRIGHTNESS;光强度 TP_LABCURVE_CHROMATICITY;色度 +TP_LABCURVE_CHROMA_TOOLTIP;若要应用黑白色调,将色度值降低为-100 TP_LABCURVE_CONTRAST;对比度 TP_LABCURVE_CURVEEDITOR;亮度曲线 +TP_LABCURVE_CURVEEDITOR_CC_TOOLTIP;根据色度(C)调整色度(C),C=f(C) +TP_LABCURVE_CURVEEDITOR_CH;CH +TP_LABCURVE_CURVEEDITOR_CH_TOOLTIP;根据色相(H)调整色度(C),C=f(H) +TP_LABCURVE_CURVEEDITOR_CL;CL +TP_LABCURVE_CURVEEDITOR_CL_TOOLTIP;根据亮度(L)调整色度(C),C=f(L) +TP_LABCURVE_CURVEEDITOR_HH;HH +TP_LABCURVE_CURVEEDITOR_HH_TOOLTIP;根据色相(H)调整色相(H),H=f(H) +TP_LABCURVE_CURVEEDITOR_LC;LC +TP_LABCURVE_CURVEEDITOR_LC_TOOLTIP;根据色度(C)调整亮度(L),L=f(C) +TP_LABCURVE_CURVEEDITOR_LH;LH +TP_LABCURVE_CURVEEDITOR_LH_TOOLTIP;根据色相(H)调整亮度(L),L=f(H) +TP_LABCURVE_CURVEEDITOR_LL_TOOLTIP;根据亮度(L)调整亮度(L),L=f(L) TP_LABCURVE_LABEL;Lab调整 +TP_LABCURVE_LCREDSK;将LC曲线的效果限定于红色和肤色 +TP_LABCURVE_LCREDSK_TIP;勾选该选项框,LC曲线就只会影响红色和肤色。\n取消勾选,它的效果就会应用到所有色彩上 +TP_LABCURVE_RSTPROTECTION;红色与肤色保护 +TP_LABCURVE_RSTPRO_TOOLTIP;作用在色度滑条和CC曲线的调整上 TP_LENSGEOM_AUTOCROP;自动剪切 TP_LENSGEOM_FILL;自动填充 TP_LENSGEOM_LABEL;镜头/几何 +TP_LENSGEOM_LIN;线性 +TP_LENSGEOM_LOG;对数 +TP_LENSPROFILE_CORRECTION_AUTOMATCH;自动选择 +TP_LENSPROFILE_CORRECTION_LCPFILE;LCP文件 +TP_LENSPROFILE_CORRECTION_MANUAL;手动选择 TP_LENSPROFILE_LABEL;镜头矫正档案 +TP_LENSPROFILE_LENS_WARNING;警告:制作镜头档案时相机所用的裁切系数比本图片拍摄时\n所使用的裁剪系数更大。矫正结果可能出现错误 +TP_LENSPROFILE_MODE_HEADER;镜头档案 +TP_LENSPROFILE_USE_CA;色差 +TP_LENSPROFILE_USE_GEOMETRIC;几何畸变 +TP_LENSPROFILE_USE_HEADER;矫正 +TP_LENSPROFILE_USE_VIGNETTING;暗角 +TP_LOCALCONTRAST_AMOUNT;数量 +TP_LOCALCONTRAST_DARKNESS;暗部等级 +TP_LOCALCONTRAST_LABEL;局部反差 +TP_LOCALCONTRAST_LIGHTNESS;亮部等级 +TP_LOCALCONTRAST_RADIUS;半径 +TP_METADATA_EDIT;应用修改 +TP_METADATA_MODE;元数据复制模式 +TP_METADATA_STRIP;移除所有元数据 +TP_NEUTRAL;重置 +TP_NEUTRAL_TIP;还原各个曝光控制滑条的值\n自动色阶所能调整的滑条都会被此还原,不论你是否使用了自动色阶功能 TP_PCVIGNETTE_FEATHER;羽化 +TP_PCVIGNETTE_FEATHER_TOOLTIP;羽化:\n0 = 仅边角\n50 = 到达一半的位置\n100 = 到达中心 TP_PCVIGNETTE_LABEL;暗角滤镜 TP_PCVIGNETTE_ROUNDNESS;圆度 +TP_PCVIGNETTE_ROUNDNESS_TOOLTIP;圆度:\n0 = 矩形\n50 = 适于图像的椭圆\n100 = 圆形 TP_PCVIGNETTE_STRENGTH;力度 TP_PCVIGNETTE_STRENGTH_TOOLTIP;滤镜的曝光补偿力度(到达边角) +TP_PDSHARPENING_LABEL;捕图加锐 TP_PERSPECTIVE_HORIZONTAL;水平 TP_PERSPECTIVE_LABEL;视角 TP_PERSPECTIVE_VERTICAL;垂直 +TP_PFCURVE_CURVEEDITOR_CH;色相 +TP_PFCURVE_CURVEEDITOR_CH_TOOLTIP;控制去除某个色彩的色边的力度。\n越向上 = 越强,\n越向下 = 越弱 +TP_PREPROCESS_DEADPIXFILT;坏点过滤器 +TP_PREPROCESS_DEADPIXFILT_TOOLTIP;尝试过滤坏点 +TP_PREPROCESS_GREENEQUIL;绿平衡 +TP_PREPROCESS_HOTPIXFILT;热像素过滤器 +TP_PREPROCESS_HOTPIXFILT_TOOLTIP;尝试过滤热像素 TP_PREPROCESS_LABEL;预处理 TP_PREPROCESS_LINEDENOISE;线状噪点过滤 -TP_PREPROCESS_NO_FOUND;发现无 +TP_PREPROCESS_LINEDENOISE_DIRECTION;方向 +TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;双向 +TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;横向 +TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;横向,只在PDAF点所在的行上 +TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;纵向 +TP_PREPROCESS_NO_FOUND;未检测出 +TP_PREPROCESS_PDAFLINESFILTER;PDAF条纹过滤器 +TP_PRSHARPENING_LABEL;调整大小后加锐 +TP_PRSHARPENING_TOOLTIP;在调整图片大小后加锐图像。仅在选择"Lanczos"算法时可用。\n本工具的效果无法预览。见RawPedia的文章以了解本工具的使用教程 TP_RAWCACORR_AUTO;自动修正 +TP_RAWCACORR_AUTOIT;迭代 +TP_RAWCACORR_AUTOIT_TOOLTIP;若“自动矫正”被勾选,此设置便可用。\n自动矫正是保守的,也就是说它经常不会去除所有色差。\n要移除全部色差,你可以使用至多迭代五次的色差矫正迭代。\n每次迭代会纠正上个迭代未能修正的色差,代价是需要花费额外的处理时间 +TP_RAWCACORR_AVOIDCOLORSHIFT;避免偏色 TP_RAWCACORR_CABLUE;蓝 TP_RAWCACORR_CARED;红 +TP_RAWCACORR_LABEL;色差矫正 +TP_RAWEXPOS_BLACK_0;绿 1 (lead) +TP_RAWEXPOS_BLACK_1;红 +TP_RAWEXPOS_BLACK_2;蓝 +TP_RAWEXPOS_BLACK_3;绿 2 +TP_RAWEXPOS_BLACK_BLUE;蓝 +TP_RAWEXPOS_BLACK_GREEN;绿 +TP_RAWEXPOS_BLACK_RED;红 +TP_RAWEXPOS_LINEAR;白点矫正 +TP_RAWEXPOS_RGB;红,绿,蓝 +TP_RAW_AHD;AHD +TP_RAW_AMAZE;AMaZE +TP_RAW_AMAZEVNG4;AMaZE+VNG4 +TP_RAW_BORDER;边界 +TP_RAW_DCB;DCB +TP_RAW_DCBENHANCE;DCB优化 +TP_RAW_DCBITERATIONS;DCB迭代数 +TP_RAW_DCBVNG4;DCB+VNG4 +TP_RAW_DMETHOD;方法 +TP_RAW_DMETHOD_PROGRESSBAR;%1 去马赛克中... +TP_RAW_DMETHOD_PROGRESSBAR_REFINE;去马赛克精细化... +TP_RAW_DMETHOD_TOOLTIP;注:IGV和LMMSE是专门用于配合降噪工具,在为高ISO图片降噪时不产生迷宫状噪点,色调分离或是褪色所用的。\n像素偏移是为宾得/索尼的像素偏移文件所用的。此算法将使用AMaZE算法来处理非像素偏移文件 +TP_RAW_DUALDEMOSAICAUTOCONTRAST;自动阈值 +TP_RAW_DUALDEMOSAICAUTOCONTRAST_TOOLTIP;如果勾选框被打勾(推荐如此做),RawTherapee会根据图片中的平缓区域自动计算一个最优值。\n如果图像中没有平缓的区域,或是图片噪点太多,该数值会被设为0\n若想手动调整此数值,首先要将勾选框取消勾选(合适的值取决于具体图像的情况) +TP_RAW_DUALDEMOSAICCONTRAST;反差阈值 +TP_RAW_EAHD;EAHD +TP_RAW_FALSECOLOR;伪色抑制步长 +TP_RAW_FAST;Fast +TP_RAW_HD;阈值 +TP_RAW_HD_TOOLTIP;更低的数值会使热像素/坏点的检测更加激进,但是“宁错杀,不放过”的激进程度可能会导致杂点的产生。在启用本功能后,如果你发现了新出现的杂点,就逐渐提高阈值,直至杂点消失 +TP_RAW_HPHD;HPHD +TP_RAW_IGV;IGV +TP_RAW_IMAGENUM;子图像 +TP_RAW_IMAGENUM_SN;SN模式 +TP_RAW_IMAGENUM_TOOLTIP;某些Raw文件包含多张子图像(宾得/索尼的像素偏移,宾得的3张合并HDR,佳能的双像素,富士的EXR)。\n\n当使用除像素偏移外的任意一个去马赛克算法时,本栏用来选择哪帧子图像被处理。\n\n当在像素偏移的Raw文件上使用像素偏移去马赛克算法时,所有子图像都会被应用,此时本栏用来选择哪帧子图像被用来处理动体 +TP_RAW_LABEL;去马赛克 +TP_RAW_LMMSE;LMMSE +TP_RAW_LMMSEITERATIONS;LMMSE优化步长 +TP_RAW_LMMSE_TOOLTIP;添加gamma(步长1),中位数(步长2-4)和精细化(步长5-6)以减少杂点并提升信噪比 +TP_RAW_MONO;黑白 +TP_RAW_NONE;无(显示传感器阵列) +TP_RAW_PIXELSHIFT;像素偏移 +TP_RAW_PIXELSHIFTBLUR;动体蒙版模糊 +TP_RAW_PIXELSHIFTDMETHOD;动体区域的去马赛克算法 +TP_RAW_PIXELSHIFTEPERISO;敏感度 +TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;默认值0在原生ISO下应该具有不错的效果。\n更大的数值会增强动体检测的敏感度。\n以微小的步长调整此值,同时观察动体蒙版的变化。\n对于欠曝/高ISO的照片,应提高此值 +TP_RAW_PIXELSHIFTEQUALBRIGHT;将不同照片的亮度均等化 +TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;将各个通道分别均等化 +TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;启用:对RGB通道分别进行均等化。\n禁用:使用同一个均等化系数对所有通道进行均等化 +TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;以当前被选中的一帧图像为基准,均等化各帧图像的亮度。\n如果各帧中有过曝的区域,应选择最亮的一帧以避免过曝区域出现紫色,也可启用动体补正来解决该问题 +TP_RAW_PIXELSHIFTGREEN;检查绿色通道以检测动体 +TP_RAW_PIXELSHIFTHOLEFILL;填补动体蒙版的洞 +TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;填补动体蒙版中间所存在的洞 +TP_RAW_PIXELSHIFTMEDIAN;对动体区域使用中值 +TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;对于运动的部分,使用所有图片的中值,而不是用户选择的某一帧图片。\n移除在所有图片中位置都不同的物体。\n在移动慢(重叠)的物体上会产生动体效果 +TP_RAW_PIXELSHIFTMM_AUTO;自动 +TP_RAW_PIXELSHIFTMM_CUSTOM;自定义 +TP_RAW_PIXELSHIFTMM_OFF;关闭 +TP_RAW_PIXELSHIFTMOTIONMETHOD;动体补正 +TP_RAW_PIXELSHIFTNONGREENCROSS;检查红/蓝色通道以检测动体 +TP_RAW_PIXELSHIFTSHOWMOTION;显示动体蒙版 +TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;仅显示动体蒙版 +TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;显示没有照片的动体蒙版 +TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;在图像上用绿色蒙版显示动体区域 +TP_RAW_PIXELSHIFTSIGMA;模糊半径 +TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;默认半径值1.0一般对于原生ISO来说足够好。\n对于高ISO照片,提高此值,5.0是不错的起始点。\n在改变此值的同时关注动体蒙版 +TP_RAW_PIXELSHIFTSMOOTH;顺滑过渡 +TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;让存在动体的区域与没有动体之间的区域之间顺滑地过渡。\n将此值设置为0以禁用顺滑过渡\n将此值设置为1以使用AMaZE/LMMSE算法(这取决于你是否选择了“使用LMMSE”)所解出的你所选择的那一帧图像,如果你选择了“使用中值”,那么就会根据通过所有图像计算出的中值解出图像 +TP_RAW_RCD;RCD +TP_RAW_RCDVNG4;RCD+VNG4 +TP_RAW_SENSOR_BAYER_LABEL;拜耳阵列传感器 +TP_RAW_VNG4;VNG4 +TP_RESIZE_ALLOW_UPSCALING;允许升采样 +TP_RESIZE_APPLIESTO;应用到: TP_RESIZE_CROPPEDAREA;裁剪区域 TP_RESIZE_FITBOX;矩形区域 TP_RESIZE_FULLIMAGE;整张图 @@ -864,12 +1383,18 @@ TP_RESIZE_SCALE;缩放倍数 TP_RESIZE_SPECIFY;调整: TP_RESIZE_W;宽: TP_RESIZE_WIDTH;宽度 +TP_RETINEX_CONTEDIT_HSL;HSL直方图 +TP_RETINEX_CONTEDIT_LAB;L*a*b*直方图 +TP_RETINEX_CONTEDIT_LH;色调 +TP_RETINEX_CONTEDIT_MAP;均衡器 +TP_RETINEX_EQUAL;均衡器 +TP_RETINEX_VIEW_UNSHARP;USM锐化 TP_RGBCURVES_BLUE;B TP_RGBCURVES_CHANNEL;通道 TP_RGBCURVES_GREEN;G TP_RGBCURVES_LABEL;RGB曲线 TP_RGBCURVES_LUMAMODE;亮度模式 -TP_RGBCURVES_LUMAMODE_TOOLTIP;亮度模式允许改变R、G、B三个通道光量但不影响色彩 +TP_RGBCURVES_LUMAMODE_TOOLTIP;亮度模式允许改变R、G、B三个通道的亮度分配而不影响色彩 TP_RGBCURVES_RED;R TP_ROTATE_DEGREE;角度 TP_ROTATE_LABEL;旋转 @@ -886,14 +1411,18 @@ TP_SHARPENEDGE_LABEL;边缘 TP_SHARPENEDGE_PASSES;迭代 TP_SHARPENEDGE_THREE;仅亮度 TP_SHARPENING_AMOUNT;数量 +TP_SHARPENING_BLUR;模糊半径 +TP_SHARPENING_CONTRAST;反差阈值 TP_SHARPENING_EDRADIUS;半径 TP_SHARPENING_EDTOLERANCE;边缘容差 TP_SHARPENING_HALOCONTROL;光晕控制 TP_SHARPENING_HCAMOUNT;数量 +TP_SHARPENING_ITERCHECK;自动限制迭代 TP_SHARPENING_LABEL;锐化 TP_SHARPENING_METHOD;方法 TP_SHARPENING_ONLYEDGES;仅锐化边缘 TP_SHARPENING_RADIUS;半径 +TP_SHARPENING_RADIUS_BOOST;边缘半径值提升 TP_SHARPENING_RLD;理查森-露西反卷积法(RLD) TP_SHARPENING_RLD_AMOUNT;数量 TP_SHARPENING_RLD_DAMPING;衰减 @@ -901,6 +1430,17 @@ TP_SHARPENING_RLD_ITERATIONS;迭代 TP_SHARPENING_THRESHOLD;阈值 TP_SHARPENING_USM;USM锐化 TP_SHARPENMICRO_AMOUNT;数量 +TP_SHARPENMICRO_CONTRAST;反差阈值 +TP_SHARPENMICRO_LABEL;微反差 +TP_SHARPENMICRO_MATRIX;使用3×3阵列而非5×5阵列 +TP_SHARPENMICRO_UNIFORMITY;均匀度 +TP_TM_FATTAL_AMOUNT;数量 +TP_TM_FATTAL_ANCHOR;锚点 +TP_TM_FATTAL_LABEL;动态范围压缩 +TP_TM_FATTAL_THRESHOLD;细节 +TP_VIBRANCE_AVOIDCOLORSHIFT;避免偏色 +TP_VIBRANCE_CURVEEDITOR_SKINTONES_TOOLTIP;根据色相(H)调整色相(H),H=f(H) +TP_VIBRANCE_PROTECTSKINS;保护肤色 TP_VIGNETTING_AMOUNT;数量 TP_VIGNETTING_CENTER;中心 TP_VIGNETTING_CENTER_X;中心 X @@ -908,6 +1448,106 @@ TP_VIGNETTING_CENTER_Y;中心 Y TP_VIGNETTING_LABEL;暗角矫正 TP_VIGNETTING_RADIUS;半径 TP_VIGNETTING_STRENGTH;力度 +TP_WAVELET_1;第1级 +TP_WAVELET_2;第2级 +TP_WAVELET_3;第3级 +TP_WAVELET_4;第4级 +TP_WAVELET_5;第5级 +TP_WAVELET_6;第6级 +TP_WAVELET_7;第7级 +TP_WAVELET_8;第8级 +TP_WAVELET_9;第9级 +TP_WAVELET_APPLYTO;应用到 +TP_WAVELET_AVOID;避免偏色 +TP_WAVELET_B0;黑色 +TP_WAVELET_B1;灰色 +TP_WAVELET_B2;残差图 +TP_WAVELET_BACKGROUND;背景 +TP_WAVELET_BACUR;曲线 +TP_WAVELET_BANONE;无 +TP_WAVELET_BASLI;滑条 +TP_WAVELET_CCURVE;局部反差 +TP_WAVELET_CH1;应用到整个色度范围 +TP_WAVELET_CH2;根据饱和度高低 +TP_WAVELET_CH3;与反差等级挂钩 +TP_WAVELET_CHCU;曲线 +TP_WAVELET_CHR;色度-反差挂钩力度 +TP_WAVELET_CHRO;根据饱和度高低 +TP_WAVELET_CHSL;滑条 +TP_WAVELET_CHTYPE;色度应用方法 +TP_WAVELET_COMPCONT;反差 +TP_WAVELET_CONTR;色彩范围 +TP_WAVELET_CONTRA;反差 +TP_WAVELET_CONTRAST_MINUS;反差 - +TP_WAVELET_CONTRAST_PLUS;反差 + +TP_WAVELET_CONTRA_TOOLTIP;改变残差图的反差 +TP_WAVELET_CTYPE;色度控制 +TP_WAVELET_DALL;所有方向 +TP_WAVELET_DAUB;边缘表现 +TP_WAVELET_DAUB2;D2-低 +TP_WAVELET_DAUB4;D4-标准 +TP_WAVELET_DAUB6;D6-标准增强 +TP_WAVELET_DAUB10;D10-中等 +TP_WAVELET_DAUB14;D14-高 +TP_WAVELET_DAUB_TOOLTIP;改变多贝西系数:\nD4 = 标准,\nD14 = 一般而言表现最好,但会增加10%的处理耗时。\n\n影响边缘检测以及较低层级的质量。但是质量不完全和这个系数有关,可能会随具体的图像和处理方式而变化 +TP_WAVELET_DONE;纵向 +TP_WAVELET_DTHR;斜向 +TP_WAVELET_DTWO;横向 +TP_WAVELET_EDCU;曲线 +TP_WAVELET_EDGCONT;局部反差 +TP_WAVELET_EDGE;边缘锐度 +TP_WAVELET_EDGTHRESH;细节 +TP_WAVELET_EDGTHRESH_TOOLTIP;改变力度在第1级和其它层级之间的分配。阈值越高,在第1级上的活动越突出。谨慎使用负值,因为这会让更高层级上的活动更强烈,可能导致杂点的出现。 +TP_WAVELET_EDRAD;半径 +TP_WAVELET_EDSL;阈值滑条 +TP_WAVELET_EDVAL;力度 +TP_WAVELET_FINEST;最精细 +TP_WAVELET_HS1;全部亮度范围 +TP_WAVELET_HS2;阴影/高光 +TP_WAVELET_HUESKIN;肤色和其它色彩 +TP_WAVELET_HUESKY;天空色 +TP_WAVELET_LABEL;小波层级 +TP_WAVELET_LARGEST;最粗糙 +TP_WAVELET_LEVCH;色度 +TP_WAVELET_LEVDIR_ALL;所有方向的全部层级 +TP_WAVELET_LEVDIR_INF;小于等于此层级 +TP_WAVELET_LEVDIR_ONE;一个层级 +TP_WAVELET_LEVDIR_SUP;高于此层级 +TP_WAVELET_LEVELS;小波层级数 +TP_WAVELET_LEVELS_TOOLTIP;选择将图像分解为几个层级的细节。更多的层级需要使用更多的内存和更长的处理时间 +TP_WAVELET_LEVF;反差 +TP_WAVELET_LEVLABEL;当前预览中可见的层级数 = %1 +TP_WAVELET_LEVONE;第2级 +TP_WAVELET_LEVTHRE;第4级 +TP_WAVELET_LEVTWO;第3级 +TP_WAVELET_LEVZERO;第1级 +TP_WAVELET_LINKEDG;与边缘锐度的力度挂钩 +TP_WAVELET_MEDGREINF;第一层级 +TP_WAVELET_MEDI;减少蓝天中的杂点 +TP_WAVELET_NEUTRAL;还原 +TP_WAVELET_NOIS;去噪 +TP_WAVELET_NOISE;去噪和精细化 +TP_WAVELET_PROC;处理 +TP_WAVELET_RE1;增强 +TP_WAVELET_RE2;不变 +TP_WAVELET_RE3;减弱 +TP_WAVELET_RESCHRO;色度 +TP_WAVELET_RESCON;阴影 +TP_WAVELET_RESCONH;高光 +TP_WAVELET_RESID;残差图像 +TP_WAVELET_SETTINGS;小波设定 +TP_WAVELET_SKIN;肤色针对/保护 +TP_WAVELET_STREN;力度 +TP_WAVELET_STRENGTH;力度 +TP_WAVELET_SUPE;额外级 +TP_WAVELET_THR;阴影阈值 +TP_WAVELET_THRH;高光阈值 +TP_WAVELET_TILESBIG;大切片 +TP_WAVELET_TILESFULL;整张图片 +TP_WAVELET_TILESIZE;切片缓存方法 +TP_WAVELET_TILESLIT;小切片 +TP_WAVELET_TILES_TOOLTIP;处理整张图片可以让图像质量更好,所以推荐使用该选项,切片缓存是给小内存用户的备用方法。阅读RawPedia的文章以了解具体的内存需求 +TP_WAVELET_TON;调色 TP_WBALANCE_AUTO;自动 TP_WBALANCE_CAMERA;相机 TP_WBALANCE_CLOUDY;阴天 @@ -915,498 +1555,907 @@ TP_WBALANCE_CUSTOM;自定义 TP_WBALANCE_DAYLIGHT;晴天 TP_WBALANCE_EQBLUERED;蓝红平衡 TP_WBALANCE_FLASH55;徕卡 +TP_WBALANCE_FLASH60;标准,佳能,宾得,奥林巴斯 +TP_WBALANCE_FLASH65;尼康,松下,索尼,美能达 TP_WBALANCE_FLASH_HEADER;闪光 +TP_WBALANCE_FLUO_HEADER;荧光灯 TP_WBALANCE_GREEN;色度 TP_WBALANCE_LABEL;白平衡 TP_WBALANCE_LED_HEADER;LED TP_WBALANCE_METHOD;方法 +TP_WBALANCE_PICKER;选点 TP_WBALANCE_SHADE;阴影 TP_WBALANCE_SIZE;大小: TP_WBALANCE_SOLUX35;Solux 3500K TP_WBALANCE_SOLUX41;Solux 4100K TP_WBALANCE_SPOTWB;白平衡采样 +TP_WBALANCE_TEMPBIAS;自动白平衡色温偏向 +TP_WBALANCE_TEMPBIAS_TOOLTIP;此功能允许你将色温向冷/暖偏移\n以调整计算出的“自动白平衡”。这个偏移被表达为已计\n算出的色温的一个百分比,故最终的调整结果为“色温+色温*偏移” TP_WBALANCE_TEMPERATURE;色温 +TP_WBALANCE_TUNGSTEN;白炽灯 TP_WBALANCE_WATER1;水下 1 TP_WBALANCE_WATER2;水下 2 TP_WBALANCE_WATER_HEADER;水下 ZOOMPANEL_100;(100%) -ZOOMPANEL_NEWCROPWINDOW;开启(新的)细节窗口 +ZOOMPANEL_NEWCROPWINDOW;开启(新的)细节窗口 ZOOMPANEL_ZOOM100;缩放到100%\n快捷键:z -ZOOMPANEL_ZOOMFITCROPSCREEN;适应边缘到屏幕\n快捷键:f +ZOOMPANEL_ZOOMFITCROPSCREEN;适应裁剪区域到屏幕\n快捷键:f ZOOMPANEL_ZOOMFITSCREEN;适应屏幕\n快捷键:Alt-f ZOOMPANEL_ZOOMIN;缩放拉近\n快捷键:+ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- -ADJUSTER_RESET_TO_DEFAULT;单击-恢复默认值\nCtrl+单击-恢复初始值 -CURVEEDITOR_AXIS_IN;I: -CURVEEDITOR_AXIS_LEFT_TAN;LT: -CURVEEDITOR_AXIS_OUT;O: -CURVEEDITOR_AXIS_RIGHT_TAN;RT: -CURVEEDITOR_CATMULLROM;灵活 -CURVEEDITOR_EDITPOINT_HINT;启用对于节点进/出值的编辑\n\n右击节点以选中\n右击空白处以取消选中节点 -EDIT_OBJECT_TOOLTIP;在预览窗口中展示一个允许你调整本工具的widget窗口。 -EDIT_PIPETTE_TOOLTIP;要向曲线添加调整点,点击此按钮,按住Ctrl键并用鼠标左键点击图像预览中你想要的点。\n要调整点的位置,按住Ctrl键并用鼠标左键点击图像预览中的对应位置,然后松开Ctrl(除非你希望精调)同时按住鼠标左键,将鼠标向上/下移动以上下移动曲线中的点。 !!!!!!!!!!!!!!!!!!!!!!!!! ! Untranslated keys follow; remove the ! prefix after an entry is translated. !!!!!!!!!!!!!!!!!!!!!!!!! -FILEBROWSER_BROWSEPATHBUTTONHINT;点击以打开路径,刷新文件夹并搜索“查找”框中的关键词 -FILEBROWSER_BROWSEPATHHINT;输入你想前往的路径。\n\n快捷键:\nCtrl-o 让文本框获得焦点\nEnter / Ctrl-Enter 前往输入的目录\nEsc 清除改动\nShift-Esc 让文本框失去焦点\n\n路径快捷键:\n~ - 用户的home/文档路径\n! - 用户的图片路径 -FILEBROWSER_CACHECLEARFROMFULL;清除全部,包括缓存文件 -FILEBROWSER_CACHECLEARFROMPARTIAL;清除全部,不包括缓存文件 -FILEBROWSER_COLORLABEL_TOOLTIP;颜色标记,\n\n使用下拉菜单或快捷键:\nShift-Ctrl-0 无颜色\nShift-Ctrl-1 红\nShift-Ctrl-2 黄\nShift-Ctrl-3 绿\nShift-Ctrl-4 蓝\nShift-Ctrl-5 紫 -FILEBROWSER_DELETEDIALOG_ALL;你确定要永久删除%1个垃圾桶中的文件吗? -FILEBROWSER_DELETEDIALOG_SELECTED;你希望永久删除%1个被选中的文件吗? -FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;你希望永久删除%1个被选中的文件, 包括已进行过队列处理的版本吗? -FILEBROWSER_EMPTYTRASHHINT;永久删除垃圾桶的所有文件 -FILEBROWSER_POPUPREMOVE;永久删除 -FILEBROWSER_POPUPREMOVEINCLPROC;永久删除,包括队列处理的版本 -FILEBROWSER_QUERYHINT;输入文件名进行搜索。支持不完整文件名。使用英文逗号分割关键词,例:\n1001,1004,1199\n\n在关键词前面加入!=以排除此关键词,例:\n!=1001,1004,1199\n\n快捷键:\nCtrl-f-让搜索框获得焦点,\nEnter-搜索,\nEsc-清空搜索框,\nShift-Esc-让搜索框失去焦点 -FILEBROWSER_SHOWCOLORLABEL1HINT;显示被标记为红色的照片\n快捷键:Alt-1 -FILEBROWSER_SHOWCOLORLABEL2HINT;显示被标记为黄色的照片\n快捷键:Alt-2 -FILEBROWSER_SHOWCOLORLABEL3HINT;显示被标记为绿色的照片\n快捷键:Alt-3 -FILEBROWSER_SHOWCOLORLABEL4HINT;显示被标记为蓝色的照片\n快捷键:Alt-4 -FILEBROWSER_SHOWCOLORLABEL5HINT;显示被标记为紫色的照片\n快捷键:Alt-5 -FILEBROWSER_SHOWEDITEDHINT;显示已编辑的照片\n快捷键:7 -FILEBROWSER_SHOWEDITEDNOTHINT;显示未编辑的照片\n快捷键:6 -FILEBROWSER_SHOWNOTTRASHHINT;仅显示未进入垃圾箱的照片 -FILEBROWSER_SHOWORIGINALHINT;仅显示原图。\n\n当多张文件名相同,但扩展名不同的图片存在时,在参数设置-文件浏览器-已知扩展名列表中,扩展名排得更靠上的图片会被当作这些图片的原图。 -FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;显示未保存的图片\n快捷键:Alt-6 -FILEBROWSER_SHOWUNCOLORHINT;显示没有颜色标记的照片\n快捷键:Alt-0 -FILEBROWSER_UNRANK_TOOLTIP;未评级\n快捷键:Shift-0 -GENERAL_CURRENT;当前 -GENERAL_HELP;帮助 -GENERAL_RESET;重置 -GENERAL_SLIDER;滑条 -GIMP_PLUGIN_INFO;欢迎使用RawTherapee的GIMP插件!\n当你完成编辑后,关闭RawTherapee主窗口,图片就会被自动导入到GIMP中 -HISTOGRAM_TOOLTIP_BAR;显示/隐藏RGB指示条 -HISTOGRAM_TOOLTIP_CHRO;显示/隐藏色度直方图 -!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. -HISTOGRAM_TOOLTIP_RAW;显示/隐藏Raw直方图 -HISTORY_MSG_82;档案已改变 -HISTORY_MSG_86;RGB曲线-色度模式 -HISTORY_MSG_87;脉冲噪声降低 -HISTORY_MSG_88;脉冲降噪阈值 -HISTORY_MSG_91;降噪-Chrominance master -!HISTORY_MSG_93;CbDL-Value -!HISTORY_MSG_94;Contrast by Detail Levels -HISTORY_MSG_95;L*a*b*-色度 -HISTORY_MSG_96;L*a*b*-a* 曲线 -HISTORY_MSG_97;L*a*b*-b* 曲线 -HISTORY_MSG_98;去马赛克方法 -HISTORY_MSG_99;热像素过滤器 -HISTORY_MSG_100;曝光-饱和度 -HISTORY_MSG_101;HSV-色度(Hue) -HISTORY_MSG_102;HSV-饱和度(Saturation) -HISTORY_MSG_104;HSV均衡器 -HISTORY_MSG_105;去除色边 -HISTORY_MSG_106;去除色边-半径 -HISTORY_MSG_107;去除色边-阈值 -!HISTORY_MSG_108;Exposure-HLC threshold -HISTORY_MSG_109;调整大小-边界限制方块 -HISTORY_MSG_110;调整大小-应用到 +!FILEBROWSER_POPUPINSPECT;Inspect +!GENERAL_DELETE_ALL;Delete all +!GENERAL_EDIT;Edit +!GENERAL_SAVE_AS;Save as... +!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 !HISTORY_MSG_112;--unused-- -HISTORY_MSG_115;伪色抑制 -HISTORY_MSG_116;DCB增强 -HISTORY_MSG_117;Raw色差矫正-红 -HISTORY_MSG_118;Raw色差矫正-蓝 -HISTORY_MSG_120;绿平衡 -HISTORY_MSG_121;Raw色差矫正-自动 -HISTORY_MSG_131;降噪-亮度 -HISTORY_MSG_132;降噪-色度 !HISTORY_MSG_133;Output gamma !HISTORY_MSG_134;Free gamma !HISTORY_MSG_135;Free gamma !HISTORY_MSG_136;Free gamma slope -!HISTORY_MSG_137;Black level-Green 1 -!HISTORY_MSG_138;Black level-Red -!HISTORY_MSG_139;Black level-Blue -!HISTORY_MSG_140;Black level-Green 2 -!HISTORY_MSG_141;Black level-Link greens -!HISTORY_MSG_142;ES-Iterations -!HISTORY_MSG_143;ES-Quantity -HISTORY_MSG_144;微反差-数量 -HISTORY_MSG_145;微反差-均匀度 -HISTORY_MSG_148;微反差 -HISTORY_MSG_149;微反差-3×3阵列 +!HISTORY_MSG_137;Black level - Green 1 +!HISTORY_MSG_138;Black level - Red +!HISTORY_MSG_139;Black level - Blue +!HISTORY_MSG_140;Black level - Green 2 +!HISTORY_MSG_141;Black level - Link greens !HISTORY_MSG_150;Post-demosaic artifact/noise red. !HISTORY_MSG_151;Vibrance -!HISTORY_MSG_152;Vib-Pastel tones -!HISTORY_MSG_153;Vib-Saturated tones -!HISTORY_MSG_154;Vib-Protect skin-tones -!HISTORY_MSG_156;Vib-Link pastel/saturated -!HISTORY_MSG_157;Vib-P/S threshold -!HISTORY_MSG_161;TM-Reweighting iterates -HISTORY_MSG_163;RGB曲线-红 -HISTORY_MSG_164;RGB曲线-绿 -HISTORY_MSG_165;RGB曲线-蓝 -HISTORY_MSG_166;曝光-重置 -HISTORY_MSG_167;去马赛克方法 -HISTORY_MSG_168;L*a*b*-CC曲线 -HISTORY_MSG_169;L*a*b*-CH曲线 -HISTORY_MSG_170;Vibrance-HH曲线 -HISTORY_MSG_171;L*a*b*-LC曲线 -HISTORY_MSG_172;L*a*b*-限制LC -HISTORY_MSG_173;降噪-细节恢复 -!HISTORY_MSG_175;CAM02-CAT02 adaptation -!HISTORY_MSG_176;CAM02-Viewing surround -!HISTORY_MSG_177;CAM02-Scene luminosity -!HISTORY_MSG_178;CAM02-Viewing luminosity -!HISTORY_MSG_179;CAM02-White-point model -HISTORY_MSG_180;CAM02-亮度 (J) -HISTORY_MSG_181;CAM02-色度 (C) -!HISTORY_MSG_182;CAM02-Automatic CAT02 -!HISTORY_MSG_184;CAM02-Scene surround -!HISTORY_MSG_185;CAM02-Gamut control -HISTORY_MSG_186;CAM02-算法 -HISTORY_MSG_187;CAM02-红色/肤色保护 -HISTORY_MSG_188;CAM02-亮度 (Q) -HISTORY_MSG_189;CAM02-对比度 (Q) -HISTORY_MSG_190;CAM02-饱和度 (S) -HISTORY_MSG_191;CAM02-色彩丰富度 (M) -HISTORY_MSG_192;CAM02-色度 (h) -HISTORY_MSG_193;CAM02-色调曲线1 -HISTORY_MSG_194;CAM02-色调曲线2 -HISTORY_MSG_195;CAM02-色调曲线1 -HISTORY_MSG_196;CAM02-色调曲线2 -!HISTORY_MSG_197;CAM02-Color curve -!HISTORY_MSG_198;CAM02-Color curve -!HISTORY_MSG_199;CAM02-Output histograms -HISTORY_MSG_200;CAM02-色调映射 -!HISTORY_MSG_201;NR-Chrominance-R&G -!HISTORY_MSG_202;NR-Chrominance-B&Y -HISTORY_MSG_203;降噪-色彩空间 -HISTORY_MSG_204;LMMSE优化步长 -HISTORY_MSG_205;CAM02-热像素/坏点过滤器 -!HISTORY_MSG_206;CAT02-Auto scene luminosity -HISTORY_MSG_207;去除色边-色度曲线 -!HISTORY_MSG_208;WB-B/R equalizer +!HISTORY_MSG_152;Vib - Pastel tones +!HISTORY_MSG_153;Vib - Saturated tones +!HISTORY_MSG_154;Vib - Protect skin-tones +!HISTORY_MSG_156;Vib - Link pastel/saturated +!HISTORY_MSG_157;Vib - P/S threshold +!HISTORY_MSG_161;TM - Reweighting iterates +!HISTORY_MSG_175;CAM02/16 - CAT02/16 adaptation +!HISTORY_MSG_176;CAM02/16 - Viewing surround +!HISTORY_MSG_177;CAM02/16 - Scene luminosity +!HISTORY_MSG_178;CAM02/16 - Viewing luminosity +!HISTORY_MSG_179;CAM02/16 - White-point model +!HISTORY_MSG_182;CAM02/16 - Automatic CAT02/16 +!HISTORY_MSG_184;CAM02/16 - Scene surround +!HISTORY_MSG_185;CAM02/16 - Gamut control +!HISTORY_MSG_197;CAM02/16 - Color curve +!HISTORY_MSG_198;CAM02/16 - Color curve +!HISTORY_MSG_199;CAM02/16 - Output histograms +!HISTORY_MSG_206;CAT02/16 - Auto scene luminosity +!HISTORY_MSG_208;WB - B/R equalizer !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_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_240;GF-Center -!HISTORY_MSG_241;VF-Feather -!HISTORY_MSG_242;VF-Roundness -!HISTORY_MSG_243;VC-Radius -HISTORY_MSG_246;L*a*b*-CL曲线 -HISTORY_MSG_247;L*a*b*-LH曲线 -HISTORY_MSG_248;L*a*b*-HH曲线 -!HISTORY_MSG_249;CbDL-Threshold -!HISTORY_MSG_250;NR-Enhanced -!HISTORY_MSG_251;B&W-Algorithm -!HISTORY_MSG_252;CbDL-Skin tar/prot -!HISTORY_MSG_253;CbDL-Reduce artifacts -!HISTORY_MSG_254;CbDL-Skin hue -HISTORY_MSG_255;降噪-中值滤波器 -HISTORY_MSG_256;降噪-中值滤波器-方法 +!HISTORY_MSG_237;B&W - CM +!HISTORY_MSG_238;GF - Feather +!HISTORY_MSG_240;GF - Center +!HISTORY_MSG_241;VF - Feather +!HISTORY_MSG_242;VF - Roundness +!HISTORY_MSG_243;VC - Radius +!HISTORY_MSG_250;NR - Enhanced +!HISTORY_MSG_251;B&W - Algorithm !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_274;CT-Sat. Shadows -!HISTORY_MSG_275;CT-Sat. Highlights -!HISTORY_MSG_276;CT-Opacity +!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_274;CT - Sat. Shadows +!HISTORY_MSG_275;CT - Sat. Highlights +!HISTORY_MSG_276;CT - Opacity !HISTORY_MSG_277;--unused-- -!HISTORY_MSG_278;CT-Preserve luminance -!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;降噪-中值滤波-方法 -HISTORY_MSG_286;降噪-中值滤波-类型 -HISTORY_MSG_287;降噪-中值滤波-迭代 -HISTORY_MSG_288;平场-溢出控制 -HISTORY_MSG_289;平场-溢出控制-自动 -!HISTORY_MSG_290;Black Level-Red -!HISTORY_MSG_291;Black Level-Green -!HISTORY_MSG_292;Black Level-Blue -HISTORY_MSG_293;胶片模拟 -HISTORY_MSG_294;胶片模拟-力度 -HISTORY_MSG_295;胶片模拟-胶片 -HISTORY_MSG_296;降噪-亮度曲线 -HISTORY_MSG_297;降噪-模式 -HISTORY_MSG_298;坏点过滤器 -HISTORY_MSG_299;降噪-色度曲线 +!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_290;Black Level - Red +!HISTORY_MSG_291;Black Level - Green +!HISTORY_MSG_292;Black Level - Blue !HISTORY_MSG_300;- -!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;小波层级 -!HISTORY_MSG_306;W-Process -!HISTORY_MSG_307;W-Process -!HISTORY_MSG_308;W-Process direction -HISTORY_MSG_309;小波-边缘锐度-细节 -!HISTORY_MSG_310;W-Residual-Sky tar/prot -HISTORY_MSG_311;小波-小波层级 -!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-Highlight levels -!HISTORY_MSG_319;W-Contrast-Highlight range -!HISTORY_MSG_320;W-Contrast-Shadow range -!HISTORY_MSG_321;W-Contrast-Shadow 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 -!HISTORY_MSG_335;W-Residual-Highlights -!HISTORY_MSG_336;W-Residual-Highlights threshold -!HISTORY_MSG_337;W-Residual-Sky hue -HISTORY_MSG_338;小波-边缘锐度-半径 -HISTORY_MSG_339;小波-边缘锐度-力度 -HISTORY_MSG_340;小波-力度 -!HISTORY_MSG_341;W-Edge performance -!HISTORY_MSG_342;W-ES-First level -!HISTORY_MSG_343;W-Chroma levels -!HISTORY_MSG_344;W-Meth chroma sl/cur -!HISTORY_MSG_345;W-ES-Local contrast -!HISTORY_MSG_346;W-ES-Local contrast method -HISTORY_MSG_347;小波-去噪-第1级 -HISTORY_MSG_348;小波-去噪-第2级 -HISTORY_MSG_349;小波-去噪-第3级 -!HISTORY_MSG_350;W-ES-Edge detection -!HISTORY_MSG_351;W-Residual-HH curve -!HISTORY_MSG_352;W-Background -!HISTORY_MSG_353;W-ES-Gradient sensitivity -!HISTORY_MSG_354;W-ES-Enhanced -!HISTORY_MSG_355;W-ES-Threshold low -!HISTORY_MSG_356;W-ES-Threshold high -!HISTORY_MSG_357;W-Denoise-Link with ES -!HISTORY_MSG_358;W-Gamut-CH -!HISTORY_MSG_359;Hot/Dead-Threshold -!HISTORY_MSG_360;TM-Gamma -!HISTORY_MSG_361;W-Final-Chroma balance -!HISTORY_MSG_362;W-Residual-Compression method -!HISTORY_MSG_363;W-Residual-Compression strength -!HISTORY_MSG_364;W-Final-Contrast 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_368;W-Final-Contrast balance -!HISTORY_MSG_369;W-Final-Balance method -!HISTORY_MSG_370;W-Final-Local contrast curve -HISTORY_MSG_371;调整大小后加锐(PRS) -HISTORY_MSG_372;PRS USM-半径 -HISTORY_MSG_373;PRS USM-数量 -HISTORY_MSG_374;PRS USM-阈值 -HISTORY_MSG_375;PRS USM-仅加锐边缘 -HISTORY_MSG_376;PRS USM-边缘检测半径 -HISTORY_MSG_377;PRS USM-边缘容差 -HISTORY_MSG_378;PRS USM-光晕控制 -HISTORY_MSG_379;PRS USM-光晕控制数量 -HISTORY_MSG_380;PRS-方法 -HISTORY_MSG_381;PRS RLD-半径 -HISTORY_MSG_382;PRS RLD-数量 -HISTORY_MSG_383;PRS RLD-衰减 -HISTORY_MSG_384;PRS RLD-迭代 -!HISTORY_MSG_385;W-Residual-Color Balance -!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_392;W-Residual-Color Balance -!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_405;小波-去噪-第4级 -!HISTORY_MSG_406;W-ES-Neighboring pixels -!HISTORY_MSG_407;Retinex-Method -!HISTORY_MSG_408;Retinex-Radius -!HISTORY_MSG_409;Retinex-Contrast -!HISTORY_MSG_410;Retinex-Offset -!HISTORY_MSG_411;Retinex-Strength -!HISTORY_MSG_412;Retinex-Gaussian gradient -!HISTORY_MSG_413;Retinex-Contrast -!HISTORY_MSG_414;Retinex-Histogram-Lab -!HISTORY_MSG_415;Retinex-Transmission +!HISTORY_MSG_304;W - Contrast levels +!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 +!HISTORY_MSG_335;W - Residual - Highlights +!HISTORY_MSG_336;W - Residual - Highlights threshold +!HISTORY_MSG_337;W - Residual - Sky hue +!HISTORY_MSG_341;W - Edge performance +!HISTORY_MSG_342;W - ES - First level +!HISTORY_MSG_343;W - Chroma levels +!HISTORY_MSG_344;W - Meth chroma sl/cur +!HISTORY_MSG_345;W - ES - Local contrast +!HISTORY_MSG_346;W - ES - Local contrast method +!HISTORY_MSG_350;W - ES - Edge detection +!HISTORY_MSG_351;W - Residual - HH curve +!HISTORY_MSG_352;W - Background +!HISTORY_MSG_353;W - ES - Gradient sensitivity +!HISTORY_MSG_354;W - ES - Enhanced +!HISTORY_MSG_355;W - ES - Threshold low +!HISTORY_MSG_356;W - ES - Threshold high +!HISTORY_MSG_358;W - Gamut - CH +!HISTORY_MSG_359;Hot/Dead - Threshold +!HISTORY_MSG_360;TM - Gamma +!HISTORY_MSG_361;W - Final - Chroma balance +!HISTORY_MSG_362;W - Residual - Compression method +!HISTORY_MSG_363;W - Residual - Compression strength +!HISTORY_MSG_364;W - Final - Contrast 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_368;W - Final - Contrast balance +!HISTORY_MSG_369;W - Final - Balance method +!HISTORY_MSG_370;W - Final - Local contrast curve +!HISTORY_MSG_385;W - Residual - Color balance +!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_392;W - Residual - Color balance +!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_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Radius +!HISTORY_MSG_409;Retinex - Contrast +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Gaussian gradient +!HISTORY_MSG_413;Retinex - Contrast +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission !HISTORY_MSG_416;Retinex -!HISTORY_MSG_417;Retinex-Transmission median -!HISTORY_MSG_418;Retinex-Threshold -!HISTORY_MSG_419;Retinex-Color space -!HISTORY_MSG_420;Retinex-Histogram-HSL -!HISTORY_MSG_421;Retinex-Gamma -!HISTORY_MSG_422;Retinex-Gamma -!HISTORY_MSG_423;Retinex-Gamma slope -!HISTORY_MSG_424;Retinex-HL threshold -!HISTORY_MSG_425;Retinex-Log base -!HISTORY_MSG_426;Retinex-Hue equalizer +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !HISTORY_MSG_427;Output rendering intent !HISTORY_MSG_428;Monitor rendering intent -!HISTORY_MSG_429;Retinex-Iterations -!HISTORY_MSG_430;Retinex-Transmission gradient -!HISTORY_MSG_431;Retinex-Strength gradient -!HISTORY_MSG_432;Retinex-M-Highlights -!HISTORY_MSG_433;Retinex-M-Highlights TW -!HISTORY_MSG_434;Retinex-M-Shadows -!HISTORY_MSG_435;Retinex-M-Shadows TW -!HISTORY_MSG_436;Retinex-M-Radius -!HISTORY_MSG_437;Retinex-M-Method -!HISTORY_MSG_438;Retinex-M-Equalizer -!HISTORY_MSG_439;Retinex-Process -!HISTORY_MSG_440;CbDL-Method -!HISTORY_MSG_441;Retinex-Gain transmission -!HISTORY_MSG_442;Retinex-Scale +!HISTORY_MSG_429;Retinex - Iterations +!HISTORY_MSG_430;Retinex - Transmission gradient +!HISTORY_MSG_431;Retinex - Strength gradient +!HISTORY_MSG_432;Retinex - M - Highlights +!HISTORY_MSG_433;Retinex - M - Highlights TW +!HISTORY_MSG_434;Retinex - M - Shadows +!HISTORY_MSG_435;Retinex - M - Shadows TW +!HISTORY_MSG_436;Retinex - M - Radius +!HISTORY_MSG_437;Retinex - M - Method +!HISTORY_MSG_438;Retinex - M - Equalizer +!HISTORY_MSG_439;Retinex - Process +!HISTORY_MSG_440;CbDL - Method +!HISTORY_MSG_441;Retinex - Gain transmission +!HISTORY_MSG_442;Retinex - Scale !HISTORY_MSG_443;Output black point compensation -!HISTORY_MSG_444;WB-Temp bias -HISTORY_MSG_445;Raw子图像 -HISTORY_MSG_449;像素偏移-ISO适应 -HISTORY_MSG_452;像素偏移-显示动体 -HISTORY_MSG_453;像素偏移-仅显示动体蒙版 -HISTORY_MSG_457;像素偏移-检测红/蓝 -HISTORY_MSG_462;像素偏移-检测绿 -HISTORY_MSG_464;像素偏移-动体蒙版模糊 -HISTORY_MSG_465;像素偏移-模糊半径 -HISTORY_MSG_468;像素偏移-填洞 -HISTORY_MSG_469;像素偏移-中值 -HISTORY_MSG_471;像素偏移-动体补正 -HISTORY_MSG_472;像素偏移-顺滑过渡 -HISTORY_MSG_473;像素偏移-使用LMMSE -HISTORY_MSG_474;像素偏移-亮度均等 -HISTORY_MSG_475;像素偏移-均等各通道 -!HISTORY_MSG_476;CAM02-Temp out -!HISTORY_MSG_477;CAM02-Green out -!HISTORY_MSG_478;CAM02-Yb out -!HISTORY_MSG_479;CAM02-CAT02 adaptation out -!HISTORY_MSG_480;CAM02-Automatic CAT02 out -!HISTORY_MSG_481;CAM02-Temp scene -!HISTORY_MSG_482;CAM02-Green scene -!HISTORY_MSG_483;CAM02-Yb scene -!HISTORY_MSG_484;CAM02-Auto Yb scene -HISTORY_MSG_485;镜头矫正 -HISTORY_MSG_486;镜头矫正-相机 -HISTORY_MSG_487;镜头矫正-镜头 -HISTORY_MSG_488;动态范围压缩(DRC) -HISTORY_MSG_489;DRC-细节 -HISTORY_MSG_490;DRC-数量 -HISTORY_MSG_491;白平衡 -HISTORY_MSG_492;RGB曲线 -HISTORY_MSG_493;L*a*b*调整 -HISTORY_MSG_494;捕图加锐 -!HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors -!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT-Color correction -!HISTORY_MSG_COLORTONING_LABREGION_AB;CT-Color correction -!HISTORY_MSG_COLORTONING_LABREGION_CHANNEL;CT-Channel -!HISTORY_MSG_COLORTONING_LABREGION_CHROMATICITYMASK;CT-region C mask -!HISTORY_MSG_COLORTONING_LABREGION_HUEMASK;CT-H mask -!HISTORY_MSG_COLORTONING_LABREGION_LIGHTNESS;CT-Lightness -!HISTORY_MSG_COLORTONING_LABREGION_LIGHTNESSMASK;CT-L mask -!HISTORY_MSG_COLORTONING_LABREGION_LIST;CT-List -!HISTORY_MSG_COLORTONING_LABREGION_MASKBLUR;CT-region mask blur -!HISTORY_MSG_COLORTONING_LABREGION_OFFSET;CT-region offset -!HISTORY_MSG_COLORTONING_LABREGION_POWER;CT-region power -!HISTORY_MSG_COLORTONING_LABREGION_SATURATION;CT-Saturation -!HISTORY_MSG_COLORTONING_LABREGION_SHOWMASK;CT-region show mask -!HISTORY_MSG_COLORTONING_LABREGION_SLOPE;CT-region slope -HISTORY_MSG_DEHAZE_DEPTH;去雾-纵深值 -HISTORY_MSG_DEHAZE_ENABLED;去雾 -HISTORY_MSG_DEHAZE_LUMINANCE;去雾-仅亮度 -HISTORY_MSG_DEHAZE_SHOW_DEPTH_MAP;去雾-显示纵深蒙版 -HISTORY_MSG_DEHAZE_STRENGTH;去雾-力度 -HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST;双重去马赛克-自动阈值 -HISTORY_MSG_DUALDEMOSAIC_CONTRAST;双重去马赛克-对比度阈值 -HISTORY_MSG_FILMNEGATIVE_ENABLED;胶片负片 +!HISTORY_MSG_444;WB - Temp bias +!HISTORY_MSG_446;EvPixelShiftMotion +!HISTORY_MSG_447;EvPixelShiftMotionCorrection +!HISTORY_MSG_448;EvPixelShiftStddevFactorGreen +!HISTORY_MSG_450;EvPixelShiftNreadIso +!HISTORY_MSG_451;EvPixelShiftPrnu +!HISTORY_MSG_454;EvPixelShiftAutomatic +!HISTORY_MSG_455;EvPixelShiftNonGreenHorizontal +!HISTORY_MSG_456;EvPixelShiftNonGreenVertical +!HISTORY_MSG_458;EvPixelShiftStddevFactorRed +!HISTORY_MSG_459;EvPixelShiftStddevFactorBlue +!HISTORY_MSG_460;EvPixelShiftGreenAmaze +!HISTORY_MSG_461;EvPixelShiftNonGreenAmaze +!HISTORY_MSG_463;EvPixelShiftRedBlueWeight +!HISTORY_MSG_466;EvPixelShiftSum +!HISTORY_MSG_467;EvPixelShiftExp0 +!HISTORY_MSG_470;EvPixelShiftMedian3 +!HISTORY_MSG_476;CAM02/16 - Temp out +!HISTORY_MSG_477;CAM02/16 - Green out +!HISTORY_MSG_478;CAM02/16 - Yb out +!HISTORY_MSG_479;CAM02/16 - CAT02/16 adaptation out +!HISTORY_MSG_480;CAM02/16 - Automatic CAT02/16 out +!HISTORY_MSG_481;CAM02/16 - Temp scene +!HISTORY_MSG_482;CAM02/16 - Green scene +!HISTORY_MSG_483;CAM02/16 - Yb scene +!HISTORY_MSG_484;CAM02/16 - Auto Yb scene +!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_580;Local - Denoise +!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_664;Local - cbdl Blur +!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 - Contrast Threshold +!HISTORY_MSG_843;Local - Radius +!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_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;Local - Tool complexity mode +!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_BLSHAPE;Blur by level +!HISTORY_MSG_BLURCWAV;Blur chroma +!HISTORY_MSG_BLURWAV;Blur luminance +!HISTORY_MSG_BLUWAV;Attenuation response +!HISTORY_MSG_CAT02PRESET;Cat02/16 automatic preset +!HISTORY_MSG_CATCAT;Cat02/16 mode +!HISTORY_MSG_CATCOMPLEX;Ciecam complexity +!HISTORY_MSG_CATMODEL;CAM Model +!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction +!HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction +!HISTORY_MSG_COLORTONING_LABREGION_CHANNEL;CT - Channel +!HISTORY_MSG_COLORTONING_LABREGION_CHROMATICITYMASK;CT - region C mask +!HISTORY_MSG_COLORTONING_LABREGION_HUEMASK;CT - H mask +!HISTORY_MSG_COLORTONING_LABREGION_LIGHTNESS;CT - Lightness +!HISTORY_MSG_COLORTONING_LABREGION_LIGHTNESSMASK;CT - L mask +!HISTORY_MSG_COLORTONING_LABREGION_LIST;CT - List +!HISTORY_MSG_COLORTONING_LABREGION_MASKBLUR;CT - region mask blur +!HISTORY_MSG_COLORTONING_LABREGION_OFFSET;CT - region offset +!HISTORY_MSG_COLORTONING_LABREGION_POWER;CT - region power +!HISTORY_MSG_COLORTONING_LABREGION_SATURATION;CT - Saturation +!HISTORY_MSG_COLORTONING_LABREGION_SHOWMASK;CT - region show mask +!HISTORY_MSG_COLORTONING_LABREGION_SLOPE;CT - region slope +!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_FILMNEGATIVE_VALUES;Film negative values -HISTORY_MSG_HISTMATCHING;自适应色调曲线 -!HISTORY_MSG_ICM_OUTPUT_PRIMARIES;Output-Primaries -!HISTORY_MSG_ICM_OUTPUT_TEMP;Output-ICC-v4 illuminant D -!HISTORY_MSG_ICM_OUTPUT_TYPE;Output-Type -!HISTORY_MSG_ICM_WORKING_GAMMA;Working-Gamma -!HISTORY_MSG_ICM_WORKING_SLOPE;Working-Slope -!HISTORY_MSG_ICM_WORKING_TRC_METHOD;Working-TRC method -HISTORY_MSG_LOCALCONTRAST_AMOUNT;局部反差-数量 -HISTORY_MSG_LOCALCONTRAST_DARKNESS;局部反差-黑处 -HISTORY_MSG_LOCALCONTRAST_ENABLED;局部反差 -HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;局部反差-亮处 -HISTORY_MSG_LOCALCONTRAST_RADIUS;局部反差-半径 -HISTORY_MSG_METADATA_MODE;元数据复制模式 -HISTORY_MSG_MICROCONTRAST_CONTRAST;微反差-反差阈值 -HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;捕图加锐-自动阈值 -HISTORY_MSG_PDSHARPEN_AUTO_RADIUS;捕图加锐-自动半径 -HISTORY_MSG_PDSHARPEN_CHECKITER;捕图加锐-自动限制迭代 -HISTORY_MSG_PDSHARPEN_CONTRAST;捕图加锐-反差阈值 -HISTORY_MSG_PDSHARPEN_ITERATIONS;捕图加锐-迭代 -HISTORY_MSG_PDSHARPEN_RADIUS;捕图加锐-半径 -HISTORY_MSG_PDSHARPEN_RADIUS_BOOST;捕图加锐-边缘半径值提升 -HISTORY_MSG_PIXELSHIFT_DEMOSAIC;像素偏移-动体部分去马赛克算法 -HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;线状噪点过滤方向 -HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF条纹过滤 -HISTORY_MSG_PRSHARPEN_CONTRAST;PRS-反差阈值 -HISTORY_MSG_RAWCACORR_AUTOIT;Raw色差矫正-迭代 -HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw色差矫正-避免色偏 -HISTORY_MSG_RAW_BORDER;Raw边界 -HISTORY_MSG_RESIZE_ALLOWUPSCALING;调整大小-允许升采样 -HISTORY_MSG_SHARPENING_BLUR;加锐-模糊半径 -HISTORY_MSG_SHARPENING_CONTRAST;加锐-反差阈值 -HISTORY_MSG_SH_COLORSPACE;阴影/高光-色彩空间 +!HISTORY_MSG_HLBL;Color propagation - blur +!HISTORY_MSG_ICM_OUTPUT_PRIMARIES;Output - Primaries +!HISTORY_MSG_ICM_OUTPUT_TEMP;Output - ICC-v4 illuminant D +!HISTORY_MSG_ICM_OUTPUT_TYPE;Output - Type +!HISTORY_MSG_ICM_WORKING_GAMMA;Working - Gamma +!HISTORY_MSG_ICM_WORKING_SLOPE;Working - Slope +!HISTORY_MSG_ICM_WORKING_TRC_METHOD;Working - TRC method +!HISTORY_MSG_ILLUM;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_PREPROCWB_MODE;Preprocess WB Mode +!HISTORY_MSG_PROTAB;Protection +!HISTORY_MSG_RANGEAB;Range ab +!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_SOFTLIGHT_ENABLED;Soft light -!HISTORY_MSG_SOFTLIGHT_STRENGTH;Soft light-Strength -HISTORY_MSG_TM_FATTAL_ANCHOR;DRC-锚点 -!HISTORY_MSG_TRANS_Method;Geometry-Method -ICCPROFCREATOR_COPYRIGHT;版权: +!HISTORY_MSG_SOFTLIGHT_STRENGTH;Soft light - Strength +!HISTORY_MSG_TEMPOUT;CAM02 automatic temperature +!HISTORY_MSG_THRESWAV;Balance threshold +!HISTORY_MSG_TRANS_Method;Geometry - Method +!HISTORY_MSG_WAVBALCHROM;Equalizer chrominance +!HISTORY_MSG_WAVBALLUM;Equalizer luminance +!HISTORY_MSG_WAVBL;Blur levels +!HISTORY_MSG_WAVCHROMCO;Chroma coarse +!HISTORY_MSG_WAVCHROMFI;Chroma fine +!HISTORY_MSG_WAVCLARI;Clarity +!HISTORY_MSG_WAVDENLH;Level 5 +!HISTORY_MSG_WAVDENMET;Local equalizer +!HISTORY_MSG_WAVDENOISE;Local contrast +!HISTORY_MSG_WAVDENOISEH;High levels Local contrast +!HISTORY_MSG_WAVDETEND;Details soft +!HISTORY_MSG_WAVEDGS;Edge stopping +!HISTORY_MSG_WAVGUIDH;Local contrast-Hue equalizer +!HISTORY_MSG_WAVHUE;Equalizer hue +!HISTORY_MSG_WAVLEVDEN;High level local contrast +!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_COPYRIGHT_RESET_TOOLTIP;Reset to the default copyright, granted to "RawTherapee, CC0" -ICCPROFCREATOR_CUSTOM;自定义 -ICCPROFCREATOR_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 @@ -1420,7 +2469,7 @@ ICCPROFCREATOR_DESCRIPTION;描述: !ICCPROFCREATOR_ILL_80;D80 !ICCPROFCREATOR_ILL_DEF;Default !ICCPROFCREATOR_ILL_INC;StdA 2856K -!ICCPROFCREATOR_ILL_TOOLTIP;You can only set the illuminant for ICC v4 profiles. +!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 @@ -1437,11 +2486,10 @@ ICCPROFCREATOR_DESCRIPTION;描述: !ICCPROFCREATOR_PRIM_REDX;Red X !ICCPROFCREATOR_PRIM_REDY;Red Y !ICCPROFCREATOR_PRIM_SRGB;sRGB -!ICCPROFCREATOR_PRIM_TOOLTIP;You can only set custom primaries for ICC v4 profiles. +!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;将ICC档案保存为... !ICCPROFCREATOR_SLOPE;Slope !ICCPROFCREATOR_TRC_PRESET;Tone response curve: !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. @@ -1473,112 +2521,43 @@ ICCPROFCREATOR_SAVEDIALOG_TITLE;将ICC档案保存为... !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;移除 !MAIN_MSG_IMAGEUNPROCESSED;This command requires all selected images to be queue-processed first. !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;高级 -MAIN_TAB_ADVANCED_TOOLTIP;快捷键:Alt-a !MAIN_TAB_FAVORITES;Favorites -MAIN_TAB_FAVORITES_TOOLTIP;快捷键: Alt-u -MAIN_TOOLTIP_BACKCOLOR0;预览图的背景色:基于主题调整\n快捷键:9 -MAIN_TOOLTIP_BACKCOLOR1;预览图的背景色:黑色\n快捷键:9 -MAIN_TOOLTIP_BACKCOLOR2;预览图的背景色:白色\n快捷键:9 -MAIN_TOOLTIP_BACKCOLOR3;预览图的背景色:中灰色\n快捷键:9 !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. -MAIN_TOOLTIP_PREVIEWB;预览蓝色通道\n快捷键:b -MAIN_TOOLTIP_PREVIEWFOCUSMASK;预览合焦蒙版\n快捷键:Shift-f\n\n在浅景深,噪点少,放大得大的图片中更加精准\n在噪点多的图像中,把图片缩放到10%-30%以提升检测精准度 -MAIN_TOOLTIP_PREVIEWG;预览绿色通道\n快捷键:g -MAIN_TOOLTIP_PREVIEWL;预览亮度\n快捷键:v\n\n0.299*R + 0.587*G + 0.114*B -MAIN_TOOLTIP_PREVIEWSHARPMASK;预览加锐反差蒙版\n快捷键:p -MONITOR_PROFILE_SYSTEM;系统默认 -!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;高级设置 -PARTIALPASTE_DEHAZE;去雾 -PARTIALPASTE_FILMNEGATIVE;胶片负片 -PARTIALPASTE_LOCALCONTRAST;局部反差 -!PARTIALPASTE_METADATA;Metadata mode -PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF条纹过滤器 -!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift -PARTIALPASTE_RAW_BORDER;Raw边界 +!PARTIALPASTE_LOCGROUP;Local +!PARTIALPASTE_PREPROCWB;Preprocess White Balance +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_SOFTLIGHT;Soft light -PARTIALPASTE_TM_FATTAL;动态范围压缩 -PREFERENCES_APPEARANCE;外观 -!PREFERENCES_APPEARANCE_COLORPICKERFONT;Color picker font -PREFERENCES_APPEARANCE_CROPMASKCOLOR;裁剪蒙版颜色 -PREFERENCES_APPEARANCE_MAINFONT;主字体 -PREFERENCES_APPEARANCE_PSEUDOHIDPI;伪-高DPI模式 -PREFERENCES_APPEARANCE_THEME;主题 -PREFERENCES_AUTOSAVE_TP_OPEN;在退出时保存工具的展开/折叠状态 -PREFERENCES_BEHADDALLHINT;将所有选项设为相加模式。\n批量调整栏的处理参数将在图片当前参数的基础上加减 -PREFERENCES_BEHSETALLHINT;将所有选项设为设定模式。\n批量调整栏的处理参数将是绝对值,数值会被显示 -PREFERENCES_CACHECLEAR;清空 -PREFERENCES_CACHECLEAR_ALL;清空所有缓存文件: -!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去马赛克 -PREFERENCES_CHUNKSIZE_RAW_CA;Raw色差矫正 -PREFERENCES_CHUNKSIZE_RAW_RCD;RCD去马赛克 !PREFERENCES_CHUNKSIZE_RAW_XT;Xtrans demosaic -PREFERENCES_CHUNKSIZE_RGB;RGB处理 -PREFERENCES_CROP;裁剪编辑 -PREFERENCES_CROP_AUTO_FIT;自动放大以适应裁剪 -PREFERENCES_CROP_GUIDES;在不编辑裁剪区域时,裁剪区域所显示的辅助方式 -PREFERENCES_CROP_GUIDES_FRAME;方框 -PREFERENCES_CROP_GUIDES_FULL;原来的辅助方式 -PREFERENCES_CROP_GUIDES_NONE;无 +!PREFERENCES_COMPLEXITYLOC;Default complexity for Local Adjustments +!PREFERENCES_COMPLEXITY_EXP;Advanced +!PREFERENCES_COMPLEXITY_NORM;Standard +!PREFERENCES_COMPLEXITY_SIMP;Basic +!PREFERENCES_CUSTPROFBUILD;Custom Processing Profile Builder !PREFERENCES_CUSTPROFBUILDHINT;Executable (or script) file called when a new initial processing profile should be generated for an image.\n\nThe path of the communication file (*.ini style, a.k.a. "Keyfile") is added as a command line parameter. It contains various parameters required for the scripts and image Exif to allow a rules-based processing profile generation.\n\nWARNING: You are responsible for using double quotes where necessary if you're using paths containing spaces. -PREFERENCES_DIRECTORIES;目录 -PREFERENCES_EDITORCMDLINE;自定义命令行 -PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;在文件浏览器中显示紧凑的工具栏 -!PREFERENCES_PERFORMANCE_MEASURE;Measure -!PREFERENCES_PERFORMANCE_MEASURE_HINT;Logs processing times in console -PREFERENCES_PERFORMANCE_THREADS;线程 -PREFERENCES_PERFORMANCE_THREADS_LABEL;用于降噪和小波层级的最大线程数(0=自动) -PREFERENCES_SAVE_TP_OPEN_NOW;保存工具的展开/折叠状态 -PREFERENCES_TAB_PERFORMANCE;性能 -PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;内嵌JPEG预览 -!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_CUSTPROFBUILDKEYFORMAT;Keys format +!PREFERENCES_CUSTPROFBUILDKEYFORMAT_NAME;Name +!PREFERENCES_CUSTPROFBUILDKEYFORMAT_TID;TagID +!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_SHOWTOOLTIP;Show Local Adjustments advice tooltips +!PREFERENCES_ZOOMONSCROLL;Zoom images by scrolling !PROFILEPANEL_COPYPPASTE;Parameters to copy !PROFILEPANEL_GLOBALPROFILES;Bundled profiles !PROFILEPANEL_LOADPPASTE;Parameters to load -!PROFILEPANEL_MODE_TIP;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_PASTEPPASTE;Parameters to paste !PROFILEPANEL_PDYNAMIC;Dynamic !PROFILEPANEL_PINTERNAL;Neutral !PROFILEPANEL_SAVEPPASTE;Parameters to save -PROGRESSBAR_DECODING;解码中... -PROGRESSBAR_GREENEQUIL;绿平衡... -PROGRESSBAR_HLREC;高光还原... -PROGRESSBAR_HOTDEADPIXELFILTER;热像素/坏点过滤器... -PROGRESSBAR_LINEDENOISE;线状噪点过滤器... -PROGRESSBAR_PROCESSING_PROFILESAVED;处理配置档案已保存 -PROGRESSBAR_RAWCACORR;Raw色差矫正... -PROGRESSBAR_SNAPSHOT_ADDED;快照已添加 !PROGRESSDLG_PROFILECHANGEDINBROWSER;Processing profile changed in browser -QINFO_FRAMECOUNT;%2帧 -QINFO_HDR;HDR / %2帧 -QINFO_PIXELSHIFT;像素偏移/ %2帧 -!QUEUE_AUTOSTART_TOOLTIP;Start processing automatically when a new job arrives. -QUEUE_LOCATION_TITLE;输出位置 -!QUEUE_STARTSTOP_TOOLTIP;Start or stop processing the images in the queue.\n\nShortcut: Ctrl+s -SAMPLEFORMAT_0;未知数据格式 -SAMPLEFORMAT_1;8-bit unsigned -SAMPLEFORMAT_2;16-bit unsigned !SAMPLEFORMAT_4;24-bit LogLuv !SAMPLEFORMAT_8;32-bit LogLuv -SAMPLEFORMAT_16;16-bit浮点数 -SAMPLEFORMAT_32;24-bit浮点数 -SAMPLEFORMAT_64;32-bit浮点数 -SAVEDLG_FILEFORMAT_FLOAT;浮点数 !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. @@ -1591,6 +2570,7 @@ SAVEDLG_FILEFORMAT_FLOAT;浮点数 !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_TOOLTIP;Linear: will produce a normal linear response.\nSpecial effects: will produce special effects by mixing channels non-linearly. !TP_BWMIX_CC_ENABLED;Adjust complementary color @@ -1602,85 +2582,107 @@ SAVEDLG_FILEFORMAT_FLOAT;浮点数 !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_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_MET_CHANMIX;通道混合器 -TP_BWMIX_MIXC;通道混合器 -TP_BWMIX_NEUTRAL;重置 !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_SET_HYPERPANCHRO;Hyper Panchromatic !TP_BWMIX_SET_NORMCONTAST;Normal Contrast !TP_BWMIX_SET_ORTHOCHRO;Orthochromatic -TP_BWMIX_SET_RGBABS;绝对RGB -TP_BWMIX_SET_RGBREL;相对RGB !TP_BWMIX_SET_ROYGCBPMABS;Absolute ROYGCBPM !TP_BWMIX_SET_ROYGCBPMREL;Relative ROYGCBPM -!TP_BWMIX_TCMODE_SATANDVALBLENDING;B&W Saturation and Value Blending -!TP_BWMIX_TCMODE_WEIGHTEDSTD;B&W Weighted Standard -!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;热像素/坏点过滤器 !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 CIECAM02 takes into account the white's luminosity and differs from L*a*b* and RGB brightness. +!TP_COLORAPP_BRIGHT_TOOLTIP;Brightness in CIECAM02/16 is the amount of perceived light emanating from a stimulus and 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;Cat02/16 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 CIECAM02 differs from L*a*b* and RGB colorfulness. +!TP_COLORAPP_CHROMA_M_TOOLTIP;Colorfulness in CIECAM02/16 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 CIECAM02 differs from L*a*b* and RGB saturation. -!TP_COLORAPP_CHROMA_TOOLTIP;Chroma in CIECAM02 differs from L*a*b* and RGB chroma. -!TP_COLORAPP_CIECAT_DEGREE;CAT02 adaptation +!TP_COLORAPP_CHROMA_S_TOOLTIP;Saturation in CIECAM02/16 corresponds to the color of a stimulus in relation to its own brightness, differs from L*a*b* and RGB saturation. +!TP_COLORAPP_CHROMA_TOOLTIP;Chroma in CIECAM02/16 corresponds to the color of a stimulus relative to the clarity of a stimulus that appears white under identical conditions, differs from L*a*b* and RGB chroma. +!TP_COLORAPP_CIECAT_DEGREE;CAT02/16 adaptation !TP_COLORAPP_CONTRAST;Contrast (J) !TP_COLORAPP_CONTRAST_Q;Contrast (Q) -!TP_COLORAPP_CONTRAST_Q_TOOLTIP;Differs from L*a*b* and RGB contrast. -!TP_COLORAPP_CONTRAST_TOOLTIP;Differs from L*a*b* and RGB contrast. +!TP_COLORAPP_CONTRAST_Q_TOOLTIP;Contrast (Q) in CIECAM02/16 is based on brightness, differs from L*a*b* and RGB contrast. +!TP_COLORAPP_CONTRAST_TOOLTIP;Contrast (J) in CIECAM02/16 is based on lightness, 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 CIECAM02.\nIf the "Show CIECAM02 output histograms in curves" checkbox is enabled, shows the histogram of J or Q after CIECAM02.\n\nJ and Q are not shown in the main histogram panel.\n\nFor final output refer to the main histogram panel. +!TP_COLORAPP_CURVEEDITOR1_TOOLTIP;Shows the histogram of L* (L*a*b*) before CIECAM02/16.\nIf the "CIECAM02/16 output histograms in curves" checkbox is enabled, shows the histogram of J or Q after CIECAM02/16.\n\nJ and Q are 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 second exposure 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 CIECAM02.\nIf the "Show CIECAM02 output histograms in curves" checkbox is enabled, shows the histogram of C, s or M after CIECAM02.\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;CIECAM02 output histograms in curves -!TP_COLORAPP_DATACIE_TOOLTIP;When enabled, histograms in CIECAM02 curves show approximate values/ranges for J or Q, and C, s or M after the CIECAM02 adjustments.\nThis selection does not impact the main histogram panel.\n\nWhen disabled, histograms in CIECAM02 curves show L*a*b* values before CIECAM02 adjustments. -!TP_COLORAPP_FREE;Free temp+green + CAT02 + [output] +!TP_COLORAPP_CURVEEDITOR3_TOOLTIP;Adjust either chroma, saturation or colorfulness.\n\nShows the histogram of chromaticity (L*a*b*) before CIECAM02/16.\nIf the "CIECAM02/16 output histograms in curves" checkbox is enabled, shows the histogram of C, S or M after CIECAM02/16.\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;CIECAM02/16 output histograms in curves +!TP_COLORAPP_DATACIE_TOOLTIP;When enabled, histograms in CIECAM02/16 curves show approximate values/ranges for J or Q, and C, s or M after the CIECAM02/16 adjustments.\nThis selection does not impact the main histogram panel.\n\nWhen disabled, histograms in CIECAM02/16 curves show L*a*b* values before CIECAM02/16 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;Gamut control (L*a*b*) !TP_COLORAPP_GAMUT_TOOLTIP;Allow gamut control in L*a*b* mode. +!TP_COLORAPP_GEN;Settings - Preset +!TP_COLORAPP_GEN_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, e.g., against different backgrounds.\nIt takes into account the environment of each color and modifies its appearance to get as close as possible to human perception.\nIt 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)-angle between 0° and 360°. -!TP_COLORAPP_LABEL;CIE Color Appearance Model 2002 +!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 (CIECAM02/16) !TP_COLORAPP_LABEL_SCENE;Scene Conditions !TP_COLORAPP_LABEL_VIEWING;Viewing Conditions !TP_COLORAPP_MEANLUMINANCE;Mean luminance (Yb%) +!TP_COLORAPP_MOD02;CIECAM02 +!TP_COLORAPP_MOD16;CIECAM16 !TP_COLORAPP_MODEL;WP Model -!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [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+green + CAT02 + [output]: temp and green are selected by the user, the output device's white balance is set in Viewing Conditions. +!TP_COLORAPP_MODELCAT;CAM Model +!TP_COLORAPP_MODELCAT_TOOLTIP;Allows you to choose between CIECAM02 or CIECAM16.\n CIECAM02 will sometimes be more accurate.\n CIECAM16 should generate fewer artifacts +!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02/16 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_TIP;Reset all sliders checkbox and curves to their default values +!TP_COLORAPP_PRESETCAT02;Preset cat02/16 automatic - Symmetric mode +!TP_COLORAPP_PRESETCAT02_TIP;Set combobox, sliders, temp, green so that Cat02/16 automatic is preset.\nYou can change illuminant shooting conditions.\nYou must change Cat02/16 adaptation Viewing conditions if needed.\nYou can change Temperature and Tint Viewing conditions if needed, and other settings if needed.\nAll auto checkbox are disabled !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. !TP_COLORAPP_SURROUND;Surround +!TP_COLORAPP_SURROUNDSRC;Surround - Scene Lighting !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.\n\nAverage: Average light environment (standard). The image will not change.\n\nDim: Dim environment (TV). The image will become slightly dark.\n\nDark: Dark environment (projector). The image will become more dark.\n\nExtremly Dark: Extremly dark environment (cutsheet). The image will become very dark. +!TP_COLORAPP_SURSOURCE_TOOLTIP;Changes tones and colors to take into account the Scene conditions.\n\nAverage: Average light environment (standard). The image will not change.\n\nDim: Dim environment. The image will become slightly bright.\n\nDark: Dark environment. The image will become more bright.\n\nExtremly Dark: Extremly dark environment. The image will become very bright. !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_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD50 temp=5003\nD55 temp=5503\nD65 temp=6504\nD75 temp=7504 -!TP_COLORAPP_TONECIE;Tone mapping using CIECAM02 +!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;Disable to change temperature and tint +!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;Tone mapping using CIECAM02/16 !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, ...), 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] + [output] +!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. A gray at 18% corresponds to a background luminance expressed in CIE L of 50%.\nThis data must take into account the average luminance of the image +!TP_COLORAPP_YBSCEN_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. A gray at 18% corresponds to a background luminance expressed in CIE L of 50%.\nThis data is calculated from the average luminance of the image !TP_COLORTONING_AB;o C/L !TP_COLORTONING_AUTOSAT;Automatic !TP_COLORTONING_BALANCE;Balance @@ -1722,8 +2724,8 @@ TP_COLORAPP_BADPIXSL;热像素/坏点过滤器 !TP_COLORTONING_NEUTRAL;Reset sliders !TP_COLORTONING_NEUTRAL_TIP;Reset all values (Shadows, Midtones, Highlights) to default. !TP_COLORTONING_OPACITY;Opacity -!TP_COLORTONING_RGBCURVES;RGB-Curves -!TP_COLORTONING_RGBSLIDERS;RGB-Sliders +!TP_COLORTONING_RGBCURVES;RGB - Curves +!TP_COLORTONING_RGBSLIDERS;RGB - Sliders !TP_COLORTONING_SA;Saturation Protection !TP_COLORTONING_SATURATEDOPACITY;Strength !TP_COLORTONING_SATURATIONTHRESHOLD;Threshold @@ -1736,69 +2738,24 @@ TP_COLORAPP_BADPIXSL;热像素/坏点过滤器 !TP_COLORTONING_TWO2;Special chroma '2 colors' !TP_COLORTONING_TWOALL;Special chroma !TP_COLORTONING_TWOBY;Special a* and b* -!TP_COLORTONING_TWOCOLOR_TOOLTIP;Standard chroma:\nLinear response, a* = b*.\n\nSpecial chroma:\nLinear response, a* = b*, but unbound-try under the diagonal.\n\nSpecial a* and b*:\nLinear response unbound with separate curves for a* and b*. Intended for special effects.\n\nSpecial chroma 2 colors:\nMore predictable. +!TP_COLORTONING_TWOCOLOR_TOOLTIP;Standard chroma:\nLinear response, a* = b*.\n\nSpecial chroma:\nLinear response, a* = b*, but unbound - try under the diagonal.\n\nSpecial a* and b*:\nLinear response unbound with separate curves for a* and b*. Intended for special effects.\n\nSpecial chroma 2 colors:\nMore predictable. !TP_COLORTONING_TWOSTD;Standard chroma !TP_CROP_PPI;PPI -TP_CROP_RESETCROP;重置 -TP_CROP_SELECTCROP;选择区域 -TP_DEFRINGE_THRESHOLD;阈值 -TP_DEHAZE_DEPTH;纵深 -TP_DEHAZE_LABEL;去雾 -TP_DEHAZE_LUMINANCE;仅亮度 -TP_DEHAZE_SHOW_DEPTH_MAP;显示纵深蒙版 -TP_DEHAZE_STRENGTH;力度 +!TP_DEHAZE_SATURATION;Saturation !TP_DIRPYRDENOISE_CHROMINANCE_AMZ;Auto multi-zones -TP_DIRPYRDENOISE_CHROMINANCE_AUTOGLOBAL;全局自动 -TP_DIRPYRDENOISE_CHROMINANCE_BLUEYELLOW;色度—蓝-黄 -TP_DIRPYRDENOISE_CHROMINANCE_CURVE;色度曲线 !TP_DIRPYRDENOISE_CHROMINANCE_CURVE_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. -TP_DIRPYRDENOISE_CHROMINANCE_FRAME;色度噪点 -TP_DIRPYRDENOISE_CHROMINANCE_MANUAL;手动 -!TP_DIRPYRDENOISE_CHROMINANCE_MASTER;Chrominance-Master -TP_DIRPYRDENOISE_CHROMINANCE_METHOD;方法 !TP_DIRPYRDENOISE_CHROMINANCE_METHODADVANCED_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\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_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_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_CHROMINANCE_PREVIEW;Preview !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_CHROMINANCE_PREVIEW_INFO;Preview size=%1, Center: Px=%2 Py=%3 -TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO;当前预览处噪点:中位数=%1 最大=%2 -TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO_EMPTY;当前预览处噪点:中位数= - 最大= - !TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_TILEINFO;Tile size=%1, Center: Tx=%2 Ty=%3 -TP_DIRPYRDENOISE_CHROMINANCE_REDGREEN;色度—红-绿 -TP_DIRPYRDENOISE_LABEL;降噪 -TP_DIRPYRDENOISE_LUMINANCE_CONTROL;亮度控制 -TP_DIRPYRDENOISE_LUMINANCE_CURVE;亮度曲线 -TP_DIRPYRDENOISE_LUMINANCE_FRAME;亮度噪点 -TP_DIRPYRDENOISE_MAIN_COLORSPACE;色彩空间 !TP_DIRPYRDENOISE_MAIN_COLORSPACE_LAB;L*a*b* -TP_DIRPYRDENOISE_MAIN_COLORSPACE_TOOLTIP;对于Raw文件,RGB和L*a*b*均可用\n\n非Raw文件只可用L*a*b*空间,不论用户选择了哪个 !TP_DIRPYRDENOISE_MAIN_GAMMA;Gamma !TP_DIRPYRDENOISE_MAIN_GAMMA_TOOLTIP;Gamma varies noise reduction strength across the range of tones. Smaller values will target shadows, while larger values will stretch the effect to the brighter tones. -TP_DIRPYRDENOISE_MAIN_MODE;模式 -TP_DIRPYRDENOISE_MAIN_MODE_AGGRESSIVE;激进 -TP_DIRPYRDENOISE_MAIN_MODE_CONSERVATIVE;保守 -TP_DIRPYRDENOISE_MAIN_MODE_TOOLTIP;“保守”会保留低频的色度纹路,而“激进”会消除它们 -TP_DIRPYRDENOISE_MEDIAN_METHOD;中值法 -TP_DIRPYRDENOISE_MEDIAN_METHOD_CHROMINANCE;仅色度 -TP_DIRPYRDENOISE_MEDIAN_METHOD_LAB;L*a*b* -TP_DIRPYRDENOISE_MEDIAN_METHOD_LABEL;中值滤波器 -TP_DIRPYRDENOISE_MEDIAN_METHOD_LUMINANCE;仅亮度 -TP_DIRPYRDENOISE_MEDIAN_METHOD_RGB;RGB -TP_DIRPYRDENOISE_MEDIAN_METHOD_TOOLTIP;当使用“仅亮度”和“L*a*b*”法时,在降噪流水线中,\n中值滤波会在小波被应用后进行。\n当使用“RGB”模式时,它会在降噪流水线的最后被进行 -TP_DIRPYRDENOISE_MEDIAN_METHOD_WEIGHTED;权重L* (小) + a*b* (正常) -TP_DIRPYRDENOISE_MEDIAN_PASSES;中值迭代 -TP_DIRPYRDENOISE_MEDIAN_PASSES_TOOLTIP;使用3x3大小窗口并进行三次中值迭代通常比使用7x7窗口并进行一次迭代的效果更好 -TP_DIRPYRDENOISE_MEDIAN_TYPE;中值类型 -TP_DIRPYRDENOISE_MEDIAN_TYPE_TOOLTIP;使用你想要的窗口大小的中值滤波器。窗口大小越大,处理用时越长。\n3×3柔和:处理3x3窗口中的5个像素。\n3x3:处理3x3窗口里面的9个像素。\n5x5柔和:处理5x5窗口中的13个像素。\n5x5:处理5x5窗口中的25个像素。\n7x7:处理7x7窗口中的49个像素。\n9x9:处理9x9窗口中的81个像素。\n\n有时使用小窗口进行多次迭代的效果会优于使用大窗口进行一次迭代的效果 -TP_DIRPYRDENOISE_TYPE_3X3;3×3 -TP_DIRPYRDENOISE_TYPE_3X3SOFT;3×3柔和 -TP_DIRPYRDENOISE_TYPE_5X5;5×5 -TP_DIRPYRDENOISE_TYPE_5X5SOFT;5×5柔和 -TP_DIRPYRDENOISE_TYPE_7X7;7×7 -TP_DIRPYRDENOISE_TYPE_9X9;9×9 !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_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_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 skin-tones are protected while all other tones are affected. !TP_DIRPYREQUALIZER_TOOLTIP;Attempts to reduce artifacts in the transitions between skin colors (hue, chroma, luma) and the rest of the image. !TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera. @@ -1806,31 +2763,21 @@ TP_DIRPYRDENOISE_TYPE_9X9;9×9 !TP_EPD_GAMMA;Gamma !TP_EPD_REWEIGHTINGITERATES;Reweighting iterates !TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary. -!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors -!TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation. -TP_EXPOSURE_HISTMATCHING;自适应色调曲线 -TP_EXPOSURE_HISTMATCHING_TOOLTIP;自动调整滑条和曲线(不包括曝光补偿)以使图片贴近于内嵌于Raw的JPEG预览图 -TP_EXPOSURE_TCMODE_LUMINANCE;亮度 -TP_EXPOSURE_TCMODE_PERCEPTUAL;感知性 -!TP_EXPOS_BLACKPOINT_LABEL;Raw Black Points -!TP_EXPOS_WHITEPOINT_LABEL;Raw White Points !TP_FILMNEGATIVE_BLUE;Blue ratio -!TP_FILMNEGATIVE_GREEN;Reference exponent (contrast) -!TP_FILMNEGATIVE_GUESS_TOOLTIP;Automatically set the red and blue ratios by picking two patches which had a neutral hue (no color) in the original scene. The patches should differ in brightness. Set the white balance afterwards. -TP_FILMNEGATIVE_LABEL;胶片负片 -!TP_FILMNEGATIVE_PICK;Pick neutral spots +!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_GREEN;Reference exponent +!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_RED;Red ratio -TP_FILMSIMULATION_LABEL;胶片模拟 -TP_FILMSIMULATION_SLOWPARSEDIR;RawTherapee默认会寻找用于胶片模拟工具的Hald CLUT图像,图像所在的文件夹加载时间比较长。\n前往参数设置-图片处理-Hald CLUT路径\n以寻找被使用的文件夹是哪个。你应该把这个文件夹指向一个只有Hald CLUT图像而没有其他图片的文件夹,而如果你不想用胶片模拟功能,就把它指向一个空文件夹。\n\n阅读RawPedia的Film Simulation词条以获取更多信息。\n\n你现在想取消扫描吗? -TP_FILMSIMULATION_STRENGTH;力度 -TP_FILMSIMULATION_ZEROCLUTSFOUND;在参数设置中设定HaldCLUT目录 -TP_FLATFIELD_CLIPCONTROL;溢出控制 -TP_FLATFIELD_CLIPCONTROL_TOOLTIP;溢出控制能够避免由于平场的应用而导致的高光溢出。如果在应用平场之前就有溢出的高光,数值就会为0 -TP_GENERAL_11SCALE_TOOLTIP;此工具的效果仅在以1:1大小预览时才可见/准确 -TP_GRADIENT_CENTER_X_TOOLTIP;将渐变滤镜向左(负值)或向右(正值)移动 -TP_GRADIENT_CENTER_Y_TOOLTIP;将渐变滤镜向上(负值)或向下(正值)移动 -TP_GRADIENT_STRENGTH_TOOLTIP;滤镜的强度(档数) -!TP_HLREC_ENA_TOOLTIP;Could be activated by Auto Levels. +!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_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 @@ -1841,10 +2788,8 @@ TP_GRADIENT_STRENGTH_TOOLTIP;滤镜的强度(档数) !TP_ICM_DCPILLUMINANT;Illuminant !TP_ICM_DCPILLUMINANT_INTERPOLATED;Interpolated !TP_ICM_DCPILLUMINANT_TOOLTIP;Select which embedded DCP illuminant to employ. Default is "interpolated" which is a mix between the two based on white balance. The setting is only available if a dual-illuminant DCP with interpolation support is selected. -!TP_ICM_INPUTCAMERAICC;Auto-matched camera profile !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. -!TP_ICM_INPUTNONE_TOOLTIP;Use no input color profile at all.\nUse only in special cases. !TP_ICM_PROFILEINTENT;Rendering Intent !TP_ICM_SAVEREFERENCE;Save Reference Image !TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance @@ -1857,7 +2802,6 @@ TP_GRADIENT_STRENGTH_TOOLTIP;滤镜的强度(档数) !TP_ICM_WORKING_TRC_NONE;None !TP_ICM_WORKING_TRC_SLOPE;Slope !TP_ICM_WORKING_TRC_TOOLTIP;Only for built-in profiles. -TP_LABCURVE_CHROMA_TOOLTIP;若要应用黑白色调,将色度值降低为-100 !TP_LABCURVE_CURVEEDITOR_A_RANGE1;Green Saturated !TP_LABCURVE_CURVEEDITOR_A_RANGE2;Green Pastel !TP_LABCURVE_CURVEEDITOR_A_RANGE3;Red Pastel @@ -1871,164 +2815,54 @@ TP_LABCURVE_CHROMA_TOOLTIP;若要应用黑白色调,将色度值降低为-100 !TP_LABCURVE_CURVEEDITOR_CC_RANGE2;Dull !TP_LABCURVE_CURVEEDITOR_CC_RANGE3;Pastel !TP_LABCURVE_CURVEEDITOR_CC_RANGE4;Saturated -TP_LABCURVE_CURVEEDITOR_CC_TOOLTIP;根据色度(C)调整色度(C),C=f(C) -!TP_LABCURVE_CURVEEDITOR_CH;CH -TP_LABCURVE_CURVEEDITOR_CH_TOOLTIP;根据色相(H)调整色度(C),C=f(H) -!TP_LABCURVE_CURVEEDITOR_CL;CL -TP_LABCURVE_CURVEEDITOR_CL_TOOLTIP;根据亮度(L)调整色度(C),C=f(L) -!TP_LABCURVE_CURVEEDITOR_HH;HH -TP_LABCURVE_CURVEEDITOR_HH_TOOLTIP;根据色相(H)调整色相(H),H=f(H) -!TP_LABCURVE_CURVEEDITOR_LC;LC -TP_LABCURVE_CURVEEDITOR_LC_TOOLTIP;根据色度(C)调整亮度(L),L=f(C) -!TP_LABCURVE_CURVEEDITOR_LH;LH -TP_LABCURVE_CURVEEDITOR_LH_TOOLTIP;根据色相(H)调整亮度(L),L=f(H) -TP_LABCURVE_CURVEEDITOR_LL_TOOLTIP;根据亮度(L)调整亮度(L),L=f(L) -TP_LABCURVE_LCREDSK;将LC曲线的效果限定于红色和肤色 -TP_LABCURVE_LCREDSK_TIP;勾选该选项框,LC曲线就只会影响红色和肤色。\n取消勾选,它的效果就会应用到所有色彩上。 -TP_LABCURVE_RSTPROTECTION;红色与肤色保护 -TP_LABCURVE_RSTPRO_TOOLTIP;作用在色度滑条和CC曲线的调整上。 -TP_LENSGEOM_LIN;线性 -TP_LENSGEOM_LOG;对数 -TP_LENSPROFILE_CORRECTION_AUTOMATCH;自动选择 -TP_LENSPROFILE_CORRECTION_LCPFILE;LCP文件 -TP_LENSPROFILE_CORRECTION_MANUAL;手动选择 -TP_LENSPROFILE_LENS_WARNING;警告:制作镜头档案时相机所用的裁切系数比本图片拍摄时\n所使用的裁剪系数更大。矫正结果可能出现错误。 -TP_LENSPROFILE_MODE_HEADER;镜头档案 -TP_LENSPROFILE_USE_CA;色差 -TP_LENSPROFILE_USE_GEOMETRIC;几何畸变 -TP_LENSPROFILE_USE_HEADER;矫正 -TP_LENSPROFILE_USE_VIGNETTING;暗角 -TP_LOCALCONTRAST_AMOUNT;数量 -TP_LOCALCONTRAST_DARKNESS;黑处等级 -TP_LOCALCONTRAST_LABEL;局部反差 -TP_LOCALCONTRAST_LIGHTNESS;亮处等级 -TP_LOCALCONTRAST_RADIUS;半径 -TP_METADATA_EDIT;应用修改 -TP_METADATA_MODE;元数据复制模式 -TP_METADATA_STRIP;移除所有元数据 !TP_METADATA_TUNNEL;Copy unchanged -TP_NEUTRAL;重置 -!TP_NEUTRAL_TIP;将各个曝光控制滑条的值还原。\n自动色阶所能调整的滑条都会被此还原,不论你是否使用了自动色阶功能 -TP_PCVIGNETTE_FEATHER_TOOLTIP;羽化:\n0 = 仅边角,\n50 = 到达一半的位置,\n100 = 到达中心 -TP_PCVIGNETTE_ROUNDNESS_TOOLTIP;圆度:\n0 = 矩形,\n50 = 适于图像的椭圆\n100 = 圆形 -TP_PDSHARPENING_LABEL;捕图加锐 -TP_PFCURVE_CURVEEDITOR_CH;色相 -TP_PFCURVE_CURVEEDITOR_CH_TOOLTIP;控制去除某个色彩的色边的力度。\n越向上 = 越强,\n越向下 = 越弱 -TP_PREPROCESS_DEADPIXFILT;坏点过滤器 -TP_PREPROCESS_DEADPIXFILT_TOOLTIP;尝试过滤坏点 -TP_PREPROCESS_GREENEQUIL;绿平衡 -TP_PREPROCESS_HOTPIXFILT;热像素过滤器 -TP_PREPROCESS_HOTPIXFILT_TOOLTIP;尝试过滤热像素 -TP_PREPROCESS_LINEDENOISE_DIRECTION;方向 -TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;双向 -TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;横向 -TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;横向,只在PDAF点所在的行上 -TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;纵向 -TP_PREPROCESS_PDAFLINESFILTER;PDAF条纹过滤器 -TP_PRSHARPENING_LABEL;调整大小后加锐 -TP_PRSHARPENING_TOOLTIP;在调整图片大小后加锐图像。仅在选择"Lanczos"算法时可用。\n本工具的效果无法预览。见RawPedia的文章以了解本工具的使用教程 -TP_RAWCACORR_AUTOIT;迭代 -TP_RAWCACORR_AUTOIT_TOOLTIP;若“自动矫正”被勾选,此设置便可用。\n自动矫正是保守的,也就是说它经常不会去除所有色差。\n要移除全部色差,你可以使用至多迭代五次的色差矫正迭代。\n每次迭代会纠正上个迭代未能修正的色差,代价是需要花费额外的处理时间 -TP_RAWCACORR_AVOIDCOLORSHIFT;避免偏色 -TP_RAWCACORR_LABEL;色差矫正 -!TP_RAWEXPOS_BLACK_0;Green 1 (lead) -!TP_RAWEXPOS_BLACK_1;Red -!TP_RAWEXPOS_BLACK_2;Blue -!TP_RAWEXPOS_BLACK_3;Green 2 -!TP_RAWEXPOS_BLACK_BLUE;Blue -!TP_RAWEXPOS_BLACK_GREEN;Green -!TP_RAWEXPOS_BLACK_RED;Red -!TP_RAWEXPOS_LINEAR;White-point correction -TP_RAWEXPOS_RGB;红,绿,蓝 +!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_CONTROL_LINES_TOOLTIP;Ctrl+drag: Draw new line\nRight-click: Delete line +!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_RAWEXPOS_TWOGREEN;Link greens !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) !TP_RAW_2PASS;1-pass+fast !TP_RAW_3PASSBEST;3-pass (Markesteijn) !TP_RAW_4PASS;3-pass+fast -TP_RAW_AHD;AHD -TP_RAW_AMAZE;AMaZE -TP_RAW_AMAZEVNG4;AMaZE+VNG4 -TP_RAW_BORDER;边界 -TP_RAW_DCB;DCB -TP_RAW_DCBENHANCE;DCB优化 -TP_RAW_DCBITERATIONS;DCB迭代数 -TP_RAW_DCBVNG4;DCB+VNG4 -TP_RAW_DMETHOD;方法 -TP_RAW_DMETHOD_PROGRESSBAR;%1 去马赛克中... -TP_RAW_DMETHOD_PROGRESSBAR_REFINE;去马赛克精细化... -TP_RAW_DMETHOD_TOOLTIP;注:IGV和LMMSE是专门用于配合降噪工具,在为高ISO图片降噪时不产生迷宫状噪点,色调分离或是褪色所用的。\n像素偏移是为宾得/索尼的像素偏移文件所用的。此算法将使用AMaZE算法来处理非像素偏移文件 -TP_RAW_DUALDEMOSAICAUTOCONTRAST;自动阈值 -TP_RAW_DUALDEMOSAICAUTOCONTRAST_TOOLTIP;如果勾选框被打勾(推荐如此做),RawTherapee会根据图片中的平缓区域自动计算一个最优值。\n如果图像中没有平缓的区域,或是图片噪点太多,该数值会被设为0\n若想手动调整此数值,首先要将勾选框取消勾选(合适的值取决于具体图像的情况) -TP_RAW_DUALDEMOSAICCONTRAST;反差阈值 -TP_RAW_EAHD;EAHD -TP_RAW_FALSECOLOR;伪色抑制步长 -TP_RAW_FAST;Fast -TP_RAW_HD;阈值 -TP_RAW_HD_TOOLTIP;更低的数值会使热像素/坏点的检测更加激进,但是“宁错杀,不放过”的激进程度可能会导致杂点的产生。在启用本功能后,如果你发现了新出现的杂点,就逐渐提高阈值,直至杂点消失 -TP_RAW_HPHD;HPHD -TP_RAW_IGV;IGV -TP_RAW_IMAGENUM;子图像 -TP_RAW_IMAGENUM_SN;SN模式 -TP_RAW_IMAGENUM_TOOLTIP;某些Raw文件包含多张子图像(宾得/索尼的像素偏移,宾得的3张合并HDR,佳能的双像素,富士的EXR)。\n\n当使用除像素偏移外的任意一个去马赛克算法时,本栏用来选择哪帧子图像被处理。\n\n当在像素偏移的Raw文件上使用像素偏移去马赛克算法时,所有子图像都会被应用,此时本栏用来选择哪帧子图像被用来处理动体 -TP_RAW_LABEL;去马赛克 -!TP_RAW_LMMSE;LMMSE -TP_RAW_LMMSEITERATIONS;LMMSE优化步长 -TP_RAW_LMMSE_TOOLTIP;添加gamma(步长1),中位数(步长2-4)和精细化(步长5-6)以减少杂点并提升信噪比 -TP_RAW_MONO;黑白 -TP_RAW_NONE;无(显示传感器阵列) -TP_RAW_PIXELSHIFT;像素偏移 -TP_RAW_PIXELSHIFTBLUR;动体蒙版模糊 -TP_RAW_PIXELSHIFTDMETHOD;动体区域的去马赛克算法 -TP_RAW_PIXELSHIFTEPERISO;敏感度 -TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;默认值0在原生ISO下应该具有不错的效果。\n更大的数值会增强动体检测的敏感度。\n以微小的步长调整此值,同时观察动体蒙版的变化。\n对于欠曝/高ISO的照片,应提高此值 -TP_RAW_PIXELSHIFTEQUALBRIGHT;将不同照片的亮度均等化 -TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;将各个通道分别均等化 -TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;启用:对RGB通道分别进行均等化。\n禁用:使用同一个均等化系数对所有通道进行均等化 -TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;以当前被选中的一帧图像为基准,均等化各帧图像的亮度。\n如果各帧中有过曝的区域,应选择最亮的一帧以避免过曝区域出现紫色,也可启用动体补正来解决该问题 -TP_RAW_PIXELSHIFTGREEN;检查绿色通道以检测动体 -TP_RAW_PIXELSHIFTHOLEFILL;填补动体蒙版的洞 -TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;填补动体蒙版中间所存在的洞 -TP_RAW_PIXELSHIFTMEDIAN;对动体区域使用中值 -TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;对于运动的部分,使用所有图片的中值,而不是用户选择的某一帧图片。\n移除在所有图片中位置都不同的物体。\n在移动慢(重叠)的物体上会产生动体效果 -TP_RAW_PIXELSHIFTMM_AUTO;自动 -TP_RAW_PIXELSHIFTMM_CUSTOM;自定义 -TP_RAW_PIXELSHIFTMM_OFF;关闭 -TP_RAW_PIXELSHIFTMOTIONMETHOD;动体补正 -TP_RAW_PIXELSHIFTNONGREENCROSS;检查红/蓝色通道以检测动体 -TP_RAW_PIXELSHIFTSHOWMOTION;显示动体蒙版 -TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;仅显示动体蒙版 -TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;显示没有照片的动体蒙版 -TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;在图像上用绿色蒙版显示动体区域 -TP_RAW_PIXELSHIFTSIGMA;模糊半径 -TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;默认半径值1.0一般对于原生ISO来说足够好。\n对于高ISO照片,提高此值,5.0是不错的起始点。\n在改变此值的同时关注动体蒙版 -TP_RAW_PIXELSHIFTSMOOTH;顺滑过渡 -TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;让存在动体的区域与没有动体之间的区域之间顺滑地过渡。\n将此值设置为0以禁用顺滑过渡\n将此值设置为1以使用AMaZE/LMMSE算法(这取决于你是否选择了“使用LMMSE”)所解出的你所选择的那一帧图像,如果你选择了“使用中值”,那么就会根据通过所有图像计算出的中值解出图像 -TP_RAW_RCD;RCD -TP_RAW_RCDVNG4;RCD+VNG4 -TP_RAW_SENSOR_BAYER_LABEL;拜耳阵列传感器 +!TP_RAW_AMAZEBILINEAR;AMaZE+Bilinear +!TP_RAW_DCBBILINEAR;DCB+Bilinear +!TP_RAW_RCDBILINEAR;RCD+Bilinear !TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.\n+fast gives less artifacts in flat areas !TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix -!TP_RAW_VNG4;VNG4 !TP_RAW_XTRANS;X-Trans !TP_RAW_XTRANSFAST;Fast X-Trans -TP_RESIZE_ALLOW_UPSCALING;允许升采样 -TP_RESIZE_APPLIESTO;应用到: -TP_RETINEX_CONTEDIT_HSL;HSL直方图 -TP_RETINEX_CONTEDIT_LAB;L*a*b*直方图 -TP_RETINEX_CONTEDIT_LH;色调 -TP_RETINEX_CONTEDIT_MAP;均衡器 !TP_RETINEX_CURVEEDITOR_CD;L=f(L) !TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. !TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) !TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. !TP_RETINEX_CURVEEDITOR_MAP;L=f(L) !TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts! -TP_RETINEX_EQUAL;均衡器 !TP_RETINEX_FREEGAMMA;Free gamma !TP_RETINEX_GAIN;Gain !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!TP_RETINEX_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. +!TP_RETINEX_GAINTRANSMISSION_TOOLTIP;Increase or reduce the transmission map to achieve the desired luminance. The x-axis is the transmission. The y-axis is the gain. !TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free !TP_RETINEX_GAMMA_HIGH;High @@ -2062,8 +2896,8 @@ TP_RETINEX_EQUAL;均衡器 !TP_RETINEX_MEDIAN;Transmission median filter !TP_RETINEX_METHOD;Method !TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light.\nUniform = Equalize action.\nHigh = Reinforce high light.\nHighlights = Remove magenta in highlights. -!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 -!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_MLABEL;Restored data Min=%1 Max=%2 +!TP_RETINEX_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_RETINEX_NEIGHBOR;Radius !TP_RETINEX_NEUTRAL;Reset !TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. @@ -2076,9 +2910,9 @@ TP_RETINEX_EQUAL;均衡器 !TP_RETINEX_STRENGTH;Strength !TP_RETINEX_THRESHOLD;Threshold !TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. -!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 -!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 -!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma.\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TLABEL;TM Datas Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL2;TM Effective Tm=%1 TM=%2 +!TP_RETINEX_TLABEL_TOOLTIP;ransmission 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_RETINEX_TRANF;Transmission !TP_RETINEX_TRANSMISSION;Transmission map !TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. @@ -2087,230 +2921,211 @@ TP_RETINEX_EQUAL;均衡器 !TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_RETINEX_VIEW;Process !TP_RETINEX_VIEW_MASK;Mask -!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard-Normal display.\nMask- Displays the mask.\nUnsharp mask-Displays the image with a high radius unsharp mask.\nTransmission-Auto/Fixed-Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible. +!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible. !TP_RETINEX_VIEW_NONE;Standard -!TP_RETINEX_VIEW_TRAN;Transmission-Auto -!TP_RETINEX_VIEW_TRAN2;Transmission-Fixed -TP_RETINEX_VIEW_UNSHARP;USM锐化 -TP_SHARPENING_BLUR;模糊半径 -TP_SHARPENING_CONTRAST;反差阈值 -TP_SHARPENING_ITERCHECK;自动限制迭代 -TP_SHARPENING_RADIUS_BOOST;边缘半径值提升 -TP_SHARPENMICRO_CONTRAST;反差阈值 -TP_SHARPENMICRO_LABEL;微反差 -TP_SHARPENMICRO_MATRIX;使用3×3阵列而非5×5阵列 -TP_SHARPENMICRO_UNIFORMITY;均匀度 +!TP_RETINEX_VIEW_TRAN;Transmission - Auto +!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed !TP_SOFTLIGHT_LABEL;Soft Light !TP_SOFTLIGHT_STRENGTH;Strength -TP_TM_FATTAL_AMOUNT;数量 -TP_TM_FATTAL_ANCHOR;锚点 -TP_TM_FATTAL_LABEL;动态范围压缩 -TP_TM_FATTAL_THRESHOLD;细节 -TP_VIBRANCE_AVOIDCOLORSHIFT;避免偏色 !TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH !TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Skin-tones !TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE1;Red/Purple !TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE2;Red !TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE3;Red/Yellow !TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE4;Yellow -TP_VIBRANCE_CURVEEDITOR_SKINTONES_TOOLTIP;根据色相(H)调整色相(H),H=f(H) !TP_VIBRANCE_LABEL;Vibrance -!TP_VIBRANCE_PASTELS;Pastel Tones +!TP_VIBRANCE_PASTELS;Pastel tones !TP_VIBRANCE_PASTSATTOG;Link pastel and saturated tones -TP_VIBRANCE_PROTECTSKINS;保护肤色 !TP_VIBRANCE_PSTHRESHOLD;Pastel/saturated tones threshold !TP_VIBRANCE_PSTHRESHOLD_SATTHRESH;Saturation threshold !TP_VIBRANCE_PSTHRESHOLD_TOOLTIP;The vertical axis represents pastel tones at the bottom and saturated tones at the top.\nThe horizontal axis represents the saturation range. !TP_VIBRANCE_PSTHRESHOLD_WEIGTHING;Pastel/saturated transition's weighting !TP_VIBRANCE_SATURATED;Saturated Tones -TP_WAVELET_1;第1级 -TP_WAVELET_2;第2级 -TP_WAVELET_3;第3级 -TP_WAVELET_4;第4级 -TP_WAVELET_5;第5级 -TP_WAVELET_6;第6级 -TP_WAVELET_7;第7级 -TP_WAVELET_8;第8级 -TP_WAVELET_9;第9级 -TP_WAVELET_APPLYTO;应用到 -TP_WAVELET_AVOID;避免偏色 -TP_WAVELET_B0;黑色 -TP_WAVELET_B1;灰色 -TP_WAVELET_B2;残差图 -TP_WAVELET_BACKGROUND;背景 -TP_WAVELET_BACUR;曲线 !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. !TP_WAVELET_BALCHRO;Chroma balance +!TP_WAVELET_BALCHROM;Denoise equalizer Blue-Yellow/Red-Green !TP_WAVELET_BALCHRO_TOOLTIP;If enabled, the 'Contrast balance' curve or slider also modifies chroma balance. -!TP_WAVELET_BANONE;None -TP_WAVELET_BASLI;滑条 +!TP_WAVELET_BALLUM;Denoise equalizer White-Black !TP_WAVELET_BATYPE;Contrast balance method -!TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted -TP_WAVELET_CCURVE;局部反差 -!TP_WAVELET_CH1;Whole chroma range -!TP_WAVELET_CH2;Saturated/pastel -TP_WAVELET_CH3;与反差等级挂钩 -TP_WAVELET_CHCU;曲线 -TP_WAVELET_CHR;色度-反差挂钩力度 -!TP_WAVELET_CHRO;Saturated/pastel threshold +!TP_WAVELET_BL;Blur levels +!TP_WAVELET_BLCURVE;Blur by levels +!TP_WAVELET_BLURFRAME;Blur +!TP_WAVELET_BLUWAV;Attenuation response +!TP_WAVELET_CBENAB;Toning and Color balance +!TP_WAVELET_CB_TOOLTIP;With high values you can create special effects, similar to those achieved with the Chroma Module, but focused on the residual image\nWith moderate values you can manually correct the white balance +!TP_WAVELET_CHROFRAME;Denoise chrominance +!TP_WAVELET_CHROMAFRAME;Chroma +!TP_WAVELET_CHROMCO;Chrominance Coarse +!TP_WAVELET_CHROMFI;Chrominance Fine !TP_WAVELET_CHRO_TOOLTIP;Sets the wavelet level which will be the threshold between saturated and pastel colors.\n1-x: saturated\nx-9: pastel\n\nIf the value exceeds the amount of wavelet levels you are using then it will be ignored. +!TP_WAVELET_CHRWAV;Blur chroma !TP_WAVELET_CHR_TOOLTIP;Adjusts chroma as a function of "contrast levels" and "chroma-contrast link strength" -TP_WAVELET_CHSL;滑条 -!TP_WAVELET_CHTYPE;Chrominance method -!TP_WAVELET_COLORT;Opacity Red-Green -TP_WAVELET_COMPCONT;反差 +!TP_WAVELET_CLA;Clarity +!TP_WAVELET_CLARI;Sharp-mask and Clarity +!TP_WAVELET_COLORT;Opacity red-green +!TP_WAVELET_COMPEXPERT;Advanced !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. +!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_COMPTM;Tone mapping !TP_WAVELET_CONTEDIT;'After' contrast curve -!TP_WAVELET_CONTR;Gamut -TP_WAVELET_CONTRA;反差 -TP_WAVELET_CONTRAST_MINUS;反差 - -TP_WAVELET_CONTRAST_PLUS;反差 + -TP_WAVELET_CONTRA_TOOLTIP;改变残差图的反差 -TP_WAVELET_CTYPE;色度控制 +!TP_WAVELET_CONTFRAME;Contrast - Compression +!TP_WAVELET_CONTRASTEDIT;Finer - Coarser levels +!TP_WAVELET_CURVEEDITOR_BL_TOOLTIP;Disabled if zoom > about 300% !TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) !TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L -!TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. +!TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast-luminance curve at the end of the wavelet processing. !TP_WAVELET_CURVEEDITOR_HH;HH -!TP_WAVELET_CURVEEDITOR_HH_TOOLTIP;Modifies the residual image's hue as a function of hue. -TP_WAVELET_DALL;所有方向 -TP_WAVELET_DAUB;边缘表现 -TP_WAVELET_DAUB2;D2-低 -TP_WAVELET_DAUB4;D4-标准 -TP_WAVELET_DAUB6;D6-标准增强 -TP_WAVELET_DAUB10;D10-中等 -TP_WAVELET_DAUB14;D14-高 -TP_WAVELET_DAUB_TOOLTIP;改变多贝西系数:\nD4 = 标准,\nD14 = 一般而言表现最好,但会增加10%的处理耗时。\n\n影响边缘检测以及较低层级的质量。但是质量不完全和这个系数有关,可能会随具体的图像和处理方式而变化 -TP_WAVELET_DONE;纵向 -TP_WAVELET_DTHR;斜向 -TP_WAVELET_DTWO;横向 -TP_WAVELET_EDCU;曲线 -TP_WAVELET_EDGCONT;局部反差 -!TP_WAVELET_EDGCONT_TOOLTIP;Adjusting the points to the left decreases contrast, and to the right increases it.\nBottom-left, top-left, top-right and bottom-right represent respectively local contrast for low values, mean, mean+stdev and maxima. -!TP_WAVELET_EDGE;Edge Sharpness +!TP_WAVELET_CURVEEDITOR_HH_TOOLTIP;Modifies the residual image hue as a function of hue. +!TP_WAVELET_DAUBLOCAL;Wavelet Edge performance +!TP_WAVELET_DEN5THR;Guided threshold +!TP_WAVELET_DEN12LOW;1 2 Low +!TP_WAVELET_DEN12PLUS;1 2 High +!TP_WAVELET_DEN14LOW;1 4 Low +!TP_WAVELET_DEN14PLUS;1 4 High +!TP_WAVELET_DENCONTRAST;Local contrast Equalizer +!TP_WAVELET_DENCURV;Curve +!TP_WAVELET_DENEQUAL;1 2 3 4 Equal +!TP_WAVELET_DENH;Threshold +!TP_WAVELET_DENL;Correction structure +!TP_WAVELET_DENLH;Guided threshold by detail levels 1-4 +!TP_WAVELET_DENLOCAL_TOOLTIP;Use a curve in order to guide the denoising according to the local contrast.\nThe areas are denoised, the structures are maintained +!TP_WAVELET_DENMIX_TOOLTIP;Balances the action of the guide taking into account the original image and the denoised image +!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_EDEFFECT_TOOLTIP;This slider selects the range of contrast values that will receive the full effect of any adjustment +!TP_WAVELET_EDGCONT_TOOLTIP;Adjusting the points to the left decreases contrast, and to the right increases it.\nBottom-left, top-left, top-right and bottom-right represent respectively local contrast for low values, mean, mean+std. dev. and maxima. !TP_WAVELET_EDGEAMPLI;Base amplification !TP_WAVELET_EDGEDETECT;Gradient sensitivity !TP_WAVELET_EDGEDETECTTHR;Threshold low (noise) -!TP_WAVELET_EDGEDETECTTHR2;Threshold high (detection) -!TP_WAVELET_EDGEDETECTTHR_TOOLTIP;This adjuster lets you target edge detection for example to avoid applying edge sharpness to fine details, such as noise in the sky. +!TP_WAVELET_EDGEDETECTTHR2;Edge enhancement +!TP_WAVELET_EDGEDETECTTHR_TOOLTIP;This slider sets a threshold below which finer details won't be considered as an edge !TP_WAVELET_EDGEDETECT_TOOLTIP;Moving the slider to the right increases edge sensitivity. This affects local contrast, edge settings and noise. !TP_WAVELET_EDGESENSI;Edge sensitivity !TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged. -!TP_WAVELET_EDGTHRESH;Detail -!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts. -!TP_WAVELET_EDRAD;Radius -!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect. -TP_WAVELET_EDSL;阈值滑条 +!TP_WAVELET_EDRAD_TOOLTIP;This adjustment controls the local enhancement. A value of zero still has an effect !TP_WAVELET_EDTYPE;Local contrast method -TP_WAVELET_EDVAL;力度 !TP_WAVELET_FINAL;Final Touchup -TP_WAVELET_FINEST;最精细 -!TP_WAVELET_HIGHLIGHT;Highlight luminance range -TP_WAVELET_HS1;全部亮度范围 -TP_WAVELET_HS2;阴影/高光 -!TP_WAVELET_HUESKIN;Skin hue +!TP_WAVELET_FINCFRAME;Final local contrast +!TP_WAVELET_FINCOAR_TOOLTIP;The left (positive) part of the curve acts on the finer levels (increase).\nThe 2 points on the abscissa represent the respective action limits of finer and coarser levels 5 and 6 (default).\nThe right (negative) part of the curve acts on the coarser levels (increase).\nAvoid moving the left part of the curve with negative values. Avoid moving the right part of the curve with positives values +!TP_WAVELET_FINTHR_TOOLTIP;Uses local contrast to reduce or increase the action of the guided filter +!TP_WAVELET_GUIDFRAME;Final smoothing (guided filter) +!TP_WAVELET_HIGHLIGHT;Finer levels luminance range !TP_WAVELET_HUESKIN_TOOLTIP;The bottom points set the beginning of the transition zone, and the upper points the end of it, where the effect is at its maximum.\n\nIf you need to move the area significantly, or if there are artifacts, then the white balance is incorrect. -!TP_WAVELET_HUESKY;Sky hue !TP_WAVELET_HUESKY_TOOLTIP;The bottom points set the beginning of the transition zone, and the upper points the end of it, where the effect is at its maximum.\n\nIf you need to move the area significantly, or if there are artifacts, then the white balance is incorrect. !TP_WAVELET_ITER;Delta balance levels !TP_WAVELET_ITER_TOOLTIP;Left: increase low levels and reduce high levels,\nRight: reduce low levels and increase high levels. -TP_WAVELET_LABEL;小波层级 -TP_WAVELET_LARGEST;最粗糙 -!TP_WAVELET_LEVCH;Chroma -TP_WAVELET_LEVDIR_ALL;所有方向的全部层级 -TP_WAVELET_LEVDIR_INF;小于等于此层级 -TP_WAVELET_LEVDIR_ONE;一个层级 -TP_WAVELET_LEVDIR_SUP;高于此层级 -TP_WAVELET_LEVELS;小波层级 -TP_WAVELET_LEVELS_TOOLTIP;选择将图像分解为几个层级的细节。更多的层级需要使用更多的内存和更长的处理时间 -TP_WAVELET_LEVF;反差 -!TP_WAVELET_LEVLABEL;当前预览中最高的可见层级 = %1 -TP_WAVELET_LEVONE;第2级 -TP_WAVELET_LEVTHRE;第4级 -TP_WAVELET_LEVTWO;第3级 -TP_WAVELET_LEVZERO;第1级 -!TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength +!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_LIPST;Enhanced algoritm -!TP_WAVELET_LOWLIGHT;Shadow luminance range -TP_WAVELET_MEDGREINF;第一层级 -TP_WAVELET_MEDI;减少蓝天中的杂点 +!TP_WAVELET_LOWLIGHT;Coarser levels luminance range +!TP_WAVELET_LOWTHR_TOOLTIP;Prevents amplification of fine textures and noise !TP_WAVELET_MEDILEV;Edge detection !TP_WAVELET_MEDILEV_TOOLTIP;When you enable Edge Detection, it is recommanded:\n- to disabled low contrast levels to avoid artifacts,\n- to use high values of gradient sensitivity.\n\nYou can modulate the strength with 'refine' from Denoise and Refine. -!TP_WAVELET_NEUTRAL;Neutral -TP_WAVELET_NOIS;去噪 -TP_WAVELET_NOISE;去噪和精细化 +!TP_WAVELET_MERGEC;Merge chroma +!TP_WAVELET_MERGEL;Merge luma +!TP_WAVELET_MIXCONTRAST;Reference local contrast +!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_NOISE_TOOLTIP;If level 4 luminance denoise superior to 50, mode Aggressive is used.\nIf chrominance coarse superior to 20, mode Aggressive is used. !TP_WAVELET_NPHIGH;High !TP_WAVELET_NPLOW;Low !TP_WAVELET_NPNONE;None !TP_WAVELET_NPTYPE;Neighboring pixels !TP_WAVELET_NPTYPE_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. -!TP_WAVELET_OPACITY;Opacity Blue-Yellow +!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_OPACITY;Opacity blue-yellow !TP_WAVELET_OPACITYW;Contrast balance d/v-h curve -!TP_WAVELET_OPACITYWL;Final local contrast +!TP_WAVELET_OPACITYWL;Local contrast !TP_WAVELET_OPACITYWL_TOOLTIP;Modify the final local contrast at the end of the wavelet treatment.\n\nThe left side represents the smallest local contrast, progressing to the largest local contrast on the right. !TP_WAVELET_PASTEL;Pastel chroma -TP_WAVELET_PROC;处理 -!TP_WAVELET_RE1;Reinforced -!TP_WAVELET_RE2;Unchanged -!TP_WAVELET_RE3;Reduced -!TP_WAVELET_RESCHRO;Chroma -!TP_WAVELET_RESCON;Shadows -!TP_WAVELET_RESCONH;Highlights -TP_WAVELET_RESID;残差图像 +!TP_WAVELET_PROTAB;Protection +!TP_WAVELET_QUAAGRES;Aggressive +!TP_WAVELET_QUACONSER;Conservative +!TP_WAVELET_QUANONE;Off +!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_SAT;Saturated chroma -TP_WAVELET_SETTINGS;小波设定 -!TP_WAVELET_SKIN;Skin targetting/protection +!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_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_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 skin-tones are protected while all other tones are affected. -!TP_WAVELET_SKY;Sky targetting/protection -!TP_WAVELET_SKY_TOOLTIP;At -100 sky-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 sky-tones are protected while all other tones are affected. -TP_WAVELET_STREN;力度 -TP_WAVELET_STRENGTH;力度 -TP_WAVELET_SUPE;额外级 -!TP_WAVELET_THR;Shadows threshold -!TP_WAVELET_THRESHOLD;Highlight levels -!TP_WAVELET_THRESHOLD2;Shadow levels -!TP_WAVELET_THRESHOLD2_TOOLTIP;Only levels between 9 and 9 minus the value will be affected by the shadow luminance range. Other levels will be fully treated. The highest level possible is limited by the highlight level value (9 minus highlight level value). -!TP_WAVELET_THRESHOLD_TOOLTIP;Only levels beyond the chosen value will be affected by the highlight luminance range. Other levels will be fully treated. The chosen value here limits the highest possible value of the shadow levels. -!TP_WAVELET_THRH;Highlights threshold -TP_WAVELET_TILESBIG;大切片 -TP_WAVELET_TILESFULL;整张图片 -TP_WAVELET_TILESIZE;切片缓存方法 -TP_WAVELET_TILESLIT;小切片 -TP_WAVELET_TILES_TOOLTIP;处理整张图片可以让图像质量更好,所以推荐使用该选项,切片缓存是给小内存用户的备用方法。阅读RawPedia的文章以了解具体的内存需求 +!TP_WAVELET_SKY;Hue targetting/protection +!TP_WAVELET_SKY_TOOLTIP;Allows you to target or protect a range of hues.\nAt -100 selected hues are targetted.\nAt 0 all hues are treated equally.\nAt +100 selected hues are protected while all other hues are targetted. +!TP_WAVELET_SOFTRAD;Soft radius +!TP_WAVELET_STREND;Strength +!TP_WAVELET_THRDEN_TOOLTIP;Generates a stepped curve in order to guide the denoising according to the local contrast.\nThe areas are denoised, the structures are maintained +!TP_WAVELET_THREND;Local contrast threshold +!TP_WAVELET_THRESHOLD;Finer levels +!TP_WAVELET_THRESHOLD2;Coarser levels +!TP_WAVELET_THRESHOLD2_TOOLTIP;Only levels from the chosen value to the selected number of ‘wavelet levels’ will be affected by the Shadow luminance range. +!TP_WAVELET_THRESHOLD_TOOLTIP;Only levels below and including the chosen value will be affected by the Highlight luminance range. +!TP_WAVELET_THRESWAV;Balance threshold +!TP_WAVELET_TMEDGS;Edge stopping +!TP_WAVELET_TMSCALE;Scale !TP_WAVELET_TMSTRENGTH;Compression strength -!TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. +!TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. !TP_WAVELET_TMTYPE;Compression method -!TP_WAVELET_TON;Toning +!TP_WAVELET_TONFRAME;Excluded colors +!TP_WAVELET_USH;None +!TP_WAVELET_USHARP;Clarity method +!TP_WAVELET_USHARP_TOOLTIP;Origin : the source file is the file before Wavelet.\nWavelet : the source file is the file including wavelet threatment +!TP_WAVELET_USH_TOOLTIP;If you select Sharp-mask, you can choose any level (in Settings) from 1 to 4 for processing.\nIf you select Clarity, you can choose any level (in Settings) between 5 and Extra. +!TP_WAVELET_WAVLOWTHR;Low contrast threshold +!TP_WAVELET_WAVOFFSET;Offset +!TP_WBALANCE_AUTOITCGREEN;Temperature correlation +!TP_WBALANCE_AUTOOLD;RGB grey +!TP_WBALANCE_AUTO_HEADER;Automatic !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_FLASH60;标准,佳能,宾得,奥林巴斯 -TP_WBALANCE_FLASH65;尼康,松下,索尼,美能达 -!TP_WBALANCE_FLUO1;F1-Daylight -!TP_WBALANCE_FLUO2;F2-Cool White -!TP_WBALANCE_FLUO3;F3-White -!TP_WBALANCE_FLUO4;F4-Warm White -!TP_WBALANCE_FLUO5;F5-Daylight -!TP_WBALANCE_FLUO6;F6-Lite White -!TP_WBALANCE_FLUO7;F7-D65 Daylight Simulator -!TP_WBALANCE_FLUO8;F8-D50 / Sylvania F40 Design -!TP_WBALANCE_FLUO9;F9-Cool White Deluxe -!TP_WBALANCE_FLUO10;F10-Philips TL85 -!TP_WBALANCE_FLUO11;F11-Philips TL84 -!TP_WBALANCE_FLUO12;F12-Philips TL83 -TP_WBALANCE_FLUO_HEADER;荧光灯 +!TP_WBALANCE_FLUO1;F1 - Daylight +!TP_WBALANCE_FLUO2;F2 - Cool White +!TP_WBALANCE_FLUO3;F3 - White +!TP_WBALANCE_FLUO4;F4 - Warm White +!TP_WBALANCE_FLUO5;F5 - Daylight +!TP_WBALANCE_FLUO6;F6 - Lite White +!TP_WBALANCE_FLUO7;F7 - D65 Daylight Simulator +!TP_WBALANCE_FLUO8;F8 - D50 / Sylvania F40 Design +!TP_WBALANCE_FLUO9;F9 - Cool White Deluxe +!TP_WBALANCE_FLUO10;F10 - Philips TL85 +!TP_WBALANCE_FLUO11;F11 - Philips TL84 +!TP_WBALANCE_FLUO12;F12 - Philips TL83 !TP_WBALANCE_GTI;GTI !TP_WBALANCE_HMI;HMI !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_PICKER;Pick !TP_WBALANCE_SOLUX47;Solux 4700K (vendor) !TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery) -TP_WBALANCE_TEMPBIAS;自动白平衡色温偏向 -TP_WBALANCE_TEMPBIAS_TOOLTIP;此功能允许你将色温向冷/暖偏移。\n以调整计算出的“自动白平衡”。这个偏向被表达为\n已计算出的色温的百分比,故最终的调整结果为“色温+色温*偏向” -TP_WBALANCE_TUNGSTEN;白炽灯 +!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. diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais index 4145002a3..bf39a9289 100644 --- a/rtdata/languages/Francais +++ b/rtdata/languages/Francais @@ -811,7 +811,7 @@ ICCPROFCREATOR_PROF_V2;ICC v2 ICCPROFCREATOR_PROF_V4;ICC v4 ICCPROFCREATOR_SAVEDIALOG_TITLE;Enregistrer le profil ICC sous... ICCPROFCREATOR_SLOPE;Pente -ICCPROFCREATOR_TRC_PRESET;Courbe de réponse tonale: +ICCPROFCREATOR_TRC_PRESET;Courbe de réponse tonale IPTCPANEL_CATEGORY;Catégorie IPTCPANEL_CATEGORYHINT;Identifie le sujet de l'image selon l'opinion du fournisseur. IPTCPANEL_CITY;Ville @@ -1300,8 +1300,8 @@ TP_BWMIX_AUTOCH;Auto TP_BWMIX_CC_ENABLED;Ajuster les couleurs complémentaires TP_BWMIX_CC_TOOLTIP;Activer pour permettre l'ajustage automatique des couleur complémentaire dans le mode ROJVCBPM TP_BWMIX_CHANNEL;Égaliseur de Luminance -TP_BWMIX_CURVEEDITOR1;Courbe 'avant' -TP_BWMIX_CURVEEDITOR2;Courbe 'après' +TP_BWMIX_CURVEEDITOR1;Courbe 'avant': +TP_BWMIX_CURVEEDITOR2;Courbe 'après': TP_BWMIX_CURVEEDITOR_AFTER_TOOLTIP;Courbe tonale, après la conversion en N&B, à la fin du traitement TP_BWMIX_CURVEEDITOR_BEFORE_TOOLTIP;Courbe tonale, juste avant la conversion en N&B\nPeut prendre en compte les composantes couleur TP_BWMIX_CURVEEDITOR_LH_TOOLTIP;Modifie la luminance en fonction de la teinte\nFaites attention aux valeurs extrêmes qui peuvent causer des artefacts @@ -1441,7 +1441,7 @@ TP_COLORTONING_AUTOSAT;Automatique TP_COLORTONING_BALANCE;Balance TP_COLORTONING_BY;o C/L TP_COLORTONING_CHROMAC;Opacité -TP_COLORTONING_COLOR;Couleur +TP_COLORTONING_COLOR;Couleur: TP_COLORTONING_CURVEEDITOR_CL_TOOLTIP;Opacité chroma en fonction de la luminance oC=f(L) TP_COLORTONING_HIGHLIGHT;Hautes lumières TP_COLORTONING_HUE;Teinte @@ -1523,11 +1523,11 @@ TP_DEHAZE_STRENGTH;Force TP_DIRPYRDENOISE_CHROMINANCE_AMZ;Multi-zones auto TP_DIRPYRDENOISE_CHROMINANCE_AUTOGLOBAL;Global automatique TP_DIRPYRDENOISE_CHROMINANCE_BLUEYELLOW;Chrominance - Bleu-Jaune -TP_DIRPYRDENOISE_CHROMINANCE_CURVE;Courbe de chrominance +TP_DIRPYRDENOISE_CHROMINANCE_CURVE;Courbe de chrominance: TP_DIRPYRDENOISE_CHROMINANCE_CURVE_TOOLTIP;Augmente (multiplie) la valeur de tous les curseurs de chrominance.\nCette courbe vous permet d'ajuster la force de la réduction de bruit chromatique en fonction de la chromaticité, par exemple pour augmenter l'action dans les zones faiblement saturées et pour la diminuer dans celles très saturées. TP_DIRPYRDENOISE_CHROMINANCE_FRAME;Chrominance TP_DIRPYRDENOISE_CHROMINANCE_MANUAL;Manuel -TP_DIRPYRDENOISE_CHROMINANCE_MASTER;Chrominance - Maître +TP_DIRPYRDENOISE_CHROMINANCE_MASTER;Chrominance-Maître TP_DIRPYRDENOISE_CHROMINANCE_METHOD;Méthode TP_DIRPYRDENOISE_CHROMINANCE_METHODADVANCED_TOOLTIP;Manuel\nAgit sur l'image entière.\nVous controlez les paramètres de réduction de bruit manuellement.\n\nGlobal automatique\nAgit sur l'image entière.\n9 zones sont utilisées pour calculer un réglage de réduction de bruit de chroma.\n\nAperçu\nAgit sur l'image entière.\nLa partie visible de l'image dans l'aperçu est utilisé pour calculer un réglage de réduction de bruit de chroma. TP_DIRPYRDENOISE_CHROMINANCE_METHOD_TOOLTIP;Manuel\nAgit sur l'image entière.\nVous controlez les paramètres de réduction de bruit manuellement.\n\nGlobal automatique\nAgit sur l'image entière.\n9 zones sont utilisées pour calculer un réglage de réduction de bruit de chroma.\n\nAutomatique multi-zones\nPas d'aperçu - ne fonctionne que lors de l'enregistrement, mais utiliser la méthode "Aperçu" en faisant correspondre la taille et le centre de la tuile à la taille et au centre de l'aperçu, vous permet d'avoir une idée des résultats attendus.\nL'image est divisé en tuiles (entre 10 et 70 en fonction de la taille de l'image) et chaque tuile reçoit son propre réglage de réduction de bruit de chrominance.\n\nAperçu\nAgit sur l'image entière.\nLa partie de l'image visible dans l'aperçu est utilisé pour calculer un réglage de réduction de bruit de chroma. @@ -1541,7 +1541,7 @@ TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_TILEINFO;Taille des tuiles =%1, Centre: Tx= TP_DIRPYRDENOISE_CHROMINANCE_REDGREEN;Chrominance - Rouge-Vert TP_DIRPYRDENOISE_LABEL;Réduction de Bruit TP_DIRPYRDENOISE_LUMINANCE_CONTROL;Contrôle de luminance -TP_DIRPYRDENOISE_LUMINANCE_CURVE;Courbe de luminance +TP_DIRPYRDENOISE_LUMINANCE_CURVE;Courbe de luminance: TP_DIRPYRDENOISE_LUMINANCE_DETAIL;Niveau de détails de Luminance TP_DIRPYRDENOISE_LUMINANCE_FRAME;Luminance TP_DIRPYRDENOISE_LUMINANCE_SMOOTHING;Luminance @@ -1660,7 +1660,7 @@ TP_HLREC_ENA_TOOLTIP;Peut être activé par le bouton Niveau Auto TP_HLREC_LABEL;Reconstruction des hautes lumières TP_HLREC_LUMINANCE;Récupération de la luminance TP_HLREC_METHOD;Méthode: -TP_HSVEQUALIZER_CHANNEL;Canal +TP_HSVEQUALIZER_CHANNEL;Canal: TP_HSVEQUALIZER_HUE;T TP_HSVEQUALIZER_LABEL;Égaliseur TSV TP_HSVEQUALIZER_SAT;S @@ -1758,7 +1758,7 @@ TP_LOCALCONTRAST_LIGHTNESS;Niveau des hautes-lumières TP_LOCALCONTRAST_RADIUS;Rayon TP_LOCALLAB_ACTIV;Luminosité seulement TP_LOCALLAB_ACTIVSPOT;Activer le Spot -TP_LOCALLAB_ADJ;Egalisateur Bleu-jaune Rouge-vert +TP_LOCALLAB_ADJ;Egalisateur couleur TP_LOCALLAB_ALL;Toutes les rubriques TP_LOCALLAB_AMOUNT;Quantité TP_LOCALLAB_ARTIF;Détection de forme @@ -1774,8 +1774,8 @@ TP_LOCALLAB_BILATERAL;Filtre Bilateral TP_LOCALLAB_BLACK_EV;Noir Ev TP_LOCALLAB_BLCO;Chrominance seulement TP_LOCALLAB_BLENDMASKCOL;Mélange - fusion -TP_LOCALLAB_BLENDMASKMASK;Ajout / soustrait le masque Luminance -TP_LOCALLAB_BLENDMASKMASKAB;Ajout / soustrait le masque Chrominance +TP_LOCALLAB_BLENDMASKMASK;Ajout/soustrait masque Luminance +TP_LOCALLAB_BLENDMASKMASKAB;Ajout/soustrait masque Chro. TP_LOCALLAB_BLENDMASK_TOOLTIP;Si fusion = 0 seule la détection de forme est améliorée.\nSi fusion > 0 le masque est ajouté à l'image. Si fusion < 0 le masque est soustrait à l'image TP_LOCALLAB_BLENDMASKMASK_TOOLTIP;Si ce curseur = 0 pas d'action.\nAjoute ou soustrait le masque de l'image originale TP_LOCALLAB_BLGUID;Filtre guidé @@ -1807,14 +1807,14 @@ TP_LOCALLAB_BUTTON_DEL;Effacer TP_LOCALLAB_BUTTON_DUPL;Dupliquer TP_LOCALLAB_BUTTON_REN;Renommer TP_LOCALLAB_BUTTON_VIS;Montrer/Cacher -TP_LOCALLAB_CBDL;Contraste par niveaux détail +TP_LOCALLAB_CBDL;Contr. par niveaux détail TP_LOCALLAB_CBDLCLARI_TOOLTIP;Ajuste les tons moyens et les réhausse. TP_LOCALLAB_CBDL_ADJ_TOOLTIP;Agit comme un outil ondelettes.\nLe premier niveau (0) agit sur des détails de 2x2.\nLe dernier niveau (5) agit sur des détails de 64x64. TP_LOCALLAB_CBDL_THRES_TOOLTIP;Empêche d'augmenter le bruit TP_LOCALLAB_CBDL_TOOLNAME;Contraste par niveaux de détail - 2 TP_LOCALLAB_CENTER_X;Centre X TP_LOCALLAB_CENTER_Y;Centre Y -TP_LOCALLAB_CH;Courbes CL - LC +TP_LOCALLAB_CH;CL - LC TP_LOCALLAB_CHROMA;Chrominance TP_LOCALLAB_CHROMABLU;Niveaux Chroma TP_LOCALLAB_CHROMABLU_TOOLTIP;Agit comme un amplificateur-reducteur d'action en comparant aux réglages de luma.\nEn dessous de 1 reduit, au dessus de 1 amplifie @@ -1827,7 +1827,7 @@ TP_LOCALLAB_CHRRT;Chroma TP_LOCALLAB_CIRCRADIUS;Taille Spot TP_LOCALLAB_CIRCRAD_TOOLTIP;Contient les références du RT-spot, utile pour la détection de forme (couleur, luma, chroma, Sobel).\nLes faibles valeurs peuvent être utiles pour les feuillages.\nLes valeurs élevées peuvent être utile pour la peau TP_LOCALLAB_CLARICRES;Fusion Chroma -TP_LOCALLAB_CLARIFRA;Clarté & Masque de netteté - Fusion & adoucir images +TP_LOCALLAB_CLARIFRA;Clarté & Masque netteté/Fusion & adoucir TP_LOCALLAB_CLARILRES;Fusion Luma TP_LOCALLAB_CLARISOFT;Rayon adoucir TP_LOCALLAB_CLARISOFT_TOOLTIP;Actif pour Clarté et Masque de netteté si différent de zéro.\n\nActif pour toutes les pyramides ondelettes.\nInactif si rayon = 0 @@ -1835,7 +1835,7 @@ TP_LOCALLAB_CLARITYML;Clarté TP_LOCALLAB_CLARI_TOOLTIP;En dessous ou égal à 4, 'Masque netteté' est actif.\nAu dessus du niveau ondelettes 5 'Clarté' est actif.\nUtilesu=i vous utilisez 'Compression dynamique des niveaux' TP_LOCALLAB_CLIPTM;Clip Recupère données (gain) TP_LOCALLAB_COFR;Couleur & Lumière -TP_LOCALLAB_COLORDE;Couleur prévisualisation sélection ΔE - Intensité +TP_LOCALLAB_COLORDE;Couleur prévis. sélection ΔE - Intensité TP_LOCALLAB_COLORDEPREV_TOOLTIP;Bouton Prévisualisation ΔE a besoin qu'un seul outil soit activé (expander).\nPour pouvoir avoir une Prévisualisation ΔE avec plusieurs outils activés utiliser Masque et modifications - Prévisualisation ΔE TP_LOCALLAB_COLORDE_TOOLTIP;Affiche la prévisualisation ΔE en bleu si négatif et en vert si positif.\n\nMasque et modifications (montre modifications sans masque): montre les modifications réelles si positf, montre les modifications améliorées (luminance seule) en bleu et jaune si négatif. TP_LOCALLAB_COLORSCOPE;Etendue Outils Couleur @@ -1857,8 +1857,8 @@ TP_LOCALLAB_CONTRESID;Contraste TP_LOCALLAB_CONTTHMASK_TOOLTIP;Vous permet de déterminer quelles parties de l'image seront concernées par la texture. TP_LOCALLAB_CONTTHR;Seuil contraste TP_LOCALLAB_CONTWFRA;Contrast Local -TP_LOCALLAB_CSTHRESHOLD;Ψ Ondelettes niveaux -TP_LOCALLAB_CSTHRESHOLDBLUR;Ψ Masque Ondelettes niveau +TP_LOCALLAB_CSTHRESHOLD;Ondelettes niveaux +TP_LOCALLAB_CSTHRESHOLDBLUR;Masque Ondelettes niveau TP_LOCALLAB_CURV;Luminosité - Contraste - Chrominance "Super" TP_LOCALLAB_CURVCURR;Normal TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;Si la courbe est au sommet, le masque est compétement noir aucune transformation n'est réalisée par le masque sur l'image.\nQuand vous descendez la courbe, progressivement le masque va se colorer et s'éclaicir, l'image change de plus en plus.\n\nIl est recommendé (pas obligatoire) de positionner le sommet des courbes curves sur la ligne de transition grise qui représnte les références (chroma, luma, couleur). @@ -1895,9 +1895,9 @@ TP_LOCALLAB_DENOIEQUALCHRO_TOOLTIP;Equilibre l'action de denoise chrominance ent TP_LOCALLAB_DENOIBILAT_TOOLTIP;Traite le bruit d'impulsion (poivre et sel) TP_LOCALLAB_DEPTH;Profondeur TP_LOCALLAB_DETAIL;Contraste local -TP_LOCALLAB_DETAILFRA;Détection de bord +TP_LOCALLAB_DETAILFRA;Détection bord - DCT TP_LOCALLAB_DETAILSH;Details -TP_LOCALLAB_DETAILTHR;Seuil Detail Luminance Chroma (DCT ƒ) +TP_LOCALLAB_DETAILTHR;Seuil Detail Luma-Chroma TP_LOCALLAB_DUPLSPOTNAME;Copier TP_LOCALLAB_EDGFRA;Netteté des bords TP_LOCALLAB_EDGSHOW;Montre tous les outils @@ -1958,15 +1958,15 @@ TP_LOCALLAB_FATFRA;Compression Dynamique ƒ TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal - utilise Fattal Tone mapping algorithme. TP_LOCALLAB_FATLEVEL;Sigma TP_LOCALLAB_FATRES;Quantité de Residual Image -TP_LOCALLAB_FATSHFRA;Compression Dynamique Masque ƒ +TP_LOCALLAB_FATSHFRA;Compression Dynamique Masque TP_LOCALLAB_FEATH_TOOLTIP;Largeur du Gradient en porcentage de la diagonale du Spot\nUtilisé par tous les Filtres Gradués dans tous les outils.\nPas d'action si les filtres gradués ne sont pas utilisés. -TP_LOCALLAB_FEATVALUE;Adoucissement gradient (Filtres Gradués) +TP_LOCALLAB_FEATVALUE;Adouc. gradient(Filtres Gradués) TP_LOCALLAB_FFTCOL_MASK;FFTW ƒ TP_LOCALLAB_FFTMASK_TOOLTIP;Utilise une transformée de Fourier pour une meilleure qualité (accroit le temps de traitement et le besoin en mémoire) TP_LOCALLAB_FFTW;ƒ - Utilise Fast Fourier Transform TP_LOCALLAB_FFTW2;ƒ - Utilise Fast Fourier Transform (TIF, JPG,..) TP_LOCALLAB_FFTWBLUR;ƒ - Utilise toujours Fast Fourier Transform -TP_LOCALLAB_FULLIMAGE;Calcule les valeurs Noir Ev - Blanc Ev - sur l'image entière +TP_LOCALLAB_FULLIMAGE;Calcule les valeurs NoirEv-blancEv - image entière TP_LOCALLAB_FULLIMAGELOG_TOOLTIP;Calcule les valeurs Ev sur l'image entière. TP_LOCALLAB_GAM;Gamma TP_LOCALLAB_GAMFRA;Courbe Réponse Tonale (TRC) @@ -2002,7 +2002,7 @@ TP_LOCALLAB_GUIDSTRBL_TOOLTIP;Force du filtre guidé TP_LOCALLAB_GUIDEPSBL_TOOLTIP;Détail - agit sur la répartition du filtre guidé, les valeurs négatives simulent un flou gaussien TP_LOCALLAB_HHMASK_TOOLTIP;Ajustements fin de la teinte par exemple pour la peau. TP_LOCALLAB_HIGHMASKCOL;Hautes lumières masque -TP_LOCALLAB_HLH;Courbes H +TP_LOCALLAB_HLH;H TP_LOCALLAB_IND;Independant (souris) TP_LOCALLAB_INDSL;Independant (souris + curseurs) TP_LOCALLAB_INVERS;Inverse @@ -2027,7 +2027,7 @@ TP_LOCALLAB_LC_FFTW_TOOLTIP;FFT améliore la qualité et autorise de grands rayo TP_LOCALLAB_LC_TOOLNAME;Constraste Local & Ondelettes - 7 TP_LOCALLAB_LEVELBLUR;Maximum Flouter TP_LOCALLAB_LEVELLOCCONTRAST_TOOLTIP;En abscisse le contraste local (proche du concept de luminance). En ordonnée, amplification ou reduction du contraste local. -TP_LOCALLAB_LEVELWAV;Ψ Ondelettes Niveaux +TP_LOCALLAB_LEVELWAV;Ondelettes Niveaux TP_LOCALLAB_LEVELWAV_TOOLTIP;Le niveau est automatiquement adapté à la taille du spot et de la prévisualisation.\nDu niveau 9 taille max 512 jusqu'au niveau 1 taille max = 4 TP_LOCALLAB_LEVFRA;Niveaux TP_LOCALLAB_LIGHTNESS;Luminosité @@ -2039,11 +2039,11 @@ TP_LOCALLAB_LIST_TOOLTIP;Vous pouvez choisir 3 niveaux de complexité pour chaqu TP_LOCALLAB_LMASK_LEVEL_TOOLTIP;Donne priorité à l'action sur les tons moyens et hautes lumières en choisissant les niveaux concernés d'ondelettes TP_LOCALLAB_LMASK_LL_TOOLTIP;Vous permet de modifier librement le contraste du masque. Peut amener de artefacts. TP_LOCALLAB_LOCCONT;Masque Flou -TP_LOCALLAB_LOC_CONTRAST;Contraste Local & Ondelettes -TP_LOCALLAB_LOC_CONTRASTPYR;Ψ Pyramide 1: -TP_LOCALLAB_LOC_CONTRASTPYR2;Ψ Pyramide 2: -TP_LOCALLAB_LOC_CONTRASTPYR2LAB; Contr. par niveaux- TM - Cont.Dir. -TP_LOCALLAB_LOC_CONTRASTPYRLAB; Filtre Gradué - Netteté bords - Flou +TP_LOCALLAB_LOC_CONTRAST;Contr. Local & Ondelettes +TP_LOCALLAB_LOC_CONTRASTPYR;Pyramide 1: +TP_LOCALLAB_LOC_CONTRASTPYR2;Pyramide 2: +TP_LOCALLAB_LOC_CONTRASTPYR2LAB; Contr. par niveaux/TM/Cont.Dir. +TP_LOCALLAB_LOC_CONTRASTPYRLAB; Filtre Gradué/Netteté bords/Flou TP_LOCALLAB_LOC_RESIDPYR;Image Residuelle TP_LOCALLAB_LOG;Codage log TP_LOCALLAB_LOG1FRA;Ajustements Image @@ -2080,9 +2080,9 @@ TP_LOCALLAB_LOGSRCGREY_TOOLTIP;Estime la valeur du point gris de l'image, tôt d TP_LOCALLAB_LOGTARGGREY_TOOLTIP;Vous pouvez changer cette valeur pour l'adapter à votre goût. TP_LOCALLAB_LOG_TOOLNAME;Codage log - 0 TP_LOCALLAB_LOGVIEWING_TOOLTIP;Correspond au medium sur lequel l'image finale sera vue (moniteur, TV, projecteur, imprimante,..), ainsi que son environnement. -TP_LOCALLAB_LUM;Courbes LL - CC +TP_LOCALLAB_LUM;LL - CC TP_LOCALLAB_LUMADARKEST;Plus Sombre -TP_LOCALLAB_LUMASK;Maqsue Luminance arrière plan +TP_LOCALLAB_LUMASK;Masque Luminance arrière plan TP_LOCALLAB_LUMASK_TOOLTIP;Ajuste le gris de l'arrière plan du masque dans Montrer Masque (Masque et modifications) TP_LOCALLAB_LUMAWHITESEST;Plus clair TP_LOCALLAB_LUMONLY;Luminance seulement @@ -2096,12 +2096,12 @@ TP_LOCALLAB_MASK;Masque TP_LOCALLAB_MASK2;Courbe de Contraste TP_LOCALLAB_MASKCOL;Masque Courbes TP_LOCALLAB_MASKCURVE_TOOLTIP;Si la courbe est au sommet, le masque est compétement noir aucune transformation n'est réalisée par le masque sur l'image.\nQuand vous descendez la courbe, progressivement le masque va se colorer et s'éclaicir, l'image change de plus en plus.\n\nIl est recommendé (pas obligatoire) de positionner le sommet des courbes curves sur la ligne de transition grise qui représnte les références (chroma, luma, couleur). -TP_LOCALLAB_MASKLCTHRMID;Zones grises de-bruite luminance -TP_LOCALLAB_MASKLCTHRMIDCH;Zones grises de-bruite chrominance +TP_LOCALLAB_MASKLCTHRMID;Zones grises de-bruite lumina +TP_LOCALLAB_MASKLCTHRMIDCH;Zones grises de-bruite chroma TP_LOCALLAB_MASKLC_TOOLTIP;Vous autorise à cibler le de-bruite en se basant sur les informations du masque dans L(L) ou LC(H) (Masque et Modifications).\n Les masques L(L) ou LC(H) doivent être activés pour utiliser cette fonction.\n si le masque est très sombre - sous le seuil 'sombre' - de-bruite sera accru si renforce > 1.\n si le masque est clair - au-dessus du seuil 'clair' - de-bruite sera progressivement réduit.\n entre les deux, de-bruite sera maintenu aux réglages sans masques. TP_LOCALLAB_MASKLCTHR;Seuil luminance zones claires TP_LOCALLAB_MASKLCTHRLOW;Seuil luminance zones sombres -TP_LOCALLAB_MASKLNOISELOW;Renforce de-bruite zones sombres et claires +TP_LOCALLAB_MASKLNOISELOW;Renf. de-bruite sombres/claires TP_LOCALLAB_MASKH;Courbe teinte TP_LOCALLAB_MASKRECOTHRES;Seuil de Récupération TP_LOCALLAB_MASKDE_TOOLTIP;Utilisé pour diriger l'action de de-bruite basé sur les informations des courbes masques L(L) ou LC(H) (Masque et modifications).\n Les masques L(L) ou LC(H) doivent être activés pour utiliser cette fonction.\n Si le masque est en dessous du seuil sombre le De-bruite sera appliqué progressivement.\n Si le masque est au-dessus du seuil 'clair', le De-bruite sera appliqué progressivement.\n Entre les deux, les réglages sans De-bruite seront maintenus, sauf si vous agissez sur les curseurs "Zones grise dé-bruite luminance" or "Zones grise de-bruite chrominance". @@ -2184,7 +2184,7 @@ TP_LOCALLAB_MERTHR;Difference TP_LOCALLAB_MERTWE;Exclusion TP_LOCALLAB_MERTWO;Soustrait TP_LOCALLAB_METHOD_TOOLTIP;'Enhanced + chroma denoise' significantly increases processing times.\nBut reduce artifacts. -TP_LOCALLAB_MLABEL;Récupère les données Min=%1 Max=%2 (Clip - décalage) +TP_LOCALLAB_MLABEL;Réc. données Min=%1 Max=%2 TP_LOCALLAB_MLABEL_TOOLTIP;'Doit être' près de min=0 max=32768 (log mode) mais d'autres valeurs sont possibles.\nVous pouvez agir sur les données récupérées (CLIP) et décalage pour normaliser.\n\nRécupère les données image sans mélange. TP_LOCALLAB_MODE_EXPERT;Avancé TP_LOCALLAB_MODE_NORMAL;Standard @@ -2207,12 +2207,12 @@ TP_LOCALLAB_NLRAD;Taille maximum du rayon TP_LOCALLAB_NOISE_TOOLTIP;Ajoute du bruit de luminance TP_LOCALLAB_NOISECHROCOARSE;Chroma gros (Ond) TP_LOCALLAB_NOISECHROC_TOOLTIP;Si supérieur à zéro, algorithme haute qualité est activé.\nGros est sélectionné si curseur >=0.2 -TP_LOCALLAB_NOISECHRODETAIL;Récupération des détails Chroma (DCT ƒ) +TP_LOCALLAB_NOISECHRODETAIL;Récup. détails Chroma(DCT) TP_LOCALLAB_NOISECHROFINE;Chroma fin (Ond) TP_LOCALLAB_NOISEDETAIL_TOOLTIP;Désactivé si curseur = 100 TP_LOCALLAB_NOISELEQUAL;Egalisateurs blanc-noir TP_LOCALLAB_NOISELUMCOARSE;Luminance gros (ond) -TP_LOCALLAB_NOISELUMDETAIL;Récupération Luminance fin(DCT ƒ) +TP_LOCALLAB_NOISELUMDETAIL;Récup. Luminance détail(DCT) TP_LOCALLAB_NOISELUMFINE;Luminance fin 1 (ond) TP_LOCALLAB_NOISELUMFINETWO;Luminance fin 2 (ond) TP_LOCALLAB_NOISELUMFINEZERO;Luminance fin 0 (ond) @@ -2236,7 +2236,7 @@ TP_LOCALLAB_QUALCURV_METHOD;Types de Courbes TP_LOCALLAB_QUAL_METHOD;Qualité globale TP_LOCALLAB_QUACONSER;Conservatif TP_LOCALLAB_QUAAGRES;Aggressif -TP_LOCALLAB_QUANONEWAV;Débruitage par morceaux - luminance seulement +TP_LOCALLAB_QUANONEWAV;Débruit. par morceaux-luminance seulement TP_LOCALLAB_QUANONEALL;Rien TP_LOCALLAB_RADIUS;Rayon TP_LOCALLAB_RADIUS_TOOLTIP;Au-dessus de Rayon 30 Utilise 'Fast Fourier Transform' @@ -2297,7 +2297,7 @@ TP_LOCALLAB_SH1;Ombres Lumières TP_LOCALLAB_SH2;Egaliseur TP_LOCALLAB_SHADEX;Ombres TP_LOCALLAB_SHADEXCOMP;Compression ombres & profondeur tonale -TP_LOCALLAB_SHADHIGH;Ombres/Lumières-Egaliseur +TP_LOCALLAB_SHADHIGH;Ombres/Lumières&Egaliseur TP_LOCALLAB_SHADOWHIGHLIGHT_TOOLTIP;Peut être utilisé - ou en complement - du module Exposition dans les cas difficiles.\nUtiliser réduction du bruit Denoise peut être nécessaire : éclaicir les ombres.\n\nPeut être utilisé comme un filtre gradué (augmenter Etendue) TP_LOCALLAB_SHAMASKCOL;Ombres TP_LOCALLAB_SHADMASK_TOOLTIP;Relève les ombres du masque de la même manière que l'algorithme "ombres/lumières" @@ -2334,7 +2334,7 @@ TP_LOCALLAB_SHOWMODIF;Montrer modifications sans masque TP_LOCALLAB_SHOWMODIF2;Montrer modifications TP_LOCALLAB_SHOWMODIFMASK;Montrer modifications avec masque TP_LOCALLAB_SHOWNORMAL;Normalise luminance (non) -TP_LOCALLAB_SHOWPLUS;Masque et modifications - Adoucir-flouter & De-bruite +TP_LOCALLAB_SHOWPLUS;Masque et modifications TP_LOCALLAB_SHOWPOISSON;Poisson (pde ƒ) TP_LOCALLAB_SHOWR;Masque et modifications TP_LOCALLAB_SHOWREF;Prévisualisation ΔE @@ -2351,7 +2351,7 @@ TP_LOCALLAB_SIM;Simple TP_LOCALLAB_SLOMASKCOL;Pente (slope) TP_LOCALLAB_SLOMASK_TOOLTIP;Gamma et Pente (Slope) autorise une transformation du masque en douceur et sans artefacts en modifiant progressivement "L" pour éviter les discontinuité. TP_LOCALLAB_SLOSH;Pente -TP_LOCALLAB_SOFT;Lumière douce - Original Retinex +TP_LOCALLAB_SOFT;Lumière douce/Orig. Retinex TP_LOCALLAB_SOFTM;Lumière douce (soft light) TP_LOCALLAB_SOFTMETHOD_TOOLTIP;Applique un mélange Lumière douce. Effectue une émulation de "dodge and burn" en utilisant l'algorithme original de retinex. TP_LOCALLAB_SOFTRADIUSCOL;Rayon adoucir @@ -2391,10 +2391,10 @@ TP_LOCALLAB_THRES;Seuil structure TP_LOCALLAB_THRESDELTAE;Seuil ΔE-Etendue TP_LOCALLAB_THRESRETI;Seuil TP_LOCALLAB_THRESWAV;Balance Seuil -TP_LOCALLAB_TLABEL;TM Datas Min=%1 Max=%2 Mean=%3 Sigma=%4 (Seuil) +TP_LOCALLAB_TLABEL;TM Min=%1 Max=%2 Mea=%3 Sig=%4 TP_LOCALLAB_TLABEL2;TM Effectif Tm=%1 TM=%2 TP_LOCALLAB_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nTm=Min TM=Max of Transmission Map.\nYou can act on Threshold to normalize -TP_LOCALLAB_TM;Compression tonale - Texture +TP_LOCALLAB_TM;Compression tonale TP_LOCALLAB_TM_MASK;Utilise transmission map TP_LOCALLAB_TONEMAPESTOP_TOOLTIP;Ce paramètre affecte la sensibilité aux bords.\n Plus grand il est, plus la luminosité change peut être considéré comme un bord.\n Si réglé à zéro 'compression tonale' va avoir un effet similaire à masque flou. TP_LOCALLAB_TONEMAPGAM_TOOLTIP;Gamma déplace l'action de 'compression tonale' des ombres vers les lumières. @@ -2410,7 +2410,7 @@ TP_LOCALLAB_TRANSIT;Transition - Gradient TP_LOCALLAB_TRANSITGRAD;Transition différentiation XY TP_LOCALLAB_TRANSITGRAD_TOOLTIP;Change la transition des abscisses vers les ordonnées TP_LOCALLAB_TRANSITVALUE;Transition valeur -TP_LOCALLAB_TRANSITWEAK;Transition affaiblissement (linéaire-log) +TP_LOCALLAB_TRANSITWEAK;Transition affaiblissement (lin-log) TP_LOCALLAB_TRANSITWEAK_TOOLTIP;Ajuste l'affaiblissement de la transition : change le processus d'affaiblissement - 1 linéaire - 2 parabolique - 3 cubique - ^25.\nPeut être utilisé en conjonction avec de très faibles valeurs de transition pour traiter/réduire les défauts (CBDL, Ondelettes, Couleur et lumière) TP_LOCALLAB_TRANSIT_TOOLTIP;Ajuste la progressions de la transition enttre les zones affectées ou non affectées, comme un pourcentage du "rayon" TP_LOCALLAB_TRANSMISSIONGAIN;Transmission gain @@ -2429,9 +2429,9 @@ TP_LOCALLAB_SHARP_TOOLNAME;Netteté - 8 TP_LOCALLAB_LC_TOOLNAME;Constraste local & Ondelettes (Défauts) - 7 TP_LOCALLAB_CBDL_TOOLNAME;Contraste par Niveau détail - 2 TP_LOCALLAB_LOG_TOOLNAME;Codage log - 0 -TP_LOCALLAB_MASKCOM_TOOLNAME;Masque Commun Couleur - 13 +TP_LOCALLAB_MASKCOM_TOOLNAME;Masque Commun Couleur - 12 TP_LOCALLAB_VIS_TOOLTIP;Click pour montrer/cacher le Spot sélectionné.\nCtrl+click pour montrer/cacher tous les Spot. -TP_LOCALLAB_WAMASKCOL;Ψ Niveau Ondelettes +TP_LOCALLAB_WAMASKCOL;Niveau Ondelettes TP_LOCALLAB_WARM;Chaud - Froid & Artefacts de couleur TP_LOCALLAB_WARM_TOOLTIP;Ce curseur utilise l'algorithme Ciecam et agit comme une Balance des blancs, il prut réchauffer ou refroidir cool la zone concernée.\nIl peut aussi dans certains réduire les artefacts colorés. TP_LOCALLAB_WASDEN_TOOLTIP;De-bruite luminance pour les 3 premiers niveaux (fin).\nLa limite droite de la courbe correspond à gros : niveau 3 et au delà. @@ -2468,18 +2468,18 @@ TP_LOCALLAB_WAVCOMPRE_TOOLTIP;Réalise un 'Tone-mapping' ou une réduction du co TP_LOCALLAB_WAVCOMP_TOOLTIP;Réalise un contrast local en fonction de la direction de la décomposition en ondelettes : horizontal, vertical, diagonal TP_LOCALLAB_WAVCON;Contraste par niveau TP_LOCALLAB_WAVCONTF_TOOLTIP;Similaire à Contrast By Detail Levels : en abscisse niveaux. -TP_LOCALLAB_WAVDEN;de-bruite luminance par niveau (0 1 2 -3 et plus) -TP_LOCALLAB_WAVE;Ψ Ondelette +TP_LOCALLAB_WAVDEN;de-bruite lum. par niveau +TP_LOCALLAB_WAVE;Ondelette TP_LOCALLAB_WAVEDG;Contrast Local TP_LOCALLAB_WAVEEDG_TOOLTIP;Améliore la netteté prenant en compte la notion de "ondelettes bords".\nNécessite au moins que les 4 premiers niveaux sont utilisables TP_LOCALLAB_WAVGRAD_TOOLTIP;Filtre gradué pour Contraste local "luminance" -TP_LOCALLAB_WAVHIGH;Ψ Ondelette haut -TP_LOCALLAB_WAVLEV;Flouter par niveau -TP_LOCALLAB_WAVLOW;Ψ Ondelette bas -TP_LOCALLAB_WAVMASK;Ψ Niveau contraste local +TP_LOCALLAB_WAVHIGH;Ondelette haut +TP_LOCALLAB_WAVLEV;Flou par niveau +TP_LOCALLAB_WAVLOW;Ondelette bas +TP_LOCALLAB_WAVMASK;Contr. local (par niveau) TP_LOCALLAB_WAVEMASK_LEVEL_TOOLTIP;Amplitude des niveaux d'ondelettes utilisés par “Local contrast” TP_LOCALLAB_WAVMASK_TOOLTIP;Autorise un travail fin sur les masques niveaux de contraste (structure) -TP_LOCALLAB_WAVMED;Ψ Ondelette normal +TP_LOCALLAB_WAVMED;Ondelette normal TP_LOCALLAB_WEDIANHI;Median Haut TP_LOCALLAB_WHITE_EV;Blanc Ev TP_METADATA_EDIT;Appliquer les modifications @@ -2607,7 +2607,7 @@ TP_RESIZE_APPLIESTO;S'applique à: TP_RESIZE_CROPPEDAREA;La zone recadrée TP_RESIZE_FITBOX;Boîte englobante TP_RESIZE_FULLIMAGE;L'image entière -TP_RESIZE_H;H: +TP_RESIZE_H;H TP_RESIZE_HEIGHT;Hauteur TP_RESIZE_LABEL;Redimensionnement TP_RESIZE_LANCZOS;Lanczos @@ -2619,7 +2619,7 @@ TP_RESIZE_W;L: TP_RESIZE_WIDTH;Largeur TP_RETINEX_CONTEDIT_HSL;Égaliseur d'histogramme TSV TP_RETINEX_CONTEDIT_LAB;Égaliseur d'histogramme L*a*b* -TP_RETINEX_CONTEDIT_LH;Égaliseur de teinte +TP_RETINEX_CONTEDIT_LH;Égaliseur teinte: TP_RETINEX_CONTEDIT_MAP;Égaliseur TP_RETINEX_CURVEEDITOR_CD;L=f(L) TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance en fonction de la luminance L=f(L)\nCorrige les données raw pour réduire halos et artéfacts. @@ -2631,7 +2631,7 @@ TP_RETINEX_EQUAL;Égaliseur TP_RETINEX_FREEGAMMA;Gamma manuel TP_RETINEX_GAIN;Gain TP_RETINEX_GAINOFFS;Gain et Décalage (brillance) -TP_RETINEX_GAINTRANSMISSION;Gain sur Transmission +TP_RETINEX_GAINTRANSMISSION;Gain Transmission: TP_RETINEX_GAINTRANSMISSION_TOOLTIP;Amplifie ou réduit le canal transmission pour atteindre la luminance souhaitée.\nAbscisses: transmission ; min = 0, max = valeurs.\nOrdonnées: gain. TP_RETINEX_GAMMA;Gamma TP_RETINEX_GAMMA_FREE;Manuel @@ -2684,7 +2684,7 @@ TP_RETINEX_TLABEL;CT Min=%1 Max=%2 Moyen=%3 Sigma=%4 TP_RETINEX_TLABEL2;CT Tm=%1 TM=%2 TP_RETINEX_TLABEL_TOOLTIP;Résultat du calcul de transmission.\nMin et Max sont utilisés par Variance.\nMoyen et Sigma.\nTm=Min TM=Niveau maximum de transmission. TP_RETINEX_TRANF;Transmission -TP_RETINEX_TRANSMISSION;Modulation du canal 'transmission' +TP_RETINEX_TRANSMISSION;Modulation 'transmission' TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission en fonction de la transmission.\nAbscisses: transmission des valeurs négatives (min), moyennes, et positives (max).\nOrdonnées: amplification ou réduction. TP_RETINEX_UNIFORM;Uniforme TP_RETINEX_VARIANCE;Contraste @@ -2816,7 +2816,7 @@ TP_WAVELET_COMPCONT;Contraste TP_WAVELET_COMPGAMMA;Compression gamma TP_WAVELET_COMPGAMMA_TOOLTIP;Ajuster le gamma de l'image résiduelle vous permet d'équiilibrer les données de l'histogramme. TP_WAVELET_COMPTM;Compression tonale -TP_WAVELET_CONTEDIT;Courbe de contraste 'Après' +TP_WAVELET_CONTEDIT;Courbe contraste 'Après' TP_WAVELET_CONTR;Gamut TP_WAVELET_CONTRA;Contraste TP_WAVELET_CONTRAST_MINUS;Contraste - @@ -2904,7 +2904,7 @@ TP_WAVELET_NPTYPE;Pixels voisins TP_WAVELET_NPTYPE_TOOLTIP;Cet algorithme utilise la proximité d'un pixel et huit de ses voisins. Si moins de différence, les bords sont renforcés. TP_WAVELET_OPACITY;Opacité Bleu-Jaune TP_WAVELET_OPACITYW;Courbe de contraste d/v-h -TP_WAVELET_OPACITYWL;Contraste local final +TP_WAVELET_OPACITYWL;Contraste local TP_WAVELET_OPACITYWL_TOOLTIP;Modifie le contraste local final à la fin du traitement par ondelettes.\n\nLe côté gauche représente les plus faibles contrastes locaaux, progressant jusqu'aux plus grands contrastes locaux vers la droite. TP_WAVELET_PASTEL;Chroma des Pastels TP_WAVELET_PROC;Procédé diff --git a/rtdata/languages/default b/rtdata/languages/default index dd77e2946..f87e084f0 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -1286,6 +1286,15 @@ 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_BLSHAPE;Blur by level HISTORY_MSG_BLURCWAV;Blur chroma HISTORY_MSG_BLURWAV;Blur luminance @@ -1461,7 +1470,7 @@ 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: +ICCPROFCREATOR_TRC_PRESET;Tone response curve IPTCPANEL_CATEGORY;Category IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. IPTCPANEL_CITY;City @@ -2141,7 +2150,7 @@ TP_COLORTONING_AUTOSAT;Automatic TP_COLORTONING_BALANCE;Balance TP_COLORTONING_BY;o C/L TP_COLORTONING_CHROMAC;Opacity -TP_COLORTONING_COLOR;Color +TP_COLORTONING_COLOR;Color: TP_COLORTONING_CURVEEDITOR_CL_TOOLTIP;Chroma opacity as a function of luminance oC=f(L) TP_COLORTONING_HIGHLIGHT;Highlights TP_COLORTONING_HUE;Hue @@ -2176,7 +2185,7 @@ TP_COLORTONING_METHOD_TOOLTIP;"L*a*b* blending", "RGB sliders" and "RGB curves" TP_COLORTONING_MIDTONES;Midtones TP_COLORTONING_NEUTRAL;Reset sliders TP_COLORTONING_NEUTRAL_TIP;Reset all values (Shadows, Midtones, Highlights) to default. -TP_COLORTONING_OPACITY;Opacity +TP_COLORTONING_OPACITY;Opacity: TP_COLORTONING_RGBCURVES;RGB - Curves TP_COLORTONING_RGBSLIDERS;RGB - Sliders TP_COLORTONING_SA;Saturation Protection @@ -2484,7 +2493,7 @@ TP_LOCALCONTRAST_LIGHTNESS;Lightness level TP_LOCALCONTRAST_RADIUS;Radius TP_LOCALLAB_ACTIV;Luminance only TP_LOCALLAB_ACTIVSPOT;Enable Spot -TP_LOCALLAB_ADJ;Equalizer Blue-Yellow/Red-Green +TP_LOCALLAB_ADJ;Equalizer Color TP_LOCALLAB_ALL;All rubrics TP_LOCALLAB_AMOUNT;Amount TP_LOCALLAB_ARTIF;Shape detection @@ -2502,8 +2511,8 @@ 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 luminance mask -TP_LOCALLAB_BLENDMASKMASKAB;Add/subtract chrominance mask +TP_LOCALLAB_BLENDMASKMASK;Add/subtract luma mask +TP_LOCALLAB_BLENDMASKMASKAB;Add/subtract chroma mask 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 @@ -2511,12 +2520,12 @@ TP_LOCALLAB_BLINV;Inverse TP_LOCALLAB_BLLC;Luminance & Chrominance TP_LOCALLAB_BLLO;Luminance only TP_LOCALLAB_BLMED;Median -TP_LOCALLAB_BLMETHOD_TOOLTIP;Normal - direct blur and noise with all settings.\nInverse blur and noise with all settings. Be careful some results may be curious +TP_LOCALLAB_BLMETHOD_TOOLTIP;Normal: direct blur and noise with all settings.\nInverse: blur and noise with all settings. Warning, some settings may give curious results. TP_LOCALLAB_BLNOI_EXP;Blur & Noise TP_LOCALLAB_BLNORM;Normal TP_LOCALLAB_BLSYM;Symmetric TP_LOCALLAB_BLUFR;Blur/Grain & Denoise -TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with an an RT-spot (high values for scope and transition and ‘Normal’ or ‘Inverse’ in checkbox).\n-Isolate the foreground by using one or more ‘Excluding’ RT-spot(s) and increase the scope.\n\nThis module (including the "median" and "Guided filter") can be used in addition to the main-menu noise reduction. +TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with an an RT-spot (high values for scope and transition and ‘Normal’ or ‘Inverse’ in checkbox).\n-Isolate the foreground by using one or more ‘Excluding’ RT-spot(s) and increase the scope.\n\nThis module (including the ‘median’ and ‘Guided filter’) can be used in addition to the main-menu noise reduction TP_LOCALLAB_BLUR;Gaussian Blur - Noise - Grain TP_LOCALLAB_BLURCBDL;Blur levels 0-1-2-3-4 TP_LOCALLAB_BLURCOL;Radius @@ -2527,7 +2536,7 @@ TP_LOCALLAB_BLURLEVELFRA;Blur levels TP_LOCALLAB_BLURMASK_TOOLTIP;Uses a large-radius blur to create a mask that allows you to vary the contrast of the image and/or darken/lighten parts of it. TP_LOCALLAB_BLURRESIDFRA;Blur Residual TP_LOCALLAB_BLURRMASK_TOOLTIP;Allows you to vary the "radius" of the Gaussian blur (0 to 1000) -TP_LOCALLAB_BLUR_TOOLNAME;Blur/Grain & Denoise - 1 +TP_LOCALLAB_BLUR_TOOLNAME;Blur/Grain & Denoise TP_LOCALLAB_BLWH;All changes forced in Black-and-White 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 @@ -2535,15 +2544,15 @@ TP_LOCALLAB_BUTTON_DEL;Delete TP_LOCALLAB_BUTTON_DUPL;Duplicate TP_LOCALLAB_BUTTON_REN;Rename TP_LOCALLAB_BUTTON_VIS;Show/Hide -TP_LOCALLAB_CATAD;Chromatic adaptation - Cat16 +TP_LOCALLAB_CATAD;Chromatic adaptation/Cat16 TP_LOCALLAB_CBDL;Contrast by Detail Levels 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 - 2 +TP_LOCALLAB_CBDL_TOOLNAME;Contrast by Detail Levels TP_LOCALLAB_CENTER_X;Center X TP_LOCALLAB_CENTER_Y;Center Y -TP_LOCALLAB_CH;Curves CL - LC +TP_LOCALLAB_CH;CL - LC 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. @@ -2552,49 +2561,50 @@ TP_LOCALLAB_CHROMACB_TOOLTIP;Increases or reduces the effect depending on the lu TP_LOCALLAB_CHROMALEV;Chroma levels 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_CIEC;Use Ciecam environment parameters 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_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 treating foliage.\nHigh values may be useful for treating skin +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_CLARIFRA;Clarity & Sharp mask/Blend & Soften Images TP_LOCALLAB_CLARILRES;Merge luma TP_LOCALLAB_CLARISOFT;Soft radius -TP_LOCALLAB_CLARISOFT_TOOLTIP;The "Soft radius" slider (guided filter algorithm) reduces halos and irregularities for both Clarity and Sharp Mask and for all pyramid wavelet processes. To deactivate, set slider to zero. +TP_LOCALLAB_CLARISOFT_TOOLTIP;The ‘Soft radius’ slider (guided filter algorithm) reduces halos and irregularities for both Clarity and Sharp Mask and for all pyramid wavelet processes. To deactivate, set slider to zero. TP_LOCALLAB_CLARITYML;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_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_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_TOOLNAME;Color & Light - 11 +TP_LOCALLAB_COLOR_TOOLNAME;Color & Light TP_LOCALLAB_COL_NAME;Name TP_LOCALLAB_COL_VIS;Status TP_LOCALLAB_COMPFRA;Directional contrast -TP_LOCALLAB_COMPFRAME_TOOLTIP;Allows special effects. You can reduce artifacts with 'Clarity & Sharp mask - Blend & Soften Images".\nUses a lot of resources +TP_LOCALLAB_COMPFRAME_TOOLTIP;Allows you to create special effects. You can reduce artifacts with 'Clarity and Sharp mask - Blend and Soften Images’.\nUses a lot of resources. TP_LOCALLAB_COMPLEX_METHOD;Software Complexity -TP_LOCALLAB_COMPLEX_TOOLTIP; Allow user to select Local adjustments rubrics. +TP_LOCALLAB_COMPLEX_TOOLTIP; Allow user to select Local adjustments complexity. TP_LOCALLAB_COMPREFRA;Wavelet level tone mapping -TP_LOCALLAB_COMPRESS_TOOLTIP;Use if necessary the module 'Clarity & Sharp mask and Blend & Soften Images' by adjusting 'Soft radius' to reduce artifacts. +TP_LOCALLAB_COMPRESS_TOOLTIP;If necessary, use the module 'Clarity and Sharp mask and Blend and Soften Images' by adjusting 'Soft radius' to reduce artifacts. TP_LOCALLAB_CONTCOL;Contrast threshold TP_LOCALLAB_CONTFRA;Contrast by level TP_LOCALLAB_CONTL;Contrast (J) TP_LOCALLAB_CONTRAST;Contrast -TP_LOCALLAB_CONTRASTCURVMASK1_TOOLTIP;Allows you to freely modify the contrast of the mask (gamma and slope), instead of using a continuous and progressive curve. However it can create artifacts that have to be dealt with using the “Smooth radius” or “Laplacian threshold sliders”. +TP_LOCALLAB_CONTRASTCURVMASK1_TOOLTIP;Allows you to freely modify the contrast of the mask (gamma and slope), instead of using a continuous and progressive curve. However it can create artifacts that have to be dealt with using the ‘Smooth radius’ or ‘Laplacian threshold sliders’. TP_LOCALLAB_CONTRASTCURVMASK_TOOLTIP;Allows you to freely change the contrast of the mask.\n Has a similar function to the Gamma and Slope sliders.\n It allows you to target certain parts of the image (usually the lightest parts of the mask by using the curve to exclude the darker parts).May create artifacts. TP_LOCALLAB_CONTRESID;Contrast TP_LOCALLAB_CONTTHMASK_TOOLTIP;Allows you to determine which parts of the image will be impacted based on the texture. TP_LOCALLAB_CONTTHR;Contrast Threshold TP_LOCALLAB_CONTWFRA;Local contrast -TP_LOCALLAB_CSTHRESHOLD;Ψ Wavelet levels -TP_LOCALLAB_CSTHRESHOLDBLUR;Ψ Wavelet level selection +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 curves at the top, mask is completely black no transformation is made by the mask on the image.\nAs you go down the curve, the mask gradually more colorful and brilliant, the image is changing more and more.\n\nThe gray transition line which represents the references (chroma, luma, hue).\nYou can choose or not to position the top of the curves on this transition. +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_CURVEEDITOR_LL_TOOLTIP;To activate the curves, set the ‘Curve type’ combobox to ‘Normal’ TP_LOCALLAB_CURVEEDITOR_TONES_LABEL;Tone curve @@ -2621,16 +2631,16 @@ TP_LOCALLAB_DENOIEQUAL_TOOLTIP;Allows you to carry out more or less noise reduct TP_LOCALLAB_DENOI1_EXP;Denoise based on luminance mask TP_LOCALLAB_DENOI2_EXP;Recovery based on luminance mask TP_LOCALLAB_DENOILUMDETAIL_TOOLTIP;Allows you to recover luminance detail by progressively applying a Fourier transform (DCT). -TP_LOCALLAB_DENOIQUA_TOOLTIP;Conservative mode preserves low frequency detail. Aggressive mode removes low frequency detail.\nConservative and Aggressive use wavelets and DCT, can be used in conjunction with "Non-local Means - Luminance". -TP_LOCALLAB_DENOIS;Ψ Denoise +TP_LOCALLAB_DENOIQUA_TOOLTIP;Conservative mode preserves low frequency detail. Aggressive mode removes low frequency detail.\nConservative and Aggressive modes use wavelets and DCT and can be used in conjunction with ‘Non-local Means – Luminance’. +TP_LOCALLAB_DENOIS;Denoise TP_LOCALLAB_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas. TP_LOCALLAB_DENOI_EXP;Denoise TP_LOCALLAB_DENOI_TOOLTIP;This module can be used for noise reduction either on its own (at the end of the processing pipeline) or in addition to the Noise Reduction module in the Detail tab (which works at the beginning of the pipeline).\n Scope allows you to differentiate the action based on color (deltaE). TP_LOCALLAB_DEPTH;Depth TP_LOCALLAB_DETAIL;Local contrast -TP_LOCALLAB_DETAILFRA;Edge detection +TP_LOCALLAB_DETAILFRA;Edge detection - DCT TP_LOCALLAB_DETAILSH;Details -TP_LOCALLAB_DETAILTHR;Luminance & chroma detail threshold (DCT ƒ) +TP_LOCALLAB_DETAILTHR;Luma-chro detail threshold TP_LOCALLAB_DIVGR;Gamma TP_LOCALLAB_DUPLSPOTNAME;Copy TP_LOCALLAB_EDGFRA;Edge sharpness @@ -2639,7 +2649,7 @@ 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_ENARETIMASKTMAP_TOOLTIP;If enabled Mask uses Restored Datas after Transmission Map instead of Original datas +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 @@ -2664,9 +2674,9 @@ TP_LOCALLAB_EXPCHROMA_TOOLTIP;Use in association with ‘Exposure compensation f 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_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 Locallab version: 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 wth defects.\nUse 'Clarity & Sharp mask and Blend & 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 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_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. @@ -2674,16 +2684,16 @@ 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 (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_EXPMETHOD_TOOLTIP;Standard : use an algorithm similar as main Exposure but in L*a*b* and taking account of deltaE.\n\nContrast attenuator : use another algorithm also with deltaE and with Poisson equation to solve Laplacian in Fourier space.\nContrast attenuator, Dynamic range compression and Standard can be combined.\nFFTW Fourier Transform is optimized in size to reduce processing time.\nReduce artifacts and noise. -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_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;RT-Spot minimum 39*39.\nUse low transition values and high ‘Transition decay’ and ‘Scope’ values to simulate smaller RT-Spots. TP_LOCALLAB_EXPTOOL;Exposure Tools TP_LOCALLAB_EXPTRC;Tone Response Curve - TRC -TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure - 10 +TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure TP_LOCALLAB_FATAMOUNT;Amount TP_LOCALLAB_FATANCHOR;Anchor TP_LOCALLAB_FATANCHORA;Offset @@ -2694,19 +2704,19 @@ TP_LOCALLAB_FATLEVEL;Sigma TP_LOCALLAB_FATRES;Amount Residual Image TP_LOCALLAB_FATSHFRA;Dynamic Range Compression Mask ƒ TP_LOCALLAB_FEATH_TOOLTIP;Gradient width as a percentage of the Spot diagonal\nUsed by all graduated filters in all tools.\nNo action if a graduated filter hasn’t been activated. -TP_LOCALLAB_FEATVALUE;Feather gradient (Graduated Filters) +TP_LOCALLAB_FEATVALUE;Feather gradient (Grad. Filters) TP_LOCALLAB_FFTCOL_MASK;FFTW ƒ TP_LOCALLAB_FFTMASK_TOOLTIP;Use a Fourier transform for better quality (increased processing time and memory requirements) TP_LOCALLAB_FFTW;ƒ - Use Fast Fourier Transform TP_LOCALLAB_FFTW2;ƒ - Use Fast Fourier Transform (TIF, JPG,..) TP_LOCALLAB_FFTWBLUR;ƒ - Always Use Fast Fourier Transform -TP_LOCALLAB_FULLIMAGE;Dark-Ev & white-Ev for the whole image +TP_LOCALLAB_FULLIMAGE;Black-Ev and White-Ev for whole image TP_LOCALLAB_FULLIMAGELOG_TOOLTIP;Calculates the Ev levels for the whole image. TP_LOCALLAB_GAM;Gamma TP_LOCALLAB_GAMFRA;Tone response curve (TRC) TP_LOCALLAB_GAMM;Gamma TP_LOCALLAB_GAMMASKCOL;Gamma -TP_LOCALLAB_GAMMASK_TOOLTIP;Gamma and Slope allow a soft and artifact-free transformation of the mask by progressively modifying “L” to avoid any discontinuities. +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_GRADANG;Gradient angle TP_LOCALLAB_GRADANG_TOOLTIP;Rotation angle in degrees : -180 0 +180 @@ -2715,18 +2725,17 @@ TP_LOCALLAB_GRADGEN_TOOLTIP;Adjusts luminance gradient strength TP_LOCALLAB_GRADLOGFRA;Graduated Filter Luminance TP_LOCALLAB_GRADSTR;Gradient strength TP_LOCALLAB_GRADSTRAB_TOOLTIP;Adjusts chroma gradient strength -TP_LOCALLAB_GRADSTRCHRO;Chrominance gradient strength +TP_LOCALLAB_GRADSTRCHRO;Chroma gradient strength TP_LOCALLAB_GRADSTRHUE;Hue gradient strength TP_LOCALLAB_GRADSTRHUE2;Hue gradient strength TP_LOCALLAB_GRADSTRHUE_TOOLTIP;Adjusts hue gradient strength -TP_LOCALLAB_GRADSTRLUM;Luminance gradient strength +TP_LOCALLAB_GRADSTRLUM;Luma gradient strength TP_LOCALLAB_GRADSTR_TOOLTIP;Filter strength in stops TP_LOCALLAB_GRAINFRA;Film Grain 1:1 TP_LOCALLAB_GRAINFRA2;Coarseness - TP_LOCALLAB_GRAIN_TOOLTIP;Adds film-like grain to the image TP_LOCALLAB_GRALWFRA;Graduated filter (local contrast) -TP_LOCALLAB_GRIDFRAME_TOOLTIP;You can use this tool as a brush. Use small spot and adapt transition and transition decay\nOnly mode NORMAL and eventually Hue, Saturation, Color, Luminosity are concerned by Merge background (ΔE) +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 @@ -2738,13 +2747,13 @@ 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;Curves H +TP_LOCALLAB_HLH;H TP_LOCALLAB_IND;Independent (mouse) TP_LOCALLAB_INDSL;Independent (mouse + sliders) TP_LOCALLAB_INVBL;Inverse -TP_LOCALLAB_INVBL_TOOLTIP;Alternative to ‘Inverse’ mode: use two spots\nFirst Spot:\n full image - delimiter outside preview\n RT-spot shape: rectangle. Transition 100\n\nSecond spot : Excluding spot +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_TOOLTIP;Fewer possibilities if selected (Inverse).\n\nAlternative: use two spots\nFirst Spot:\n full image - delimiter outside preview\n RT-spot shape: rectangle. Transition 100\n\nSecond spot: Excluding spot +TP_LOCALLAB_INVERS_TOOLTIP;Fewer possibilities if selected (Inverse).\n\nAlternative: use two spots\nFirst Spot:\n Full Image\n \nSecond spot: Excluding spot TP_LOCALLAB_INVMASK;Inverse algorithm TP_LOCALLAB_ISOGR;Distribution (ISO) TP_LOCALLAB_LABBLURM;Blur Mask @@ -2760,11 +2769,11 @@ TP_LOCALLAB_LAPMASKCOL;Laplacian threshold 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;Solve PDE for all Laplacian masks.\nIf enabled Laplacian threshold mask reduce artifacts and smooth result.\nIf disabled linear response. +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_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 - 7 +TP_LOCALLAB_LC_TOOLNAME;Local Contrast & Wavelets TP_LOCALLAB_LEVELBLUR;Maximum blur levels -TP_LOCALLAB_LEVELWAV;Ψ Wavelet levels +TP_LOCALLAB_LEVELWAV;Wavelet 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 TP_LOCALLAB_LEVFRA;Levels TP_LOCALLAB_LIGHTNESS;Lightness @@ -2777,32 +2786,34 @@ TP_LOCALLAB_LMASK_LEVEL_TOOLTIP;Allows you to decrease or increase the effect on 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_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;Image Adjustments TP_LOCALLAB_LOG2FRA;Viewing Conditions TP_LOCALLAB_LOGAUTO;Automatic -TP_LOCALLAB_LOGAUTOGRAY_TOOLTIP;Automatically calculates the 'mean luminance' for the scene conditons 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_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_LOGBLACKWHEV_TOOLTIP;Estimated values of Dynamic Range i.e. Black Ev and White Ev -TP_LOCALLAB_LOGCATAD_TOOLTIP;The chromatic adaptation allows us to interpret a color according to its spatio-temporal environment.\nUseful when the white balance is far from reference D50.\nAdapts colors to the illuminant of the output device. +TP_LOCALLAB_LOGBLACKWHEV_TOOLTIP;Estimated values of dynamic range i.e. Black Ev and White Ev +TP_LOCALLAB_LOGCATAD_TOOLTIP;The 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_LOGCOLORFL;Colorfulness (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_LOGCONTL;Contrast (J) +TP_LOCALLAB_LOGCONTHRES;Contrast threshold (J & Q) 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_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.\nTakes into account exposure compensation in the main-menu Exposure tab.\nAlso calculates the absolute luminance at the time of shooting. -TP_LOCALLAB_LOGIMAGE_TOOLTIP;Takes into account corresponding Ciecam variables (mainly Contrast 'J' and Saturation 's', and also 'advanced' Contrast 'Q' , Brightness 'Q', Lightness (J), Colorfulness (M)). +TP_LOCALLAB_LOGIMAGE_TOOLTIP;Takes into account corresponding Ciecam variables (mainly Contrast 'J' and Saturation 's', and also Contrast (Q) , Brightness (Q), Lightness (J), Colorfulness (M) in Advanced mode). TP_LOCALLAB_LOGLIGHTL;Lightness (J) TP_LOCALLAB_LOGLIGHTL_TOOLTIP;Close to lightness (L*a*b*), takes into account the increase in perceived coloration. TP_LOCALLAB_LOGLIGHTQ;Brightness (Q) @@ -2814,30 +2825,30 @@ TP_LOCALLAB_LOGREPART_TOOLTIP;Allows you to adjust the relative strength of the 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 and highlights tones TP_LOCALLAB_LOGSCENE_TOOLTIP;Corresponds to the shooting conditions. TP_LOCALLAB_LOGSRCGREY_TOOLTIP;Estimated gray point value of the image. -TP_LOCALLAB_LOGSURSOUR_TOOLTIP;Changes tones and colors to take into account the Scene conditions.\n\nAverage: Average light environment (standard). The image will not change.\n\nDim: Dim environment. The image will become slightly bright. +TP_LOCALLAB_LOGSURSOUR_TOOLTIP;Changes tones and colors to take into account the Scene conditions.\n\nAverage: Average light environment (standard). The image will not change.\n\nDim: Dim environment. The image will become slightly brighter.\n\nDark: Dark environment. The image will become more bright. TP_LOCALLAB_LOGTARGGREY_TOOLTIP;You can adjust this value to suit. TP_LOCALLAB_LOGVIEWING_TOOLTIP;Corresponds to the medium on which the final image will be viewed (monitor, TV, projector, printer,..), as well as its environment. -TP_LOCALLAB_LOG_TOOLNAME;Log Encoding - 0 -TP_LOCALLAB_LUM;Curves LL - CC +TP_LOCALLAB_LOG_TOOLNAME;Log Encoding +TP_LOCALLAB_LUM;LL - CC TP_LOCALLAB_LUMADARKEST;Darkest -TP_LOCALLAB_LUMASK;Background color for luminance and color masks +TP_LOCALLAB_LUMASK;Background color/luma mask TP_LOCALLAB_LUMASK_TOOLTIP;Adjusts the shade of gray or color of the mask background in Show Mask (Mask and modifications) TP_LOCALLAB_LUMAWHITESEST;Lightest TP_LOCALLAB_LUMFRA;L*a*b* standard TP_LOCALLAB_LUMONLY;Luminance only TP_LOCALLAB_MASFRAME;Mask and Merge -TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTakes into account the deltaE image to avoid modifying the selection area when the following Mask Tools are used: Gamma , Slope , Chroma, Contrast curve , Local contrast (by wavelet level), Blur Mask and Structure Mask (if enabled ) .\nDisabled when Inverse mode is used -TP_LOCALLAB_MASK;Contrast +TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTakes into account the deltaE image to avoid modifying the selection area when the following Mask Tools are used: Gamma, Slope, Chroma, Contrast curve, Local contrast (by wavelet level), Blur Mask and Structure Mask (if enabled ).\nDisabled when Inverse mode is used. +TP_LOCALLAB_MASK;Curves TP_LOCALLAB_MASK2;Contrast curve -TP_LOCALLAB_MASKCOL;Mask Curves +TP_LOCALLAB_MASKCOL; TP_LOCALLAB_MASKCOM;Common Color Mask -TP_LOCALLAB_MASKCOM_TOOLNAME;Common Color Mask - 13 +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_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_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_MASKH;Hue curve -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 settings 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;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_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 if 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_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 @@ -2850,33 +2861,35 @@ 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_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_MASKDEINV_TOOLTIP;Reverses the way the algorithm interprets the mask.\nIf checked black and very light areas will be decreased. -TP_LOCALLAB_MASKHIGTHRESC_TOOLTIP;Light-tone limit above which Color and Light 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 wavelet’.\n Use a ‘lockable color picker’ on the mask to see which areas will be affected. Be carefull in 'settings' to Background color mask = 0 -TP_LOCALLAB_MASKHIGTHRESS_TOOLTIP;Light-tone limit above which Shadows Highlights will be restored progressively to their original values prior to being modified by the Shadows Highlights 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. Be carefull in 'settings' to Background color mask = 0 -TP_LOCALLAB_MASKHIGTHRESCB_TOOLTIP;Light-tone limit above which CBDL (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. Be carefull in 'settings' to Background color mask = 0 -TP_LOCALLAB_MASKHIGTHRESRETI_TOOLTIP;Light-tone limit above which Retinex (Luminance only) will be restored progressively to their original values prior to being modified by the Retinex 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. Be carefull in 'settings' to Background color mask = 0 -TP_LOCALLAB_MASKHIGTHRESTM_TOOLTIP;Light-tone limit above which Tone Mapping will be restored progressively to their original values prior to being modified by the Tone Mapping 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. Be carefull in 'settings' to Background color mask = 0 -TP_LOCALLAB_MASKHIGTHRESVIB_TOOLTIP;Light-tone limit above which Vibrance and Warm Cool 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. Be carefull in 'settings' to Background color mask = 0 -TP_LOCALLAB_MASKHIGTHRESWAV_TOOLTIP;Light-tone limit above which Local contrast and Wavelet 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. Be carefull in 'settings' to Background color mask = 0 -TP_LOCALLAB_MASKHIGTHRESE_TOOLTIP;Light-tone limit above which 'Dynamic range and Exposure' will be restored progressively to their original values prior to being modified by the 'Dynamic range and Exposure' 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. Be carefull in 'settings' to Background color mask = 0 -TP_LOCALLAB_MASKHIGTHRESL_TOOLTIP;Light-tone limit above which Log encoding will be restored progressively to their original values prior to being modified by the Log encoding settings .\n You can use certain tools in ‘Mask and modifications’ to change the gray levels:‘Smooth radius’, ‘Contrast curve’.\n Use a ‘lockable color picker’ on the mask to see which areas will be affected. Be carefull in 'settings' to Background color mask = 0 -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 wavelet’.\n Use a ‘lockable color picker’ on the mask to see which areas will be affected. Be carefull in 'settings' to Background color mask = 0 +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_MASKHIGTHRESS_TOOLTIP;Lighter-tone limit above which the parameters will be restored progressively to their original values prior to being modified by the Shadows Highlights 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_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’.\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_MASKHIGTHRESRETI_TOOLTIP;Lighter-tone limit above which Retinex (Luminance only) parameters will be restored progressively to their original values prior to being modified by the Retinex 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_MASKHIGTHRESTM_TOOLTIP;Lighter-tone limit above which the parameters will be restored progressively to their original values prior to being modified by the Tone Mapping 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_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_MASKHIGTHRESE_TOOLTIP;Lighter-tone limit above which the parameters will be restored progressively to their original values prior to being modified by the 'Dynamic range and Exposure' 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 colorpicker’ on the mask to see which areas will be affected. Make sure you set ‘Background color mask’ = 0 in Settings. +TP_LOCALLAB_MASKHIGTHRESL_TOOLTIP;Lighter-tone limit above which the parameters will be restored progressively to their original values prior to being modified by the Log encoding settings.\n You can use certain tools in ‘Mask and modifications’ to change the gray levels:‘Smooth radius’, ‘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_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. 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. Be carefull in 'settings' to Background color mask = 0 TP_LOCALLAB_MASKLCTHR;Light area luminance threshold +TP_LOCALLAB_MASKLCTHR2;Light area luma threshold TP_LOCALLAB_MASKLCTHRLOW;Dark area luminance threshold -TP_LOCALLAB_MASKLNOISELOW;Reinforce denoise in dark and light areas -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 wavelet’.\n Use a ‘lockable color picker’ on the mask to see which areas will be affected. Be carefull in 'settings' to Background color mask = 0 -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 wavelet’.\n Use a ‘lockable color picker’ on the mask to see which areas will be affected. Be carefull in 'settings' to Background color mask = 0 -TP_LOCALLAB_MASKLOWTHRESC_TOOLTIP;Dark-tone limit below which Color and Light 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 wavelet’.\n Use a ‘lockable color picker’ on the mask to see which areas will be affected. Be carefull in 'settings' to Background color mask = 0 -TP_LOCALLAB_MASKLOWTHRESL_TOOLTIP;Dark-tone limit below which Log encoding will be restored progressively to their original values prior to being modified by the Log encoding settings.\n You can use certain tools in ‘Mask and modifications’ to change the gray levels:‘Smooth radius’, ‘Contrast curve’.\n Use a ‘lockable color picker’ on the mask to see which areas will be affected. Be carefull in 'settings' to Background color mask = 0 -TP_LOCALLAB_MASKLOWTHRESE_TOOLTIP;Dark-tone limit below which 'Dynamic range and Exposure' will be restored progressively to their original values prior to being modified by the 'Dynamic range and Exposure' 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. Be carefull in 'settings' to Background color mask = 0 -TP_LOCALLAB_MASKLOWTHRESS_TOOLTIP;Dark-tone limit below which Shadows Highligts will be restored progressively to their original values prior to being modified by the Shadows Highlights 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. Be carefull in 'settings' to Background color mask = 0 -TP_LOCALLAB_MASKLOWTHRESCB_TOOLTIP;Dark-tone limit below which CBDL (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. Be carefull in 'settings' to Background color mask = 0 -TP_LOCALLAB_MASKLOWTHRESRETI_TOOLTIP;Dark-tone limit below which Retinex (Luminance only) will be restored progressively to their original values prior to being modified by the Retinex 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. Be carefull in 'settings' to Background color mask = 0 -TP_LOCALLAB_MASKLOWTHRESTM_TOOLTIP;Dark-tone limit below which Tone Mapping will be restored progressively to their original values prior to being modified by the Tone Mapping 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. Be carefull in 'settings' to Background color mask = 0 -TP_LOCALLAB_MASKLOWTHRESVIB_TOOLTIP;Dark-tone limit below which Vibrance and Warm Cool 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. Be carefull in 'settings' to Background color mask = 0 -TP_LOCALLAB_MASKLOWTHRESWAV_TOOLTIP;Dark-tone limit below which Local contrast and Wavelet 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. Be carefull in 'settings' to Background color mask = 0 -TP_LOCALLAB_MASKLCTHRMID;Gray area luminance denoise -TP_LOCALLAB_MASKLCTHRMIDCH;Gray area chrominance denoise +TP_LOCALLAB_MASKLCTHRLOW2;Dark area luma threshold +TP_LOCALLAB_MASKLNOISELOW;Reinforce dark/light areas +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_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. +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_MASKLOWTHRESL_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Log encoding settings.\n You can use certain tools in ‘Mask and modifications’ to change the gray levels:‘Smooth radius’, ‘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_MASKLOWTHRESE_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the 'Dynamic range and Exposure' 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_MASKLOWTHRESS_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Shadows Highlights 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_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_MASKLOWTHRESRETI_TOOLTIP;Dark-tone limit below which the Retinex (Luminance only) parameters will be restored progressively to their original values prior to being modified by the Retinex 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_MASKLOWTHRESTM_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Tone Mapping 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_MASKLOWTHRESVIB_TOOLTIP;Dark-tone limit below 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_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_MASKLCTHRMID;Gray area luma denoise +TP_LOCALLAB_MASKLCTHRMIDCH;Gray area chroma denoise TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications) TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications) TP_LOCALLAB_MASKRECOTHRES;Recovery threshold @@ -2892,19 +2905,19 @@ TP_LOCALLAB_MERELE;Lighten only TP_LOCALLAB_MERFIV;Addition TP_LOCALLAB_MERFOR;Color Dodge TP_LOCALLAB_MERFOU;Multiply -TP_LOCALLAB_MERGE1COLFRA;Merge with Original or Previous or Background -TP_LOCALLAB_MERGECOLFRA;Mask: LCH & Structure -TP_LOCALLAB_MERGECOLFRMASK_TOOLTIP;Allows you to create masks based on the 3 LCH curves and/or a structure-detection algorithm -TP_LOCALLAB_MERGEFIV;Previous Spot(Mask 7) + Mask LCH +TP_LOCALLAB_MERGE1COLFRA;Merge with Original/Previous/Background +TP_LOCALLAB_MERGECOLFRA;Mask: LCh & Structure +TP_LOCALLAB_MERGECOLFRMASK_TOOLTIP;Allows you to create masks based on the 3 LCh curves and/or a structure-detection algorithm +TP_LOCALLAB_MERGEFIV;Previous Spot(Mask 7) + Mask LCh TP_LOCALLAB_MERGEFOU;Previous Spot(Mask 7) TP_LOCALLAB_MERGEMER_TOOLTIP;Takes ΔE into account when merging files (equivalent of scope in this case) TP_LOCALLAB_MERGENONE;None TP_LOCALLAB_MERGEONE;Short Curves 'L' Mask TP_LOCALLAB_MERGEOPA_TOOLTIP;Opacity = % of current spot to be merged with original or previous Spot.\nContrast threshold : adjusts result as a function of contrast in original image. -TP_LOCALLAB_MERGETHR;Original(Mask 7) + Mask LCH -TP_LOCALLAB_MERGETWO;Original(Mask 7) +TP_LOCALLAB_MERGETHR;Original + Mask LCh +TP_LOCALLAB_MERGETWO;Original TP_LOCALLAB_MERGETYPE;Merge image and mask -TP_LOCALLAB_MERGETYPE_TOOLTIP;None, use all mask in LCH mode.\nShort curves 'L' mask, use a short circuit for mask 2, 3, 4, 6, 7.\nOriginal mask 8, blend current image with original +TP_LOCALLAB_MERGETYPE_TOOLTIP;None, use all mask in LCh mode.\nShort curves 'L' mask, use a short circuit for mask 2, 3, 4, 6, 7.\nOriginal mask 8, blend current image with original TP_LOCALLAB_MERHEI;Overlay TP_LOCALLAB_MERHUE;Hue TP_LOCALLAB_MERLUCOL;Luminance @@ -2923,7 +2936,7 @@ 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_MLABEL;Restored data Min=%1 Max=%2 (Clip - Offset) +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 TP_LOCALLAB_MODE_NORMAL;Standard @@ -2940,7 +2953,7 @@ TP_LOCALLAB_NLDENOISENLPAT_TOOLTIP;Use this slider to adapt the amount of denois TP_LOCALLAB_NLDENOISENLRAD_TOOLTIP;Higher values increase denoise at the expense of processing time. TP_LOCALLAB_NLDENOISENLGAM_TOOLTIP;Lower values preserve details and texture, higher values increase denoise. 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.\nRT-Spot size must be greater than 150x150 pixels (Output). +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_NLLUM;Strength TP_LOCALLAB_NLDET;Detail recovery TP_LOCALLAB_NLGAM;Gamma @@ -2948,12 +2961,12 @@ TP_LOCALLAB_NLPAT;Maximum patch size TP_LOCALLAB_NLRAD;Maximum radius size TP_LOCALLAB_NOISECHROCOARSE;Coarse chroma (Wav) TP_LOCALLAB_NOISECHROC_TOOLTIP;If superior to zero, high quality algorithm is enabled.\nCoarse is for slider >=0.02 -TP_LOCALLAB_NOISECHRODETAIL;Chroma detail recovery (DCT ƒ) +TP_LOCALLAB_NOISECHRODETAIL;Chroma detail recovery TP_LOCALLAB_NOISECHROFINE;Fine chroma (Wav) TP_LOCALLAB_NOISEDETAIL_TOOLTIP;Disabled if slider = 100 TP_LOCALLAB_NOISELEQUAL;Equalizer white-black TP_LOCALLAB_NOISELUMCOARSE;Luminance coarse (Wav) -TP_LOCALLAB_NOISELUMDETAIL;Luminance detail recovery (DCT ƒ) +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) @@ -2990,6 +3003,12 @@ TP_LOCALLAB_RECURS_TOOLTIP;Forces the algorithm to recalculate the references af TP_LOCALLAB_REFLABEL;Ref. (0..1) Chroma=%1 Luma=%2 Hue=%3 TP_LOCALLAB_REN_DIALOG_LAB;Enter the new Control Spot name TP_LOCALLAB_REN_DIALOG_NAME;Renaming Control Spot +TP_LOCALLAB_REPARW_TOOLTIP;Allows you to adjust the relative strength of the local contrast and wavelet image with respect to the original image. +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_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_REPAREXP_TOOLTIP;Allows you to adjust the relative strength of the Dynamic Range and Exposure 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_RESETSHOW;Reset All Show Modifications TP_LOCALLAB_RESID;Residual Image TP_LOCALLAB_RESIDBLUR;Blur residual image @@ -3011,7 +3030,7 @@ TP_LOCALLAB_RETI_LIMDOFFS_TOOLTIP;Adjusts the internal parameters to optimize th 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 - 9 +TP_LOCALLAB_RET_TOOLNAME;Dehaze & Retinex TP_LOCALLAB_REWEI;Reweighting iterates TP_LOCALLAB_RGB;RGB Tone Curve TP_LOCALLAB_RGBCURVE_TOOLTIP;In RGB mode you have 4 choices : Standard, Weighted standard, Luminance & Film-like. @@ -3034,8 +3053,8 @@ TP_LOCALLAB_SETTINGS;Settings TP_LOCALLAB_SH1;Shadows Highlights TP_LOCALLAB_SH2;Equalizer TP_LOCALLAB_SHADEX;Shadows -TP_LOCALLAB_SHADEXCOMP;Shadow compression & tonal width -TP_LOCALLAB_SHADHIGH;Shadows/Highlights-Equalizer +TP_LOCALLAB_SHADEXCOMP;Shadow compression +TP_LOCALLAB_SHADHIGH;Shadows/Highlights & Tone Equalizer 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. @@ -3048,7 +3067,7 @@ TP_LOCALLAB_SHARDAMPING;Damping TP_LOCALLAB_SHARFRAME;Modifications TP_LOCALLAB_SHARITER;Iterations TP_LOCALLAB_SHARP;Sharpening -TP_LOCALLAB_SHARP_TOOLNAME;Sharpening - 8 +TP_LOCALLAB_SHARP_TOOLNAME;Sharpening TP_LOCALLAB_SHARRADIUS;Radius TP_LOCALLAB_SHORTC;Short Curves 'L' Mask 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 @@ -3066,7 +3085,8 @@ TP_LOCALLAB_SHOWMASKSOFT_TOOLTIP;Allows you to visualize the different stages of TP_LOCALLAB_SHOWMASKTYP1;Blur & Noise TP_LOCALLAB_SHOWMASKTYP2;Denoise TP_LOCALLAB_SHOWMASKTYP3;Blur & Noise + Denoise -TP_LOCALLAB_SHOWMASKTYP_TOOLTIP;Mask and modifications can be chosen.\nBlur and noise : in this case it is not used for 'denoise'.\nDenoise : in this case it is not used for 'blur and noise'.\n\nBlur and noise + denoise : mask is shared, be carefull to 'show modifications' and 'scope' +//TP_LOCALLAB_SHOWMASKTYP_TOOLTIP;Mask and modifications can be chosen.\nBlur and noise : in this case it is not used for 'denoise'.\nDenoise : in this case it is not used for 'blur and noise'.\n\nBlur and noise + denoise : mask is shared, be carefull to 'show modifications' and 'scope' +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 @@ -3077,17 +3097,17 @@ 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_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 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 - 5 +TP_LOCALLAB_SH_TOOLNAME;Shadows/Highlights & Tone Equalizer TP_LOCALLAB_SIGMAWAV;Attenuation response TP_LOCALLAB_SIM;Simple TP_LOCALLAB_SLOMASKCOL;Slope -TP_LOCALLAB_SLOMASK_TOOLTIP;Gamma and Slope allow a soft and artifact-free transformation of the mask by progressively modifying “L” to avoid any discontinuities. +TP_LOCALLAB_SLOMASK_TOOLTIP;Adjusting Gamma and Slope can provide a soft and artifact-free transformation of the mask by progressively modifying ‘L’ to avoid any discontinuities. TP_LOCALLAB_SLOSH;Slope TP_LOCALLAB_SOFT;Soft Light & Original Retinex TP_LOCALLAB_SOFTM;Soft Light @@ -3096,12 +3116,12 @@ TP_LOCALLAB_SOFTRADIUSCOL;Soft radius TP_LOCALLAB_SOFTRADIUSCOL_TOOLTIP;Applies a guided filter to the output image to reduce possible artifacts. TP_LOCALLAB_SOFTRETI;Reduce ΔE artifacts TP_LOCALLAB_SOFTRETI_TOOLTIP;Take into account deltaE to improve Transmission map -TP_LOCALLAB_SOFT_TOOLNAME;Soft Light & Original Retinex - 6 +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_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 @@ -3116,9 +3136,9 @@ TP_LOCALLAB_STRRETI_TOOLTIP;if Strength Retinex < 0.2 only Dehaze is enabled.\ni TP_LOCALLAB_STRUC;Structure TP_LOCALLAB_STRUCCOL;Spot structure TP_LOCALLAB_STRUCCOL1;Spot structure -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_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_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 1 (Blur and denoise") and mask 7 (Color & Light). +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_TOOLTIP;You can choose between:\nSymmetrical - left handle linked to right, top handle linked to bottom.\nIndependent - all handles are independent. @@ -3129,7 +3149,7 @@ TP_LOCALLAB_THRES;Threshold structure TP_LOCALLAB_THRESDELTAE;ΔE scope threshold TP_LOCALLAB_THRESRETI;Threshold TP_LOCALLAB_THRESWAV;Balance threshold -TP_LOCALLAB_TLABEL;TM Data Min=%1 Max=%2 Mean=%3 Sigma=%4 (Threshold) +TP_LOCALLAB_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sig=%4 TP_LOCALLAB_TLABEL2;TM Effective Tm=%1 TM=%2 TP_LOCALLAB_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nTm=Min TM=Max of Transmission Map.\nYou can normalize the results with the threshold slider. TP_LOCALLAB_TM;Tone Mapping @@ -3139,11 +3159,12 @@ TP_LOCALLAB_TONEMAPGAM_TOOLTIP;The Gamma slider shifts the tone-mapping effect t 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 - 4 +TP_LOCALLAB_TONE_TOOLNAME;Tone Mapping TP_LOCALLAB_TOOLCOL;Structure mask as tool TP_LOCALLAB_TOOLCOLFRMASK_TOOLTIP;Allows you to modify the mask, if one exists TP_LOCALLAB_TOOLMASK;Mask Tools -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_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_TRANSITGRAD_TOOLTIP;Allows you to vary the y-axis transition @@ -3158,9 +3179,9 @@ TP_LOCALLAB_USEMASK;Laplacian TP_LOCALLAB_VART;Variance (contrast) TP_LOCALLAB_VIBRANCE;Vibrance & Warm/Cool TP_LOCALLAB_VIBRA_TOOLTIP;Adjusts vibrance (essentially the same as the global adjustment).\nCarries out the equivalent of a white-balance adjustment using a CIECAM algorithm. -TP_LOCALLAB_VIB_TOOLNAME;Vibrance & Warm/Cool - 3 +TP_LOCALLAB_VIB_TOOLNAME;Vibrance & Warm/Cool TP_LOCALLAB_VIS_TOOLTIP;Click to show/hide selected Control Spot.\nCtrl+click to show/hide all Control Spot. -TP_LOCALLAB_WAMASKCOL;Ψ Mask Wavelet level +TP_LOCALLAB_WAMASKCOL;Mask Wavelet level TP_LOCALLAB_WARM;Warm/Cool & Color artifacts TP_LOCALLAB_WARM_TOOLTIP;This slider uses the CIECAM algorithm and acts as a White Balance control to make the color temperature of the selected area warmer or cooler.\nIt can also reduce color artifacts in some cases. TP_LOCALLAB_WASDEN_TOOLTIP;Luminance noise reduction: the left-hand side of the curve including the dark-gray/light-gray boundary corresponds to the first 3 levels 0, 1, 2 (fine detail). The right hand side of the curve corresponds to the coarser details (level 3, 4, 5, 6). @@ -3168,24 +3189,24 @@ TP_LOCALLAB_WAT_BALTHRES_TOOLTIP;Balances the action within each level. TP_LOCALLAB_WAT_BLURLC_TOOLTIP;The default blur setting affects all 3 L*a* b* components (luminance and colour).\nWhen checked, only luminance is blurred. TP_LOCALLAB_WAT_CLARIC_TOOLTIP;“Merge chroma” is used to select the intensity of the desired effect on chrominance. TP_LOCALLAB_WAT_CLARIL_TOOLTIP;“Merge luma” is used to select the intensity of the desired effect on luminance. -TP_LOCALLAB_WAT_CONTCHROMALEV_TOOLTIP;“Chroma levels”: adjusts the “a” and “b” components of Lab* as a proportion of the luminance value. -TP_LOCALLAB_WAT_CONTOFFSET_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_LOCALLAB_WAT_CONTCHROMALEV_TOOLTIP;‘Chroma levels’: adjusts the “a” and “b” components of Lab* as a proportion of the luminance value. +TP_LOCALLAB_WAT_CONTOFFSET_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_LOCALLAB_WAT_DELTABAL_TOOLTIP;By moving the slider to the left, the lower levels are accentuated. To the right, the lower levels are reduced and the higher levels accentuated. TP_LOCALLAB_WAT_EXPRESID_TOOLTIP;The residual image behaves in the same way as the main image when making adjustments to contrast, chroma etc. TP_LOCALLAB_WAT_GRADW_TOOLTIP;The more you move the slider to the right, the more effective the detection algorithm will be and the less noticeable the effects of local contrast. TP_LOCALLAB_WAT_LEVELLOCCONTRAST_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_LOCCONTRASTEDG_TOOLTIP;You can adjust the distribution of local contrast by wavelet level based on the initial intensity of the contrast. This will modify the effects of perspective and relief in the image, and/or reduce the contrast values for very low initial contrast levels. -TP_LOCALLAB_WAT_ORIGLC_TOOLTIP;“Merge only with original image”, prevents the “Wavelet Pyramid” settings from interfering with “Clarity” and “Sharp mask”. +TP_LOCALLAB_WAT_ORIGLC_TOOLTIP;‘Merge only with original image’, prevents the ‘Wavelet Pyramid’ settings from interfering with ‘Clarity’ and ‘Sharp mask’. TP_LOCALLAB_WAT_RESIDBLUR_TOOLTIP;Blurs the residual image, independent of the levels. TP_LOCALLAB_WAT_RESIDCOMP_TOOLTIP;Compresses the residual image to increase or reduce contrast. TP_LOCALLAB_WAT_SIGMALC_TOOLTIP;The effect of the local contrast adjustment is stronger for medium-contrast details, and weaker for high and low-contrast details.\n This slider controls how quickly the effect dampens towards the extreme contrasts.\nThe higher the value of the slider, the wider the range of contrasts that will receive the full effect of the local contrast adjustment, and the higher the risk of generating artifacts.\nThe lower the value, the more the effect will be pinpointed towards a narrow range of contrast values. TP_LOCALLAB_WAT_STRENGTHW_TOOLTIP;Intensity of edge-effect detection. TP_LOCALLAB_WAT_STRWAV_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_WAT_THRESHOLDWAV_TOOLTIP;Range of wavelet levels used throughout the "Wavelets" module. +TP_LOCALLAB_WAT_THRESHOLDWAV_TOOLTIP;Range of wavelet levels used throughout the ‘Wavelets’ module. TP_LOCALLAB_WAT_WAVBLURCURV_TOOLTIP;Allows you to blur each level of decomposition.\nThe finest to coarsest levels of decomposition are from left to right. TP_LOCALLAB_WAT_WAVCBDL_TOOLTIP;Similar to Contrast By Detail Levels. Fine to coarse detail levels from left to right on the x-axis. TP_LOCALLAB_WAT_WAVDELTABAL_TOOLTIP;Acts on the balance of the three directions (horizontal, vertical and diagonal) based on the luminance of the image.\nBy default the shadows or highlights are reduced to avoid artifacts. -TP_LOCALLAB_WAT_WAVESHOW_TOOLTIP;Shows all of the "Edge sharpness" tools. It is advisable to read the Wavelet Levels documentation. +TP_LOCALLAB_WAT_WAVESHOW_TOOLTIP;Shows all of the ‘Edge sharpness’ tools. It is advisable to read the Wavelet Levels documentation. 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. @@ -3197,19 +3218,20 @@ TP_LOCALLAB_WAVCOMPRE_TOOLTIP;Allows you to apply tone mapping or reduce local c 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_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 by level -TP_LOCALLAB_WAVE;Ψ Wavelets +TP_LOCALLAB_WAVDEN;Luminance denoise +TP_LOCALLAB_WAVE;Wavelets TP_LOCALLAB_WAVEDG;Local contrast TP_LOCALLAB_WAVEEDG_TOOLTIP;Improves sharpness by targeting the action of local contrast on the edges. It has the same functions as the corresponding module in Wavelet Levels and uses the same settings. -TP_LOCALLAB_WAVEMASK_LEVEL_TOOLTIP;Range of wavelet levels used in “Local contrast (by wavelet level)” +TP_LOCALLAB_WAVEMASK_LEVEL_TOOLTIP;Range of wavelet levels used in ‘Local contrast’ (by wavelet level). TP_LOCALLAB_WAVGRAD_TOOLTIP;Allows the local contrast to be varied according to a chosen gradient and angle. The variation of the luminance signal is taken into account and not the luminance. -TP_LOCALLAB_WAVHIGH;Ψ Wavelet high +TP_LOCALLAB_WAVHIGH;Wavelet high TP_LOCALLAB_WAVHUE_TOOLTIP;Allows you to reduce or increase the denoise based on hue. TP_LOCALLAB_WAVLEV;Blur by level -TP_LOCALLAB_WAVLOW;Ψ Wavelet low -TP_LOCALLAB_WAVMASK;Ψ Local contrast (by wavelet level) +TP_LOCALLAB_WAVLOW;Wavelet low +TP_LOCALLAB_WAVMASK;Local contrast TP_LOCALLAB_WAVMASK_TOOLTIP;Uses wavelets to modify the local contrast of the mask and reinforce or reduce the structure (skin, buildings...) -TP_LOCALLAB_WAVMED;Ψ Wavelet normal +//TP_LOCALLAB_WAVMED;Ψ Wavelet normal +TP_LOCALLAB_WAVMED;Wavelet normal TP_LOCALLAB_WEDIANHI;Median Hi TP_LOCALLAB_WHITE_EV;White Ev TP_LOCAL_HEIGHT;Bottom @@ -3558,7 +3580,7 @@ TP_WAVELET_BACUR;Curve 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. TP_WAVELET_BALCHRO;Chroma balance -TP_WAVELET_BALCHROM;Denoise equalizer Blue-Yellow/Red-Green +TP_WAVELET_BALCHROM;Equalizer Color TP_WAVELET_BALCHRO_TOOLTIP;If enabled, the 'Contrast balance' curve or slider also modifies chroma balance. TP_WAVELET_BALLUM;Denoise equalizer White-Black TP_WAVELET_BANONE;None @@ -3633,9 +3655,9 @@ TP_WAVELET_DENCURV;Curve TP_WAVELET_DENEQUAL;1 2 3 4 Equal TP_WAVELET_DENH;Threshold TP_WAVELET_DENL;Correction structure -TP_WAVELET_DENLH;Guided threshold by detail levels 1-4 +TP_WAVELET_DENLH;Guided threshold levels 1-4 TP_WAVELET_DENLOCAL_TOOLTIP;Use a curve in order to guide the denoising according to the local contrast.\nThe areas are denoised, the structures are maintained -TP_WAVELET_DENMIX_TOOLTIP;Balances the action of the guide taking into account the original image and the denoised image +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 @@ -3718,7 +3740,7 @@ TP_WAVELET_MEDILEV;Edge detection TP_WAVELET_MEDILEV_TOOLTIP;When you enable Edge Detection, it is recommanded:\n- to disabled low contrast levels to avoid artifacts,\n- to use high values of gradient sensitivity.\n\nYou can modulate the strength with 'refine' from Denoise and Refine. TP_WAVELET_MERGEC;Merge chroma TP_WAVELET_MERGEL;Merge luma -TP_WAVELET_MIXCONTRAST;Reference local contrast +TP_WAVELET_MIXCONTRAST;Reference TP_WAVELET_MIXDENOISE;Denoise TP_WAVELET_MIXMIX;Mixed 50% noise - 50% denoise TP_WAVELET_MIXMIX70;Mixed 30% noise - 70% denoise @@ -3775,7 +3797,7 @@ TP_WAVELET_STREND;Strength TP_WAVELET_STRENGTH;Strength TP_WAVELET_SUPE;Extra TP_WAVELET_THR;Shadows threshold -TP_WAVELET_THRDEN_TOOLTIP;Generates a stepped curve in order to guide the denoising according to the local contrast.\nThe areas are denoised, the structures are maintained +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_THRESHOLD;Finer levels TP_WAVELET_THRESHOLD2;Coarser levels @@ -3865,4 +3887,4 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nShortcut: - //TP_LOCALLAB_CIECAMLOG_TOOLTIP;This module is based on the CIECAM color appearance model which was designed to better simulate how human vision perceives colors under different lighting conditions.\nOnly the third Ciecam process (Viewing conditions - Target) is taken into account, as well as part of the second (contrast J, saturation s) , as well as some data from the first process (Scene conditions - Source) which is used for the Log encoding.\nIt also adapts the output to the intended viewing conditions (monitor, TV, projector, printer, etc.) so that the chromatic and contrast appearance is preserved across the display environment. //TP_WAVELET_DENH;Low levels (1234)- Finest details //TP_WAVELET_DENL;High levels - Coarsest details -//TP_WAVELET_DENLH;Guided threshold by detail levels 1-4 +//TP_WAVELET_DENLH;Guided threshold for detail levels 1-4 diff --git a/rtdata/profiles/Film Negative - Black and White.pp3 b/rtdata/profiles/Film Negative - Black and White.pp3 new file mode 100644 index 000000000..ad2a38e1e --- /dev/null +++ b/rtdata/profiles/Film Negative - Black and White.pp3 @@ -0,0 +1,41 @@ +[Exposure] +Auto=false +Compensation=0 +HistogramMatching=false +CurveFromHistogramMatching=false +ClampOOG=false +CurveMode=Standard +CurveMode2=Standard +Curve=1;0;0;0.88544601940051371;1; +Curve2=1;0;0;0.0397505754145333;0.020171771436200074;0.54669745433149319;0.69419974733677647;1;1; + +[HLRecovery] +Enabled=false +Method=Blend + +[Black & White] +Enabled=true + +[Crop] +FixedRatio=false + +[Color Management] +InputProfile=(camera) +ToneCurve=false +ApplyLookTable=false +ApplyHueSatMap=false +WorkingProfile=Rec2020 +WorkingTRC=none + +[RAW Bayer] +Method=rcd + +[Film Negative] +Enabled=true +RedRatio=1.0 +GreenExponent=1.5 +BlueRatio=1.0 +ColorSpace=1 +RefInput=0;0;0; +RefOutput=0;0;0; +BackCompat=0 diff --git a/rtengine/FTblockDN.cc b/rtengine/FTblockDN.cc index 474196843..400dea05b 100644 --- a/rtengine/FTblockDN.cc +++ b/rtengine/FTblockDN.cc @@ -667,7 +667,7 @@ BENCHFUN const float gain = std::pow(2.0, expcomp); 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); + const float noisevar_Ldetail = SQR((SQR(100. - params_Ldetail) + 50.0 * (100.0 - params_Ldetail)) * TS * 0.5); array2D tilemask_in(TS, TS); array2D tilemask_out(TS, TS); diff --git a/rtengine/camconst.json b/rtengine/camconst.json index d0947cc69..7c3e2818d 100644 --- a/rtengine/camconst.json +++ b/rtengine/camconst.json @@ -526,8 +526,8 @@ Camera constants: } }, - { // Quality B, some missing scaling factors are safely guessed - "make_model": "Canon EOS 6D Mark II", + { // Quality B, some missing scaling factors are safely guessed; assuming the RP is the same as the 6DII because they share sensors + "make_model": [ "Canon EOS 6D Mark II", "Canon EOS RP" ], "dcraw_matrix": [ 6875,-970,-932,-4691,12459,2501,-874,1953,5809 ], // DNG v_9.12 D65 "raw_crop": [ 120, 44, 6264, 4180 ], // fullraw size 6384x4224 useful 120,44,6264x4180 // "raw_crop": [ 128, 52, 6248, 4168 ], // official jpeg crop 120+12,44+12,6240x4160 @@ -873,8 +873,8 @@ Camera constants: } }, - { // Quality A, only one scaling factor missing and guessed safely, EOS 700D not tested but available samples look same as 650D - "make_model": [ "Canon EOS 650D", "Canon EOS Rebel T4i", "Canon EOS Kiss X6i", "Canon EOS 700D", "Canon EOS Rebel T5i", "Canon EOS Kiss X7i" ], + { // Quality A, only one scaling factor missing and guessed safely, EOS 700D not tested but available samples look same as 650D, EOS 100D shares sensor and came out the same time as the 700D + "make_model": [ "Canon EOS 650D", "Canon EOS Rebel T4i", "Canon EOS Kiss X6i", "Canon EOS 700D", "Canon EOS Rebel T5i", "Canon EOS Kiss X7i", "Canon EOS 100D", "Canon EOS Rebel SL1", "Canon EOS Kiss X7" ], "dcraw_matrix": [ 6602,-841,-939,-4472,12458,2247,-975,2039,6148 ], "ranges": { "white": [ @@ -1308,8 +1308,8 @@ Camera constants: }, { // Quality C - "make_model": "FUJIFILM GFX 100", - "dcraw_matrix" : [16212, -8423, -1583, -4336, 12583, 1937, -195, 726, 6199], // taken from ART + "make_model": [ "FUJIFILM GFX 100", "FUJIFILM GFX100S" ], + "dcraw_matrix" : [ 16212, -8423, -1583, -4336, 12583, 1937, -195, 726, 6199 ], // taken from ART "raw_crop": [ 0, 2, 11664, 8734 ] }, @@ -1423,6 +1423,11 @@ Camera constants: "ranges": { "white": 16100 } }, + { // Quality C + "make_model": "FUJIFILM X-E4", + "raw_crop": [ 0, 5, 6252, 4126 ] + }, + { // Quality B, samples provided by Daniel Catalina #5824 "make_model": "FUJIFILM X-T2", "dcraw_matrix": [ 11434,-4948,-1210,-3746,12042,1903,-666,1479,5235 ], // DNG_v9.4 D65 diff --git a/rtengine/canon_cr3_decoder.cc b/rtengine/canon_cr3_decoder.cc index e3097ad2e..ddd4b6172 100644 --- a/rtengine/canon_cr3_decoder.cc +++ b/rtengine/canon_cr3_decoder.cc @@ -843,7 +843,7 @@ inline void crxFillBuffer(CrxBitstream* bitStrm) #endif if (bitStrm->curBufSize < 1) { // nothing read - throw std::exception(); + throw std::runtime_error("Unexpected end of file in CRX bitstream"); } bitStrm->mdatSize -= bitStrm->curBufSize; diff --git a/rtengine/ciecam02.cc b/rtengine/ciecam02.cc index dff12aa02..da452c89b 100644 --- a/rtengine/ciecam02.cc +++ b/rtengine/ciecam02.cc @@ -48,7 +48,7 @@ void Ciecam02::curvecolorfloat (float satind, float satval, float &sres, float p } } -void Ciecam02::curveJfloat (float br, float contr, const LUTu & histogram, LUTf & outCurve) +void Ciecam02::curveJfloat (float br, float contr, float thr, const LUTu & histogram, LUTf & outCurve) { // check if brightness curve is needed @@ -97,7 +97,6 @@ void Ciecam02::curveJfloat (float br, float contr, const LUTu & histogram, LUTf outCurve.makeIdentity (32767.f); } - if (contr > 0.00001f || contr < -0.00001f) { // compute mean luminance of the image with the curve applied @@ -110,6 +109,9 @@ void Ciecam02::curveJfloat (float br, float contr, const LUTu & histogram, LUTf } avg /= sum; + float thrmin = (thr - contr / 250.0f); + float thrmax = (thr + contr / 250.0f); + std::vector contrastcurvePoints (9); contrastcurvePoints[0] = double (DCT_NURBS); @@ -117,11 +119,11 @@ void Ciecam02::curveJfloat (float br, float contr, const LUTu & histogram, LUTf contrastcurvePoints[1] = 0.f; // black point. Value in [0 ; 1] range contrastcurvePoints[2] = 0.f; // black point. Value in [0 ; 1] range - contrastcurvePoints[3] = avg - avg * (0.6f - contr / 250.0f); // toe point - contrastcurvePoints[4] = avg - avg * (0.6f + contr / 250.0f); // value at toe point + contrastcurvePoints[3] = avg - avg * thrmin; // toe point + contrastcurvePoints[4] = avg - avg * thrmax;// value at toe point - contrastcurvePoints[5] = avg + (1 - avg) * (0.6f - contr / 250.0f); // shoulder point - contrastcurvePoints[6] = avg + (1 - avg) * (0.6f + contr / 250.0f); // value at shoulder point + contrastcurvePoints[5] = avg + (1.f - avg) * thrmin; // shoulder point + contrastcurvePoints[6] = avg + (1.f - avg) * thrmax; // value at shoulder point contrastcurvePoints[7] = 1.f; // white point contrastcurvePoints[8] = 1.f; // value at white point diff --git a/rtengine/ciecam02.h b/rtengine/ciecam02.h index ca967af1c..cd140a702 100644 --- a/rtengine/ciecam02.h +++ b/rtengine/ciecam02.h @@ -65,7 +65,7 @@ private: public: Ciecam02 () {} static void curvecolorfloat (float satind, float satval, float &sres, float parsat); - static void curveJfloat (float br, float contr, const LUTu & histogram, LUTf & outCurve ) ; + static void curveJfloat (float br, float contr, float thr, const LUTu & histogram, LUTf & outCurve ) ; /** * Inverse transform from CIECAM02 JCh to XYZ. diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index bd2e8546c..144fcd0ee 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -923,7 +923,7 @@ ushort * CLASS ljpeg_row (int jrow, struct jhead *jh) } getbits(-1); } - FORC3 row[c] = (jh->row + ((jrow & 1) + 1) * (jh->wide*jh->clrs*((jrow+c) & 1))); + FORC3 row[c] = jh->row + jh->wide*jh->clrs*((jrow+c) & 1); for (col=0; col < jh->wide; col++) FORC(jh->clrs) { diff = ljpeg_diff (jh->huff[c]); @@ -9078,7 +9078,7 @@ void CLASS adobe_coeff (const char *make, const char *model) RT_matrix_from_constant = ThreeValBool::T; } // -- RT -------------------------------------------------------------------- - + for (i=0; i < sizeof table / sizeof *table; i++) if (!strncmp (name, table[i].prefix, strlen(table[i].prefix))) { if (RT_blacklevel_from_constant == ThreeValBool::T && table[i].black) black = (ushort) table[i].black; @@ -9568,7 +9568,7 @@ void CLASS identify() apply_tiff(); if (!strcmp(model, "X-T3")) { height = raw_height - 2; - } else if (!strcmp(model, "GFX 100")) { + } else if (!strcmp(model, "GFX 100") || !strcmp(model, "GFX100S")) { load_flags = 0; } if (!load_raw) { diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 7e342ff0a..d33a2e8d3 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -750,7 +750,7 @@ void Crop::update(int todo) parent->imgsrc->getImage(parent->currWB, tr, f, pp, params.toneCurve, params.raw); parent->imgsrc->convertColorSpace(f, params.icm, parent->currWB); - if (params.dirpyrDenoise.enabled) { + if (params.dirpyrDenoise.enabled || params.filmNegative.enabled) { // copy the denoised crop int oy = trafy / skip; int ox = trafx / skip; @@ -852,6 +852,8 @@ void Crop::update(int todo) const std::unique_ptr reservCrop(new LabImage(*laboCrop, true)); const std::unique_ptr lastorigCrop(new LabImage(*laboCrop, true)); + std::unique_ptr savenormtmCrop; + std::unique_ptr savenormretiCrop; auto& lllocalcurve2 = parent->lllocalcurve; auto& cllocalcurve2 = parent->cllocalcurve; auto& lclocalcurve2 = parent->lclocalcurve; @@ -1017,6 +1019,10 @@ void Crop::update(int todo) lumare = parent->lumarefs[sp]; sobelre = parent->sobelrefs[sp]; const float avge = parent->avgs[sp]; + float meantme = parent->meantms[sp]; + float stdtme = parent->stdtms[sp]; + float meanretie = parent->meanretis[sp]; + float stdretie = parent->stdretis[sp]; float minCD; float maxCD; @@ -1032,7 +1038,7 @@ void Crop::update(int todo) skip); // Locallab mask are only shown for selected spot if (sp == params.locallab.selspot) { - parent->ipf.Lab_Local(1, sp, (float**)shbuffer, labnCrop, labnCrop, reservCrop.get(), lastorigCrop.get(), cropx / skip, cropy / skip, skips(parent->fw, skip), skips(parent->fh, skip), skip, locRETgainCurve, locRETtransCurve, + parent->ipf.Lab_Local(1, sp, (float**)shbuffer, labnCrop, labnCrop, reservCrop.get(), savenormtmCrop.get(), savenormretiCrop.get(), lastorigCrop.get(), cropx / skip, cropy / skip, skips(parent->fw, skip), skips(parent->fh, skip), skip, locRETgainCurve, locRETtransCurve, lllocalcurve2,locallutili, cllocalcurve2, localclutili, lclocalcurve2, locallcutili, @@ -1075,7 +1081,8 @@ void Crop::update(int todo) LHutili, HHutili, CHutili, cclocalcurve2, localcutili, rgblocalcurve2, localrgbutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, parent->previewDeltaE, parent->locallColorMask, parent->locallColorMaskinv, parent->locallExpMask, parent->locallExpMaskinv, parent->locallSHMask, parent->locallSHMaskinv, parent->locallvibMask, parent->localllcMask, parent->locallsharMask, parent->locallcbMask, parent->locallretiMask, parent->locallsoftMask, parent->localltmMask, parent->locallblMask, - parent->localllogMask, parent->locall_Mask, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); + parent->localllogMask, parent->locall_Mask, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax, + meantme, stdtme, meanretie, stdretie); if(parent->previewDeltaE || parent->locallColorMask == 5 || parent->locallvibMask == 4 || parent->locallExpMask == 5 || parent->locallSHMask == 4 || parent->localllcMask == 4 || parent->localltmMask == 4 || parent->localllogMask == 4 || parent->locallsoftMask == 6 || parent->localllcMask == 4) { params.blackwhite.enabled = false; params.colorToning.enabled = false; @@ -1100,7 +1107,7 @@ void Crop::update(int todo) params.softlight.enabled = false; } } else { - parent->ipf.Lab_Local(1, sp, (float**)shbuffer, labnCrop, labnCrop, reservCrop.get(), lastorigCrop.get(), cropx / skip, cropy / skip, skips(parent->fw, skip), skips(parent->fh, skip), skip, locRETgainCurve, locRETtransCurve, + parent->ipf.Lab_Local(1, sp, (float**)shbuffer, labnCrop, labnCrop, reservCrop.get(), savenormtmCrop.get(), savenormretiCrop.get(), lastorigCrop.get(), cropx / skip, cropy / skip, skips(parent->fw, skip), skips(parent->fh, skip), skip, locRETgainCurve, locRETtransCurve, lllocalcurve2,locallutili, cllocalcurve2, localclutili, lclocalcurve2, locallcutili, @@ -1143,7 +1150,8 @@ void Crop::update(int todo) loclmasCurve_wav,lmasutili_wav, LHutili, HHutili, CHutili, cclocalcurve2, localcutili, rgblocalcurve2, localrgbutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); + minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax, + meantme, stdtme, meanretie, stdretie); } if (sp + 1u < params.locallab.spots.size()) { // do not copy for last spot as it is not needed anymore @@ -1201,6 +1209,16 @@ void Crop::update(int todo) bool cclutili = parent->cclutili; LUTu dummy; + if (params.colorToning.enabled && params.colorToning.method == "LabGrid") { + parent->ipf.colorToningLabGrid(labnCrop, 0,labnCrop->W , 0, labnCrop->H, false); + } + + parent->ipf.shadowsHighlights(labnCrop, params.sh.enabled, params.sh.lab,params.sh.highlights ,params.sh.shadows, params.sh.radius, skip, params.sh.htonalwidth, params.sh.stonalwidth); + + if (params.localContrast.enabled) { + // Alberto's local contrast + parent->ipf.localContrast(labnCrop, labnCrop->L, params.localContrast, false, skip); + } parent->ipf.chromiLuminanceCurve(this, 1, labnCrop, labnCrop, parent->chroma_acurve, parent->chroma_bcurve, parent->satcurve, parent->lhskcurve, parent->clcurve, parent->lumacurve, utili, autili, butili, ccutili, cclutili, clcutili, dummy, dummy); parent->ipf.vibrance(labnCrop, params.vibrance, params.toneCurve.hrenabled, params.icm.workingProfile); parent->ipf.labColorCorrectionRegions(labnCrop); diff --git a/rtengine/dfmanager.cc b/rtengine/dfmanager.cc index 6961a4b54..7dde668eb 100644 --- a/rtengine/dfmanager.cc +++ b/rtengine/dfmanager.cc @@ -367,7 +367,7 @@ dfInfo* DFManager::addFileInfo (const Glib::ustring& filename, bool pool) auto info = file->query_info("standard::name,standard::type,standard::is-hidden"); - if (!info && info->get_file_type() == Gio::FILE_TYPE_DIRECTORY) { + if (!info || info->get_file_type() == Gio::FILE_TYPE_DIRECTORY) { return nullptr; } diff --git a/rtengine/fujicompressed.cc b/rtengine/fujicompressed.cc index 45622eb7f..c1c620657 100644 --- a/rtengine/fujicompressed.cc +++ b/rtengine/fujicompressed.cc @@ -25,7 +25,7 @@ int bitDiff (int value1, int value2) int decBits = 0; if ( value2 < value1 ) - while (decBits <= 12 && (value2 << ++decBits) < value1) + while (decBits <= 14 && (value2 << ++decBits) < value1) ; return decBits; @@ -42,7 +42,7 @@ void CLASS init_fuji_compr (struct fuji_compressed_params* info) derror(); } - info->q_table = (char *) malloc (32768); + info->q_table = (char *) malloc (2 << fuji_bits); merror (info->q_table, "init_fuji_compr()"); if (fuji_raw_type == 16) { @@ -83,19 +83,23 @@ void CLASS init_fuji_compr (struct fuji_compressed_params* info) } // populting gradients - if (info->q_point[4] == 0x3FFF) { - info->total_values = 0x4000; - info->raw_bits = 14; - info->max_bits = 56; - info->maxDiff = 256; - } else if (info->q_point[4] == 0xFFF) { - info->total_values = 4096; - info->raw_bits = 12; - info->max_bits = 48; - info->maxDiff = 64; - } else { - derror(); - } + //if (info->q_point[4] == 0x3FFF) { + // info->total_values = 0x4000; + // info->raw_bits = 14; + // info->max_bits = 56; + // info->maxDiff = 256; + //} else if (info->q_point[4] == 0xFFF) { + // info->total_values = 4096; + // info->raw_bits = 12; + // info->max_bits = 48; + // info->maxDiff = 64; + //} else { + // derror(); + //} + info->total_values = (1 << fuji_bits); + info->raw_bits = fuji_bits; + info->max_bits = 4 * info->raw_bits; + info->maxDiff = info->total_values >> 6; } #define FUJI_BUF_SIZE 0x10000u @@ -1017,7 +1021,7 @@ void CLASS parse_fuji_compressed_header() || h_total_lines > 0x800 || h_total_lines == 0 || h_total_lines != h_raw_height / 6 - || (h_raw_bits != 12 && h_raw_bits != 14) + || (h_raw_bits != 12 && h_raw_bits != 14 && h_raw_bits != 16) || (h_raw_type != 16 && h_raw_type != 0)) { xtransCompressed = false; return; diff --git a/rtengine/helperavx.h b/rtengine/helperavx.h index 528760a92..de4ecf880 100644 --- a/rtengine/helperavx.h +++ b/rtengine/helperavx.h @@ -3,6 +3,11 @@ // this code was taken from http://shibatch.sourceforge.net/ // Many thanks to the author: Naoki Shibata // +// Copyright Naoki Shibata and contributors 2010 - 2021. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file sleef_LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// //////////////////////////////////////////////////////////////// #ifndef __AVX__ #error Please specify -mavx. diff --git a/rtengine/helpersse2.h b/rtengine/helpersse2.h index e8c489b04..8e87032f0 100644 --- a/rtengine/helpersse2.h +++ b/rtengine/helpersse2.h @@ -3,6 +3,11 @@ // this code was taken from http://shibatch.sourceforge.net/ // Many thanks to the author of original version: Naoki Shibata // +// Copyright Naoki Shibata and contributors 2010 - 2021. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file sleef_LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// // This version contains modifications made by Ingo Weyrich // //////////////////////////////////////////////////////////////// diff --git a/rtengine/iccjpeg.cc b/rtengine/iccjpeg.cc index 5e652296f..69771df02 100644 --- a/rtengine/iccjpeg.cc +++ b/rtengine/iccjpeg.cc @@ -18,7 +18,7 @@ */ #include "iccjpeg.h" -#include /* define malloc() */ +#include /* @@ -155,12 +155,9 @@ marker_is_icc (jpeg_saved_marker_ptr marker) * If TRUE is returned, *icc_data_ptr is set to point to the * returned data, and *icc_data_len is set to its length. * - * IMPORTANT: the data at **icc_data_ptr has been allocated with malloc() - * and must be freed by the caller with free() when the caller no longer - * needs it. (Alternatively, we could write this routine to use the - * IJG library's memory allocator, so that the data would be freed implicitly - * at jpeg_finish_decompress() time. But it seems likely that many apps - * will prefer to have the data stick around after decompression finishes.) + * IMPORTANT: the data at **icc_data_ptr has been allocated with new + * and must be freed by the caller with delete[] when the caller no longer + * needs it. * * NOTE: if the file contains invalid ICC APP2 markers, we just silently * return FALSE. You might want to issue an error message instead. @@ -235,7 +232,7 @@ read_icc_profile (j_decompress_ptr cinfo, } /* Allocate space for assembled data */ - icc_data = (JOCTET *) malloc(total_length * sizeof(JOCTET)); + icc_data = new (std::nothrow) JOCTET[total_length]; if (icc_data == nullptr) { return FALSE; /* oops, out of memory */ diff --git a/rtengine/iimage.h b/rtengine/iimage.h index bdf069957..2c75a0d59 100644 --- a/rtengine/iimage.h +++ b/rtengine/iimage.h @@ -220,7 +220,7 @@ public: #endif return ptrs[row][col]; } - const T operator() (size_t row, size_t col) const + const T& operator() (size_t row, size_t col) const { #if CHECK_BOUNDS assert (row < height_ && col < width_); @@ -1310,7 +1310,7 @@ public: #endif return ptr[3 * (row * width + col)]; } - const T operator() (size_t row, size_t col) const + const T& operator() (size_t row, size_t col) const { #if CHECK_BOUNDS assert (row < height_ && col < width_); diff --git a/rtengine/imageio.cc b/rtengine/imageio.cc index 971f7c9e9..ef37df3b2 100644 --- a/rtengine/imageio.cc +++ b/rtengine/imageio.cc @@ -195,7 +195,6 @@ ImageIO::ImageIO() : profileData(nullptr), profileLength(0), loadedProfileData(nullptr), - loadedProfileDataJpg(false), loadedProfileLength(0), exifChange(new procparams::ExifPairs), iptc(nullptr), @@ -517,7 +516,6 @@ int ImageIO::loadJPEGFromMemory (const char* buffer, int bufsize) jpeg_read_header(&cinfo, TRUE); deleteLoadedProfileData(); - loadedProfileDataJpg = true; bool hasprofile = read_icc_profile (&cinfo, (JOCTET**)&loadedProfileData, (unsigned int*)&loadedProfileLength); if (hasprofile) { @@ -602,7 +600,6 @@ int ImageIO::loadJPEG (const Glib::ustring &fname) cinfo.out_color_space = JCS_RGB; deleteLoadedProfileData(); - loadedProfileDataJpg = true; bool hasprofile = read_icc_profile (&cinfo, (JOCTET**)&loadedProfileData, (unsigned int*)&loadedProfileLength); if (hasprofile) { @@ -855,7 +852,6 @@ int ImageIO::loadTIFF (const Glib::ustring &fname) char* profdata; deleteLoadedProfileData(); - loadedProfileDataJpg = false; if (TIFFGetField(in, TIFFTAG_ICCPROFILE, &loadedProfileLength, &profdata)) { embProfile = cmsOpenProfileFromMem (profdata, loadedProfileLength); @@ -1710,11 +1706,7 @@ MyMutex& ImageIO::mutex () void ImageIO::deleteLoadedProfileData( ) { if(loadedProfileData) { - if(loadedProfileDataJpg) { - free(loadedProfileData); - } else { - delete[] loadedProfileData; - } + delete[] loadedProfileData; } loadedProfileData = nullptr; diff --git a/rtengine/imageio.h b/rtengine/imageio.h index 140dc8c3f..566fef13b 100644 --- a/rtengine/imageio.h +++ b/rtengine/imageio.h @@ -70,7 +70,6 @@ protected: char* profileData; int profileLength; char* loadedProfileData; - bool loadedProfileDataJpg; int loadedProfileLength; const std::unique_ptr exifChange; IptcData* iptc; diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index e7af18fa0..4490f4ba0 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -846,7 +846,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("sg=%f sab=%f\n", 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).sourceGray = sourceg[sp]; @@ -943,10 +943,13 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) */ const std::unique_ptr reserv(new LabImage(*oprevl, true)); const std::unique_ptr lastorigimp(new LabImage(*oprevl, true)); + std::unique_ptr savenormdr; + std::unique_ptr savenormtm; + std::unique_ptr savenormreti; float **shbuffer = nullptr; int sca = 1; double huere, chromare, lumare, huerefblu, chromarefblu, lumarefblu, sobelre; - float avge; + float avge, meantme, stdtme, meanretie, stdretie; std::vector locallref; std::vector locallretiminmax; huerefs.resize(params->locallab.spots.size()); @@ -957,8 +960,20 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) lumarefs.resize(params->locallab.spots.size()); sobelrefs.resize(params->locallab.spots.size()); avgs.resize(params->locallab.spots.size()); + meantms.resize(params->locallab.spots.size()); + stdtms.resize(params->locallab.spots.size()); + meanretis.resize(params->locallab.spots.size()); + stdretis.resize(params->locallab.spots.size()); for (int sp = 0; sp < (int)params->locallab.spots.size(); sp++) { + + if(params->locallab.spots.at(sp).equiltm && params->locallab.spots.at(sp).exptonemap) { + savenormtm.reset(new LabImage(*oprevl, true)); + } + + 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); @@ -1047,6 +1062,51 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } else { ipf.calc_ref(sp, nprevl, nprevl, 0, 0, pW, pH, scale, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, avge, locwavCurveden, locwavdenutili); } + // + meantme = 0.f; + stdtme = 0.f; + meanretie = 0.f; + stdretie = 0.f; + + bool istm = params->locallab.spots.at(sp).equiltm && params->locallab.spots.at(sp).exptonemap; + bool isreti = params->locallab.spots.at(sp).equilret && params->locallab.spots.at(sp).expreti; + //preparation for mean and sigma on current RT-spot + float locx = 0.f; + float locy = 0.f; + float locxl = 0.f; + float locyt = 0.f; + float centx = 0.f; + float centy = 0.f; + float ysta = 0.f; + 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; + 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; + ysta = std::max(static_cast(centy - locyt), 0.f); + 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); + } + 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); + } + 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) ; + } double huerblu = huerefblurs[sp] = huerefblu; double chromarblu = chromarefblurs[sp] = chromarefblu; @@ -1056,6 +1116,11 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) double lumar = lumarefs[sp] = lumare ; double sobeler = sobelrefs[sp] = sobelre; float avg = avgs[sp] = avge; + float meantm = meantms[sp] = meantme; + float stdtm = stdtms[sp] = stdtme; + float meanreti = meanretis[sp] = meanretie; + float stdreti = stdretis[sp] = stdretie; + CurveFactory::complexCurvelocal(ecomp, black / 65535., hlcompr, hlcomprthresh, shcompr, br, cont, lumar, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, avg, sca); @@ -1081,7 +1146,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) float Tmin; float Tmax; int lastsav; - ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv.get(), lastorigimp.get(), 0, 0, pW, pH, scale, locRETgainCurve, locRETtransCurve, + ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv.get(), savenormtm.get(), savenormreti.get(), lastorigimp.get(), 0, 0, pW, pH, scale, locRETgainCurve, locRETtransCurve, lllocalcurve, locallutili, cllocalcurve, localclutili, lclocalcurve, locallcutili, @@ -1123,7 +1188,30 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) loclmasCurve_wav, lmasutili_wav, LHutili, HHutili, CHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, lastsav, false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); + minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax, + meantm, stdtm, meanreti, stdreti); + + + + 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.get()->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 ; + } + + 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.get()->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; + } + if (sp + 1u < params->locallab.spots.size()) { // do not copy for last spot as it is not needed anymore @@ -1331,9 +1419,18 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) if ((todo & (M_LUMINANCE + M_COLOR)) || (todo & M_AUTOEXP)) { 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.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 + 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); @@ -1693,8 +1790,10 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) // Computing the internal image for analysis, i.e. conversion from WCS->Output profile delete workimg; + workimg = nullptr; + workimg = ipf.lab2rgb(nprevl, 0, 0, pW, pH, params->icm); - } catch (char * str) { + } catch (std::exception&) { return; } } @@ -1785,6 +1884,7 @@ void ImProcCoordinator::freeAll() } delete workimg; + workimg = nullptr; } diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h index 5ad14cd0c..b35354cfb 100644 --- a/rtengine/improccoordinator.h +++ b/rtengine/improccoordinator.h @@ -346,6 +346,10 @@ protected: std::vector lumarefs; std::vector sobelrefs; std::vector avgs; + std::vector meantms; + std::vector stdtms; + std::vector meanretis; + std::vector stdretis; bool lastspotdup; bool previewDeltaE; int locallColorMask; diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc index bf6234350..047f045e2 100644 --- a/rtengine/improcfun.cc +++ b/rtengine/improcfun.cc @@ -991,7 +991,7 @@ void ImProcFunctions::ciecam_02float(CieImage* ncie, float adap, int pW, int pwb } if (CAMBrightCurveJ.dirty) { - Ciecam02::curveJfloat(params->colorappearance.jlight, params->colorappearance.contrast, hist16J, CAMBrightCurveJ); //lightness and contrast J + Ciecam02::curveJfloat(params->colorappearance.jlight, params->colorappearance.contrast, 0.6f, hist16J, CAMBrightCurveJ); //lightness and contrast J CAMBrightCurveJ /= 327.68f; CAMBrightCurveJ.dirty = false; } @@ -1003,7 +1003,7 @@ void ImProcFunctions::ciecam_02float(CieImage* ncie, float adap, int pW, int pwb } if (CAMBrightCurveQ.dirty) { - Ciecam02::curveJfloat(params->colorappearance.qbright, params->colorappearance.qcontrast, hist16Q, CAMBrightCurveQ); //brightness and contrast Q + Ciecam02::curveJfloat(params->colorappearance.qbright, params->colorappearance.qcontrast, 0.6f, hist16Q, CAMBrightCurveQ); //brightness and contrast Q // CAMBrightCurveQ /= coefQ; CAMBrightCurveQ.dirty = false; } @@ -2231,7 +2231,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer } bool hasColorToning = params->colorToning.enabled && bool (ctOpacityCurve) && bool (ctColorCurve) && params->colorToning.method != "LabGrid"; - bool hasColorToningLabGrid = params->colorToning.enabled && params->colorToning.method == "LabGrid"; +// bool hasColorToningLabGrid = params->colorToning.enabled && params->colorToning.method == "LabGrid"; // float satLimit = float(params->colorToning.satProtectionThreshold)/100.f*0.7f+0.3f; // float satLimitOpacity = 1.f-(float(params->colorToning.saturatedOpacity)/100.f); float strProtect = pow_F((float (params->colorToning.strength) / 100.f), 0.4f); @@ -3184,9 +3184,9 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer Color::RGB2Lab(&rtemp[ti * TS], >emp[ti * TS], &btemp[ti * TS], &(lab->L[i][jstart]), &(lab->a[i][jstart]), &(lab->b[i][jstart]), toxyz, tW - jstart); } - if (hasColorToningLabGrid) { - colorToningLabGrid(lab, jstart, tW, istart, tH, false); - } + // if (hasColorToningLabGrid) { + // colorToningLabGrid(lab, jstart, tW, istart, tH, false); + // } } else { // black & white // Auto channel mixer needs whole image, so we now copy to tmpImage and close the tiled processing for (int i = istart, ti = 0; i < tH; i++, ti++) { @@ -3565,9 +3565,9 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer for (int i = 0; i < tH; i++) { Color::RGB2Lab(tmpImage->r(i), tmpImage->g(i), tmpImage->b(i), lab->L[i], lab->a[i], lab->b[i], toxyz, tW); - if (hasColorToningLabGrid) { - colorToningLabGrid(lab, 0, tW, i, i + 1, false); - } + // if (hasColorToningLabGrid) { + // colorToningLabGrid(lab, 0, tW, i, i + 1, false); + // } } @@ -3590,12 +3590,13 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer } // shadowsHighlights(lab); - shadowsHighlights(lab, params->sh.enabled, params->sh.lab,params->sh.highlights ,params->sh.shadows, params->sh.radius, scale, params->sh.htonalwidth, params->sh.stonalwidth); - + // shadowsHighlights(lab, 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 localContrast(lab, lab->L, params->localContrast, false, scale); } + */ } /** @@ -5621,14 +5622,8 @@ double ImProcFunctions::getAutoDistor(const Glib::ustring &fname, int thumb_size rawGray = raw->getGrayscaleHistEQ(width); if (!thumbGray || !rawGray) { - if (thumbGray) { - delete thumbGray; - } - - if (rawGray) { - delete rawGray; - } - + delete[] thumbGray; + delete[] rawGray; delete thumb; delete raw; return 0.0; @@ -5641,8 +5636,8 @@ double ImProcFunctions::getAutoDistor(const Glib::ustring &fname, int thumb_size calcDistortion(thumbGray, rawGray, width, h_thumb, 4, dist_amount); } - delete thumbGray; - delete rawGray; + delete[] thumbGray; + delete[] rawGray; delete thumb; delete raw; return dist_amount; diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index 69cf388c4..dc9e216f2 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -151,7 +151,7 @@ enum class BlurType { explicit ImProcFunctions(const procparams::ProcParams* iparams, bool imultiThread = true) : monitorTransform(nullptr), params(iparams), scale(1), multiThread(imultiThread), lumimul{} {} ~ImProcFunctions(); - bool needsLuminanceOnly() + bool needsLuminanceOnly() const { return !(needsCA() || needsDistortion() || needsRotation() || needsPerspective() || needsLCP() || needsLensfun()) && (needsVignetting() || needsPCVignetting() || needsGradient()); } @@ -255,7 +255,7 @@ enum class BlurType { int shortcu, bool delt, const float hueref, const float chromaref, const float lumaref, float maxdE, float mindE, float maxdElim, float mindElim, float iterat, float limscope, int scope, bool fftt, float blu_ma, float cont_ma, int indic); - void avoidcolshi(struct local_params& lp, int sp, LabImage * original, LabImage *transformed, int cy, int cx, int sk); + void avoidcolshi(const struct local_params& lp, int sp, LabImage * original, LabImage *transformed, int cy, int cx, int sk); void deltaEforMask(float **rdE, int bfw, int bfh, LabImage* bufcolorig, const float hueref, const float chromaref, const float lumaref, float maxdE, float mindE, float maxdElim, float mindElim, float iterat, float limscope, int scope, float balance, float balanceh); @@ -268,7 +268,7 @@ enum class BlurType { void mean_dt(const float * data, size_t size, double& mean_p, double& dt_p); float *cos_table(size_t size); - void normalize_mean_dt(float *data, const float *ref, size_t size, float mod, float sigm); + void normalize_mean_dt(float *data, const float *ref, size_t size, float mod, float sigm, float mdef, float sdef, float mdef2, float sdef2); void retinex_pde(const float *datain, float * dataout, int bfw, int bfh, float thresh, float multy, float *dE, int show, int dEenable, int normalize); void exposure_pde(float *dataor, float *datain, float * dataout, int bfw, int bfh, float thresh, float mod); void fftw_convol_blur(float *input, float *output, int bfw, int bfh, float radius, int fftkern, int algo); @@ -297,11 +297,12 @@ enum class BlurType { bool delt, const float hueref, const float chromaref, const float lumaref, float maxdE, float mindE, float maxdElim, float mindElim, float iterat, float limscope, int scope, float balance, float balanceh, float lumask); + void mean_sig (const float* const * const savenormL, float &meanf, float &stdf, int xStart, int xEnd, int yStart, int yEnd) const; void calc_ref(int sp, LabImage* original, LabImage* transformed, int cx, int cy, int oW, int oH, int sk, double &huerefblur, double &chromarefblur, double &lumarefblur, double &hueref, double &chromaref, double &lumaref, double &sobelref, float &avg, const LocwavCurve & locwavCurveden, bool locwavdenutili); void copy_ref(LabImage* spotbuffer, LabImage* original, LabImage* transformed, int cx, int cy, int sk, const struct local_params & lp, double &huerefspot, double &chromarefspot, double &lumarefspot); void paste_ref(LabImage* spotbuffer, LabImage* transformed, int cx, int cy, int sk, const struct local_params & lp); - void Lab_Local(int call, int sp, float** shbuffer, LabImage* original, LabImage* transformed, LabImage* reserved, LabImage* lastorig, int cx, int cy, int oW, int oH, int sk, const LocretigainCurve& locRETgainCcurve, const LocretitransCurve &locRETtransCcurve, + void Lab_Local(int call, int sp, float** shbuffer, LabImage* original, LabImage* transformed, LabImage* reserved, LabImage * savenormtm, LabImage * savenormreti, LabImage* lastorig, int cx, int cy, int oW, int oH, int sk, const LocretigainCurve& locRETgainCcurve, const LocretitransCurve &locRETtransCcurve, const LUTf& lllocalcurve, bool locallutili, const LUTf& cllocalcurve, bool localclutili, const LUTf& lclocalcurve, bool locallcutili, @@ -318,7 +319,7 @@ enum class BlurType { const LUTf& lmaskloglocalcurve, bool localmasklogutili, const LUTf& lmasklocal_curve, bool localmask_utili, - const LocCCmaskCurve& locccmasCurve, bool lcmasutili, const LocLLmaskCurve& locllmasCurve, bool llmasutili, const LocHHmaskCurve& lochhmasCurve, bool lhmasutili, const LocHHmaskCurve& lochhhmasCurve, bool lhhmasutili, + const LocCCmaskCurve& locccmasCurve, bool lcmasutili, const LocLLmaskCurve& locllmasCurve, bool llmasutili, const LocHHmaskCurve& lochhmasCurve, bool lhmasutili, const LocHHmaskCurve& llochhhmasCurve, bool lhhmasutili, const LocCCmaskCurve& locccmasexpCurve, bool lcmasexputili, const LocLLmaskCurve& locllmasexpCurve, bool llmasexputili, const LocHHmaskCurve& lochhmasexpCurve, bool lhmasexputili, const LocCCmaskCurve& locccmasSHCurve, bool lcmasSHutili, const LocLLmaskCurve& locllmasSHCurve, bool llmasSHutili, const LocHHmaskCurve& lochhmasSHCurve, bool lhmasSHutili, const LocCCmaskCurve& locccmasvibCurve, bool lcmasvibutili, const LocLLmaskCurve& locllmasvibCurve, bool llmasvibutili, const LocHHmaskCurve& lochhmasvibCurve, bool lhmasvibutili, @@ -345,7 +346,8 @@ enum class BlurType { bool LHutili, bool HHutili, bool CHutili, const LUTf& cclocalcurve, bool localcutili, const LUTf& rgblocalcurve, bool localrgbutili, bool localexutili, const LUTf& exlocalcurve, const LUTf& hltonecurveloc, const LUTf& shtonecurveloc, const LUTf& tonecurveloc, const LUTf& lightCurveloc, double& huerefblur, double &chromarefblur, double& lumarefblur, double &hueref, double &chromaref, double &lumaref, double &sobelref, int &lastsav, bool prevDeltaE, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llsharMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, int lllogMask, int ll_Mask, - float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax); + float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax, + float& meantm, float& stdtm, float& meanreti, float& stdreti); 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); @@ -361,7 +363,7 @@ enum class BlurType { const LocwavCurve & loccompwavCurve, bool loccompwavutili, bool wavcurvecomp, const LocwavCurve & loccomprewavCurve, bool loccomprewavutili, bool wavcurvecompre, const LocwavCurve & locedgwavCurve, bool locedgwavutili, - float sigm, float offs,int & maxlvl, float fatdet, float fatanch, float chromalev, float chromablu, bool blurlc, bool blurena, bool levelena, bool comprena, bool compreena, float compress, float thres); + float sigm, float offs,int & maxlvl, float sigmadc, float deltad, float chromalev, float chromablu, bool blurlc, bool blurena, bool levelena, bool comprena, bool compreena, float compress, float thres); void wavcont(const struct local_params& lp, float ** tmp, wavelet_decomposition &wdspot, int level_bl, int maxlvl, const LocwavCurve & loclevwavCurve, bool loclevwavutili, @@ -372,7 +374,7 @@ enum class BlurType { void wavcbd(wavelet_decomposition &wdspot, int level_bl, int maxlvl, const LocwavCurve& locconwavCurve, bool locconwavutili, float sigm, float offs, float chromalev, int sk); - void transit_shapedetect2(int call, int senstype, const LabImage * bufexporig, const LabImage * bufexpfin, LabImage * originalmask, const float hueref, const float chromaref, const float lumaref, float sobelref, float meansobel, float ** blend2, struct local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk); + void transit_shapedetect2(int sp, float meantm, float stdtm, int call, int senstype, const LabImage * bufexporig, const LabImage * bufexpfin, LabImage * originalmask, const float hueref, const float chromaref, const float lumaref, float sobelref, float meansobel, float ** blend2, struct local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk); void transit_shapedetect_retinex(int call, int senstype, LabImage * bufexporig, LabImage * bufexpfin, LabImage * bufmask, LabImage * buforigmas, float **buflight, float **bufchro, const float hueref, const float chromaref, const float lumaref, struct local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk); void transit_shapedetect(int senstype, const LabImage *bufexporig, LabImage * originalmask, float **bufchro, bool HHutili, const float hueref, const float chromaref, const float lumaref, float sobelref, float meansobel, float ** blend2, const struct local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk); diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 5f9eb046b..35df6d350 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -435,9 +435,12 @@ struct local_params { float balanceh; int colorde; int cir; + bool recur; float thr; float stru; int chro, cont, sens, sensh, senscb, sensbn, senstm, sensex, sensexclu, sensden, senslc, senssf, senshs, senscolor; + float reparden; + float repartm; float clarityml; float contresid; bool deltaem; @@ -772,6 +775,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall int w = oW; int h = oH; int circr = locallab.spots.at(sp).circrad; + bool recur = locallab.spots.at(sp).recurs; float streng = ((float)locallab.spots.at(sp).stren); float gam = ((float)locallab.spots.at(sp).gamma); float est = ((float)locallab.spots.at(sp).estop); @@ -783,9 +787,10 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall float laplac = ((float)locallab.spots.at(sp).laplace); float thre = locallab.spots.at(sp).thresh; - if (thre > 8.f || thre < 0.f) {//to avoid artifacts if user does not clear cache with new settings. Can be suppressed after - thre = 2.f; - } +// if (thre > 8.f || thre < 0.f) {//to avoid artifacts if user does not clear cache with new settings. Can be suppressed after +// thre = 2.f; +// } + thre = LIM(thre, 0.f, 10.0f); double local_x = locallab.spots.at(sp).loc.at(0) / 2000.0; double local_y = locallab.spots.at(sp).loc.at(2) / 2000.0; @@ -798,9 +803,10 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall float balanch = (float) locallab.spots.at(sp).balanh; int colorde = (int) locallab.spots.at(sp).colorde; - if (iterati > 4.f || iterati < 0.2f) {//to avoid artifacts if user does not clear cache with new settings Can be suppressed after - iterati = 2.f; - } +// if (iterati > 4.f || iterati < 0.2f) {//to avoid artifacts if user does not clear cache with new settings Can be suppressed after +// iterati = 2.f; +// } + iterati = LIM(iterati, 0.2f, 10.0f); float neigh = float (locallab.spots.at(sp).neigh); float chromaPastel = float (locallab.spots.at(sp).pastels) / 100.0f; @@ -1120,6 +1126,8 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall int local_noiselequal = locallab.spots.at(sp).noiselequal; float local_noisechrodetail = (float)locallab.spots.at(sp).noisechrodetail; int local_sensiden = locallab.spots.at(sp).sensiden; + float local_reparden = locallab.spots.at(sp).reparden; + float local_repartm = locallab.spots.at(sp).repartm; float local_detailthr = (float)locallab.spots.at(sp).detailthr; float local_recothr = (float)locallab.spots.at(sp).recothres; float local_lowthr = (float)locallab.spots.at(sp).lowthres; @@ -1355,6 +1363,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.deltaem = locallab.spots.at(sp).deltae; lp.scalereti = scaleret; lp.cir = circr; + lp.recur = recur; lp.actsp = acti; lp.xc = w * local_center_x; lp.yc = h * local_center_y; @@ -1577,6 +1586,8 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.noisecf = local_noisecf; lp.noisecc = local_noisecc; lp.sensden = local_sensiden; + lp.reparden = local_reparden; + lp.repartm = local_repartm; lp.bilat = locallab.spots.at(sp).bilateral; lp.nldet = locallab.spots.at(sp).nldet; lp.nlstr = locallab.spots.at(sp).nlstr; @@ -1827,6 +1838,27 @@ float find_gray(float source_gray, float target_gray) return 0.f; // not found } +void ImProcFunctions::mean_sig (const float* const * const savenormL, float &meanf, float &stdf, int xStart, int xEnd, int yStart, int yEnd) const { + const int size = (yEnd - yStart) * (xEnd - xStart); + // use double precision for large accumulations + double meand = 0.0; + double stdd = 0.0; +#ifdef _OPENMP + #pragma omp parallel for reduction(+:meand, stdd) if(multiThread) +#endif + for (int y = yStart; y < yEnd; ++y) { + for (int x = xStart; x < xEnd; ++x) { + meand += static_cast(savenormL[y][x]); + stdd += SQR(static_cast(savenormL[y][x])); + } + } + meand /= size; + stdd /= size; + stdd -= SQR(meand); + stdf = std::sqrt(stdd); + meanf = meand; +} + // basic log encoding taken from ACESutil.Lin_to_Log2, from // https://github.com/ampas/aces-dev @@ -2028,7 +2060,7 @@ void ImProcFunctions::getAutoLogloc(int sp, ImageSource *imgsrc, float *sourceg, const int wsta = xsta * w; const int wend = xend * w; - + double mean = 0.0; int nc = 0; for (int y = hsta; y < hend; ++y) { @@ -2401,8 +2433,8 @@ void ImProcFunctions::ciecamloc_02float(int sp, LabImage* lab, int call) LUTu hist16J(32768, LUT_CLIP_BELOW | LUT_CLIP_ABOVE, true); LUTu hist16Q(32768, LUT_CLIP_BELOW | LUT_CLIP_ABOVE, true); //for J light and contrast - LUTf CAMBrightCurveJ(32768, LUT_CLIP_ABOVE); - LUTf CAMBrightCurveQ(32768, LUT_CLIP_ABOVE); + LUTf CAMBrightCurveJ(32768, LUT_CLIP_BELOW | LUT_CLIP_ABOVE); + LUTf CAMBrightCurveQ(32768, LUT_CLIP_BELOW | LUT_CLIP_ABOVE); #ifdef _OPENMP const int numThreads = min(max(width * height / 65536, 1), omp_get_max_threads()); @@ -2479,11 +2511,24 @@ void ImProcFunctions::ciecamloc_02float(int sp, LabImage* lab, int call) const float lightL = 0.4 * params->locallab.spots.at(sp).lightl; //0.4 less effect, no need 1. const float contQ = 0.5 * params->locallab.spots.at(sp).contq; //0.5 less effect, no need 1. const float lightQ = 0.4 * params->locallab.spots.at(sp).lightq; //0.4 less effect, no need 1. - - Ciecam02::curveJfloat(lightL, contL, hist16J, CAMBrightCurveJ); //lightness J and contrast J + + float contthresL = params->locallab.spots.at(sp).contthres; + float contthresQ = contthresL; + if(contL < 0.f) { + contthresL *= -1; + } + float thL = 0.6f; + thL = 0.3f * contthresL + 0.6f; + + if(contQ < 0.f) { + contthresQ *= -1; + } + float thQ = 0.6f; + thQ = 0.3f * contthresQ + 0.6f; + Ciecam02::curveJfloat(lightL, contL, thL, hist16J, CAMBrightCurveJ); //lightness J and contrast J CAMBrightCurveJ /= 327.68f; - Ciecam02::curveJfloat(lightQ, contQ, hist16Q, CAMBrightCurveQ); //brightness Q and contrast Q + Ciecam02::curveJfloat(lightQ, contQ, thQ, hist16Q, CAMBrightCurveQ); //brightness Q and contrast Q } int tempo = 5000; if(params->locallab.spots.at(sp).expvibrance && call == 2) { @@ -2520,6 +2565,10 @@ void ImProcFunctions::ciecamloc_02float(int sp, LabImage* lab, int call) f = 0.9f; c = 0.59f; nc = 0.9f; + } else if (params->locallab.spots.at(sp).sursour == "Dark") { + f = 0.8f; + c = 0.525f; + nc = 0.8f; } //viewing condition for surround @@ -2572,8 +2621,15 @@ void ImProcFunctions::ciecamloc_02float(int sp, LabImage* lab, int call) float schr = 0.f; float mchr = 0.f; + float cchr = 0.f; if (ciec) { + + cchr = params->locallab.spots.at(sp).chroml; + if (cchr == -100.0f) { + cchr = -99.8f; + } + schr = params->locallab.spots.at(sp).saturl; if (schr > 0.f) { @@ -2728,7 +2784,7 @@ void ImProcFunctions::ciecamloc_02float(int sp, LabImage* lab, int call) if(ciec) { Qpro = CAMBrightCurveQ[(float)(Qpro * coefQ)] / coefQ; //brightness and contrast float rstprotection = 50.f;//default value to avoid 1 slider - float chr = 0.f;//no use of chroma + // float chr = 0.f;//no use of chroma float Mp, sres; Mp = Mpro / 100.0f; Ciecam02::curvecolorfloat(mchr, Mp, sres, 2.5f); @@ -2756,7 +2812,7 @@ void ImProcFunctions::ciecamloc_02float(int sp, LabImage* lab, int call) Qpro = QproFactor * sqrtf(Jpro); float Cp = (spro * spro * Qpro) / (1000000.f); Cpro = Cp * 100.f; - Ciecam02::curvecolorfloat(chr, Cp, sres, 1.8f); + Ciecam02::curvecolorfloat(cchr, Cp, sres, 1.8f); Color::skinredfloat(Jpro, hpro, sres, Cp, 55.f, 30.f, 1, rstprotection, 100.f, Cpro); } @@ -3224,6 +3280,11 @@ void ImProcFunctions::DeNoise_Local(int call, const struct local_params& lp, Lab difa = tmp1.a[loy - begy][lox - begx] - original->a[y][x]; difb = tmp1.b[loy - begy][lox - begx] - original->b[y][x]; } else { //dcrop + const float repart = 1.0f - 0.01f * lp.reparden; + tmp1.L[y][x] = intp(repart, original->L[y][x], tmp1.L[y][x]); + tmp1.a[y][x] = intp(repart, original->a[y][x], tmp1.a[y][x]); + tmp1.b[y][x] = intp(repart, original->b[y][x], tmp1.b[y][x]); + difL = tmp1.L[y][x] - original->L[y][x]; difa = tmp1.a[y][x] - original->a[y][x]; difb = tmp1.b[y][x] - original->b[y][x]; @@ -3370,16 +3431,14 @@ void ImProcFunctions::DeNoise_Local2(const struct local_params& lp, LabImage* or float difL, difa, difb; - // if (call == 2 /*|| call == 1 || call == 3 */) { //simpleprocess - // difL = tmp1.L[loy - begy][lox - begx] - original->L[y][x]; - // difa = tmp1.a[loy - begy][lox - begx] - original->a[y][x]; - // difb = tmp1.b[loy - begy][lox - begx] - original->b[y][x]; - // } else { //dcrop + const float repart = 1.0f - 0.01f * lp.reparden; + tmp1.L[y-ystart][x-xstart] = intp(repart, original->L[y][x], tmp1.L[y-ystart][x-xstart]); + tmp1.a[y-ystart][x-xstart] = intp(repart, original->a[y][x], tmp1.a[y-ystart][x-xstart]); + tmp1.b[y-ystart][x-xstart] = intp(repart, original->b[y][x], tmp1.b[y-ystart][x-xstart]); - difL = tmp1.L[y-ystart][x-xstart] - original->L[y][x]; - difa = tmp1.a[y-ystart][x-xstart] - original->a[y][x]; - difb = tmp1.b[y-ystart][x-xstart] - original->b[y][x]; - // } + difL = tmp1.L[y-ystart][x-xstart] - original->L[y][x]; + difa = tmp1.a[y-ystart][x-xstart] - original->a[y][x]; + difb = tmp1.b[y-ystart][x-xstart] - original->b[y][x]; difL *= localFactor * reducdEL; difa *= localFactor * reducdEa; @@ -4292,7 +4351,7 @@ void ImProcFunctions::mean_dt(const float* data, size_t size, double& mean_p, do dt_p = std::sqrt(dt); } -void ImProcFunctions::normalize_mean_dt(float * data, const float * ref, size_t size, float mod, float sigm) +void ImProcFunctions::normalize_mean_dt(float * data, const float * ref, size_t size, float mod, float sigm, float mdef, float sdef, float mdef2, float sdef2) { /* * Copyright 2009-2011 IPOL Image Processing On Line http://www.ipol.im/ @@ -4302,7 +4361,7 @@ void ImProcFunctions::normalize_mean_dt(float * data, const float * ref, size_t * @brief laplacian, DFT and Poisson routines * * @author Nicolas Limare - * adapted for Rawtherapee - jacques Desmis july 2019 + * adapted for Rawtherapee - jacques Desmis july 2019 - march 2021 */ if (NULL == data || NULL == ref) { @@ -4313,8 +4372,19 @@ void ImProcFunctions::normalize_mean_dt(float * data, const float * ref, size_t double mean_ref, mean_data, dt_ref, dt_data; /* compute mean and variance of the two arrays */ - mean_dt(ref, size, mean_ref, dt_ref); - mean_dt(data, size, mean_data, dt_data); + if(mdef!= 0.f && sdef != 0.f) { + mean_ref = mdef; + dt_ref = sdef; + } else { + mean_dt(ref, size, mean_ref, dt_ref); + } + if(mdef2!= 0.f && sdef2 != 0.f) { + // printf("OK shortcut\n"); + mean_data = mdef2; + dt_data = sdef2; + } else { + mean_dt(data, size, mean_data, dt_data); + } /* compute the normalization coefficients */ const double a = dt_ref / dt_data; @@ -4458,7 +4528,7 @@ void ImProcFunctions::retinex_pde(const float * datain, float * dataout, int bfw fftwf_free(data_fft); if (show != 4 && normalize == 1) { - normalize_mean_dt(data_tmp, datain, bfw * bfh, 1.f, 1.f); + normalize_mean_dt(data_tmp, datain, bfw * bfh, 1.f, 1.f, 0.f, 0.f, 0.f, 0.f); } if (show == 0 || show == 4) { @@ -5710,7 +5780,8 @@ void ImProcFunctions::transit_shapedetect(int senstype, const LabImage * bufexpo const int xend = rtengine::min(static_cast(lp.xc + lp.lx) - cx, original->W); const int bfw = xend - xstart; const int bfh = yend - ystart; - // printf("h=%f l=%f c=%f s=%f\n", hueref, lumaref, chromaref, sobelref); +// printf("h=%f l=%f c=%f s=%f\n", hueref, lumaref, chromaref, sobelref); +// printf("bfh=%i bfw=%i\n", bfh, bfw); const float ach = lp.trans / 100.f; float varsens = lp.sensex; @@ -5783,7 +5854,7 @@ void ImProcFunctions::transit_shapedetect(int senstype, const LabImage * bufexpo data[(y - ystart)* bfw + (x - xstart)] = bufexporig->L[y - ystart][x - xstart]; } - normalize_mean_dt(data, datain, bfh * bfw, 1.f, 1.f); + normalize_mean_dt(data, datain, bfh * bfw, 1.f, 1.f, 0.f, 0.f, 0.f, 0.f); #ifdef _OPENMP #pragma omp parallel for if (multiThread) #endif @@ -6752,7 +6823,7 @@ void ImProcFunctions::BlurNoise_Local(LabImage *tmp1, LabImage * originalmask, c } } -void ImProcFunctions::transit_shapedetect2(int call, int senstype, const LabImage * bufexporig, const LabImage * bufexpfin, LabImage * originalmask, const float hueref, const float chromaref, const float lumaref, float sobelref, float meansobel, float ** blend2, struct local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk) +void ImProcFunctions::transit_shapedetect2(int sp, float meantm, float stdtm, int call, int senstype, const LabImage * bufexporig, const LabImage * bufexpfin, LabImage * originalmask, const float hueref, const float chromaref, const float lumaref, float sobelref, float meansobel, float ** blend2, struct local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk) { //initialize coordinates int ystart = rtengine::max(static_cast(lp.yc - lp.lyT) - cy, 0); @@ -6886,6 +6957,8 @@ void ImProcFunctions::transit_shapedetect2(int call, int senstype, const LabImag } } + + if (lp.equtm && senstype == 8) { //normalize luminance for Tone mapping , at this place we can use for others senstype! float *datain = new float[bfh * bfw]; float *data = new float[bfh * bfw]; @@ -6898,8 +6971,21 @@ void ImProcFunctions::transit_shapedetect2(int call, int senstype, const LabImag datain[(y - ystart) * bfw + (x - xstart)] = original->L[y][x]; data[(y - ystart)* bfw + (x - xstart)] = bufexpfin->L[y - ystart][x - xstart]; } - - normalize_mean_dt(data, datain, bfh * bfw, 1.f, 1.f); + if(call == 3 || call == 2) {//improccoordinator and simpleprocess + normalize_mean_dt(data, datain, bfw * bfh, 1.f, 1.f, 0.f, 0.f, 0.f, 0.f); + } else if(call == 1) {//dcrop + float ma = meantm; + float sa = stdtm; + float ma2 = (float) params->locallab.spots.at(sp).noiselumc; + float sa2 = (float) params->locallab.spots.at(sp).softradiustm; + //printf("ma=%f sa=%f ma2=%f sa2=%f\n", (double) ma, (double) sa, (double) ma2, (double) sa2); + //use normalize with mean and stdv + normalize_mean_dt(data, datain, bfw * bfh, 1.f, 1.f, ma, sa, ma2, sa2); + } + + + + #ifdef _OPENMP #pragma omp parallel for #endif @@ -6912,6 +6998,24 @@ void ImProcFunctions::transit_shapedetect2(int call, int senstype, const LabImag delete [] data; } + + if (senstype == 8) {//strength Tone mapping + const float repart = 1.0f - 0.01f * lp.repartm; + +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) if(multiThread) +#endif + + for (int y = ystart; y < yend; y++){ + for (int x = xstart; x < xend; x++) { + bufexpfin->L[y - ystart][x - xstart]= intp(repart, original->L[y][x], bufexpfin->L[y - ystart][x - xstart]); + bufexpfin->a[y - ystart][x - xstart]= intp(repart, original->a[y][x], bufexpfin->a[y - ystart][x - xstart]); + bufexpfin->b[y - ystart][x - xstart]= intp(repart, original->b[y][x], bufexpfin->b[y - ystart][x - xstart]); + } + } + } + + #ifdef _OPENMP #pragma omp parallel if (multiThread) #endif @@ -7014,6 +7118,7 @@ void ImProcFunctions::transit_shapedetect2(int call, int senstype, const LabImag } } + //deltaE float abdelta2 = SQR(refa - maskptr->a[y][x]) + SQR(refb - maskptr->b[y][x]); float chrodelta2 = SQR(std::sqrt(SQR(maskptr->a[y][x]) + SQR(maskptr->b[y][x])) - (chromaref * 327.68f)); @@ -7149,7 +7254,7 @@ void ImProcFunctions::exposure_pde(float * dataor, float * datain, float * datao } #endif - normalize_mean_dt(data, dataor, bfw * bfh, mod, 1.f); + normalize_mean_dt(data, dataor, bfw * bfh, mod, 1.f, 0.f, 0.f, 0.f, 0.f); { #ifdef _OPENMP @@ -8930,12 +9035,12 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl bool execdenoi = noiscfactiv && ((lp.colorena && execcolor) || (lp.tonemapena && lp.strengt != 0.f) || (lp.cbdlena && execbdl) || (lp.sfena && lp.strng > 0.f) || (lp.lcena && lp.lcamount > 0.f) || (lp.sharpena && lp.shrad > 0.42) || (lp.retiena && lp.str > 0.f) || (lp.exposena && lp.expcomp != 0.f) || (lp.expvib && lp.past != 0.f)); bool execmaskden = (lp.showmaskblmet == 2 || lp.enablMask || lp.showmaskblmet == 3 || lp.showmaskblmet == 4) && lp.smasktyp != 0; - const int ys = rtengine::max(static_cast(lp.yc - lp.lyT) - cy, 0); - const int ye = rtengine::min(static_cast(lp.yc + lp.ly) - cy, original->H); - const int xs = rtengine::max(static_cast(lp.xc - lp.lxL) - cx, 0); - const int xe = rtengine::min(static_cast(lp.xc + lp.lx) - cx, original->W); - const int hspot = ye - ys; - const int wspot = xe - xs; +// const int ys = rtengine::max(static_cast(lp.yc - lp.lyT) - cy, 0); +// const int ye = rtengine::min(static_cast(lp.yc + lp.ly) - cy, original->H); +// const int xs = rtengine::max(static_cast(lp.xc - lp.lxL) - cx, 0); +// const int xe = rtengine::min(static_cast(lp.xc + lp.lx) - cx, original->W); +// const int hspot = ye - ys; +// const int wspot = xe - xs; if (((lp.noiself > 0.f || lp.noiself0 > 0.f || lp.noiself2 > 0.f || lp.nlstr > 0 || lp.wavcurvedenoi || lp.noiselc > 0.f || lp.noisecf > 0.f || lp.noisecc > 0.f || execmaskden || aut == 1 || aut == 2) && lp.denoiena && lp.quamet != 3) || execdenoi) { // sk == 1 ?? @@ -8965,14 +9070,32 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl } } + + #ifdef _OPENMP const int numThreads = omp_get_max_threads(); #else const int numThreads = 1; #endif + int minwin = rtengine::min(GW, GH); + int maxlevelspot = 10;//maximum possible + bool isnois = true; + // adap maximum level wavelet to size of crop + while ((1 << maxlevelspot) >= (minwin * sk) && maxlevelspot > 1) { + --maxlevelspot ; + } - if (call == 1 && GW >= mDEN && GH >= mDEN) { + levred = rtengine::min(levred, maxlevelspot); + if(levred < 7) {//If windows preview or detail window too small exit to avoid artifacts + isnois = false; + if(lp.quamet == 2) { + isnois = true; + } + } + + // if (call == 1 && GW >= mDEN && GH >= mDEN) { + if (call == 1 && ((GW >= mDEN && GH >= mDEN && isnois) || lp.quamet == 2)) { LabImage tmp1(transformed->W, transformed->H); @@ -9540,8 +9663,10 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl } - if(lp.nlstr > 0 && (hspot > 150 && wspot > 150)) { + if(lp.nlstr > 0) { NLMeans(tmp1.L, lp.nlstr, lp.nldet, lp.nlpat, lp.nlrad, lp.nlgam, GW, GH, float (sk), multiThread); + // NLMeans(*nlm, lp.nlstr, lp.nldet, lp.nlpat, lp.nlrad, lp.nlgam, GW + addsiz, GH + addsiz, float (sk), multiThread); + } if(lp.smasktyp != 0) { if(lp.enablMask && lp.recothrd != 1.f) { @@ -10213,6 +10338,9 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl if(lp.nlstr > 0) { NLMeans(bufwv.L, lp.nlstr, lp.nldet, lp.nlpat, lp.nlrad, lp.nlgam, bfw, bfh, 1.f, multiThread); + // NLMeans(*nlm, lp.nlstr, lp.nldet, lp.nlpat, lp.nlrad, lp.nlgam, bfw + addsiz, bfh + addsiz, 1.f, multiThread); + + } @@ -10485,7 +10613,7 @@ void clarimerge(struct local_params& lp, float &mL, float &mC, bool &exec, LabIm } } -void ImProcFunctions::avoidcolshi(struct local_params& lp, int sp, LabImage * original, LabImage *transformed, int cy, int cx, int sk) +void ImProcFunctions::avoidcolshi(const struct local_params& lp, int sp, LabImage * original, LabImage *transformed, int cy, int cx, int sk) { if (params->locallab.spots.at(sp).avoid && lp.islocal) { const float ach = lp.trans / 100.f; @@ -10620,8 +10748,8 @@ void ImProcFunctions::avoidcolshi(struct local_params& lp, int sp, LabImage * or Color::pregamutlab(Lprov1, HH, chr); Chprov1 = rtengine::min(Chprov1, chr); - float R, G, B; if(!muns) { + float R, G, B; Color::gamutLchonly(HH, sincosval, Lprov1, Chprov1, R, G, B, wip, highlight, mint, maxt);//replace for best results } transformed->L[y][x] = Lprov1 * 327.68f; @@ -10872,13 +11000,11 @@ void ImProcFunctions::NLMeans(float **img, int strength, int detail_thresh, int if(scale > 5.f) {//avoid to small values - leads to crash - but enough to evaluate noise return; } - if(bfh < 150 || bfw < 150) { - return; - } BENCHFUN const int W = bfw; const int H = bfh; +// printf("W=%i H=%i\n", W, H); float gamma = gam; rtengine::GammaValues g_a; //gamma parameters double pwr = 1.0 / static_cast(gam);//default 3.0 - gamma Lab @@ -10901,7 +11027,6 @@ void ImProcFunctions::NLMeans(float **img, int strength, int detail_thresh, int img[y][x] = 65536.f * igammalog(img[y][x] / 32768.f, gamma, ts, g_a[2], g_a[4]); } } - // these two can be changed if needed. increasing max_patch_radius doesn't // affect performance, whereas max_search_radius *really* does // (the complexity is O(max_search_radius^2 * W * H)) @@ -10956,9 +11081,9 @@ void ImProcFunctions::NLMeans(float **img, int strength, int detail_thresh, int # pragma omp parallel for if (multithread) #endif for (int y = 0; y < HH; ++y) { - int yy = y <= border ? 0 : y >= H ? H-1 : y - border; + int yy = y <= border ? 0 : y - border >= H ? H-1 : y - border; for (int x = 0; x < WW; ++x) { - int xx = x <= border ? 0 : x >= W ? W-1 : x - border; + int xx = x <= border ? 0 : x - border >= W ? W-1 : x - border; float Y = img[yy][xx] / 65536.f; src[y][x] = Y; } @@ -10989,7 +11114,7 @@ void ImProcFunctions::NLMeans(float **img, int strength, int detail_thresh, int mask[y][x] = (1.f / (mask[y][x] * h2)) / lutfactor; } } - + // process by tiles to avoid numerical accuracy errors in the computation // of the integral image const int tile_size = 150; @@ -11103,7 +11228,7 @@ void ImProcFunctions::NLMeans(float **img, int strength, int detail_thresh, int } } // printf("E\n"); - + // Compute final estimate at pixel x = (x1, x2) for (int yy = start_y+border; yy < end_y-border; ++yy) { int y = yy - border; @@ -11158,7 +11283,7 @@ void ImProcFunctions::NLMeans(float **img, int strength, int detail_thresh, int } void ImProcFunctions::Lab_Local( - int call, int sp, float** shbuffer, LabImage * original, LabImage * transformed, LabImage * reserved, LabImage * lastorig, int cx, int cy, int oW, int oH, int sk, + int call, int sp, float** shbuffer, LabImage * original, LabImage * transformed, LabImage * reserved, LabImage * savenormtm, LabImage * savenormreti, LabImage * lastorig, int cx, int cy, int oW, int oH, int sk, const LocretigainCurve& locRETgainCcurve, const LocretitransCurve& locRETtransCcurve, const LUTf& lllocalcurve, bool locallutili, const LUTf& cllocalcurve, bool localclutili, @@ -11203,7 +11328,8 @@ void ImProcFunctions::Lab_Local( bool LHutili, bool HHutili, bool CHutili, const LUTf& cclocalcurve, bool localcutili, const LUTf& rgblocalcurve, bool localrgbutili, bool localexutili, const LUTf& exlocalcurve, const LUTf& hltonecurveloc, const LUTf& shtonecurveloc, const LUTf& tonecurveloc, const LUTf& lightCurveloc, double& huerefblur, double& chromarefblur, double& lumarefblur, double& hueref, double& chromaref, double& lumaref, double& sobelref, int &lastsav, bool prevDeltaE, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llsharMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, int lllogMask, int ll_Mask, - float& minCD, float& maxCD, float& mini, float& maxi, float& Tmean, float& Tsigma, float& Tmin, float& Tmax + float& minCD, float& maxCD, float& mini, float& maxi, float& Tmean, float& Tsigma, float& Tmin, float& Tmax, + float& meantm, float& stdtm, float& meanreti, float& stdreti ) { //general call of others functions : important return hueref, chromaref, lumaref @@ -11466,10 +11592,10 @@ void ImProcFunctions::Lab_Local( bool invmask = false; maskrecov(bufexpfin.get(), original, bufmaskoriglog.get(), bfh, bfw, ystart, xstart, hig, low, recoth, decay, invmask, sk, multiThread); } - transit_shapedetect2(call, 11, bufexporig.get(), bufexpfin.get(), originalmasklog.get(), hueref, chromaref, lumaref, sobelref, 0.f, nullptr, lp, original, transformed, cx, cy, sk); + transit_shapedetect2(sp, 0.f, 0.f, call, 11, bufexporig.get(), bufexpfin.get(), originalmasklog.get(), hueref, chromaref, lumaref, sobelref, 0.f, nullptr, lp, original, transformed, cx, cy, sk); } - if (params->locallab.spots.at(sp).recurs) { + if (lp.recur) { original->CopyFrom(transformed, multiThread); float avge; calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); @@ -12152,7 +12278,7 @@ void ImProcFunctions::Lab_Local( BlurNoise_Local(tmp1.get(), original, hueref, chromaref, lumaref, lp, original, transformed, cx, cy, sk); } - if (params->locallab.spots.at(sp).recurs) { + if (lp.recur) { original->CopyFrom(transformed, multiThread); float avge; calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); @@ -12165,7 +12291,7 @@ void ImProcFunctions::Lab_Local( InverseBlurNoise_Local(original, lp, hueref, chromaref, lumaref, original, transformed, tmp1.get(), cx, cy, sk); } - if (params->locallab.spots.at(sp).recurs) { + if (lp.recur) { original->CopyFrom(transformed, multiThread); float avge; calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); @@ -12217,7 +12343,7 @@ void ImProcFunctions::Lab_Local( DeNoise_Local(call, lp, originalmaskbl.get(), levred, huerefblur, lumarefblur, chromarefblur, original, transformed, *(bufwv.get()), cx, cy, sk); - if (params->locallab.spots.at(sp).recurs) { + if (lp.recur) { original->CopyFrom(transformed, multiThread); float avge; calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); @@ -12232,13 +12358,997 @@ void ImProcFunctions::Lab_Local( constexpr int aut = 0; DeNoise(call, slidL, slida, slidb, aut, noiscfactiv, lp, originalmaskbl.get(), bufmaskblurbl.get(), levred, huerefblur, lumarefblur, chromarefblur, original, transformed, cx, cy, sk, locwavCurvehue, locwavhueutili); - if (params->locallab.spots.at(sp).recurs) { + if (lp.recur) { original->CopyFrom(transformed, multiThread); float avge; calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); } } +//Tone mapping + + if ((lp.strengt != 0.f || lp.showmasktmmet == 2 || lp.enatmMask || lp.showmasktmmet == 3 || lp.showmasktmmet == 4 || lp.prevdE) && lp.tonemapena && !params->epd.enabled) { + if (call <= 3) { //simpleprocess dcrop improcc + const int ystart = rtengine::max(static_cast(lp.yc - lp.lyT) - cy, 0); + const int yend = rtengine::min(static_cast(lp.yc + lp.ly) - cy, original->H); + const int xstart = rtengine::max(static_cast(lp.xc - lp.lxL) - cx, 0); + const int xend = rtengine::min(static_cast(lp.xc + lp.lx) - cx, original->W); + const int bfh = yend - ystart; + const int bfw = xend - xstart; + + if (bfw >= mDEN && bfh >= mDEN) { + // printf("OK TM\n"); + array2D buflight(bfw, bfh); + JaggedArray bufchro(bfw, bfh); + std::unique_ptr bufgb(new LabImage(bfw, bfh)); + const std::unique_ptr tmp1(new LabImage(bfw, bfh)); + const std::unique_ptr bufgbm(new LabImage(bfw, bfh)); + const std::unique_ptr tmp1m(new LabImage(bfw, bfh)); + std::unique_ptr bufmaskorigtm; + std::unique_ptr bufmaskblurtm; + std::unique_ptr originalmasktm; + + // if (lp.showmasktmmet == 0 || lp.showmasktmmet == 2 || lp.enatmMask || lp.showmasktmmet == 3 || lp.showmasktmmet == 4) { + if (lp.showmasktmmet == 2 || lp.enatmMask || lp.showmasktmmet == 3 || lp.showmasktmmet == 4) { + bufmaskorigtm.reset(new LabImage(bfw, bfh)); + bufmaskblurtm.reset(new LabImage(bfw, bfh)); + originalmasktm.reset(new LabImage(bfw, bfh)); + } + + // 3 loops to avoid performance penalty on machines with 4-way L1 cache +#ifdef _OPENMP + #pragma omp parallel if (multiThread) + { + #pragma omp for schedule(dynamic,16) nowait +#endif + for (int y = ystart; y < yend; y++) { + for (int x = xstart; x < xend; x++) { + bufgbm->L[y - ystart][x - xstart] = bufgb->L[y - ystart][x - xstart] = original->L[y][x]; + } + } + +#ifdef _OPENMP + #pragma omp for schedule(dynamic,16) nowait +#endif + for (int y = ystart; y < yend; y++) { + for (int x = xstart; x < xend; x++) { + bufgbm->a[y - ystart][x - xstart] = bufgb->a[y - ystart][x - xstart] = original->a[y][x]; + } + } + +#ifdef _OPENMP + #pragma omp for schedule(dynamic,16) +#endif + for (int y = ystart; y < yend; y++) { + for (int x = xstart; x < xend; x++) { + bufgbm->b[y - ystart][x - xstart] = bufgb->b[y - ystart][x - xstart] = original->b[y][x]; + } + } +#ifdef _OPENMP + } +#endif + + int inv = 0; + bool showmaske = false; + bool enaMask = false; + bool deltaE = false; + bool modmask = false; + bool zero = false; + bool modif = false; + + if (lp.showmasktmmet == 3) { + showmaske = true; + } + + if (lp.enatmMask) { + enaMask = true; + } + + if (lp.showmasktmmet == 4) { + deltaE = true; + } + + if (lp.showmasktmmet == 2) { + modmask = true; + } + + if (lp.showmasktmmet == 1) { + modif = true; + } + + if (lp.showmasktmmet == 0) { + zero = true; + } + + float chrom = lp.chromatm;; + float rad = lp.radmatm; + float gamma = lp.gammatm; + float slope = lp.slomatm; + float blendm = lp.blendmatm; + float lap = params->locallab.spots.at(sp).lapmasktm; + bool pde = params->locallab.spots.at(sp).laplac; + int lumask = params->locallab.spots.at(sp).lumask; + + if (!params->locallab.spots.at(sp).enatmMaskaft) { + LocwavCurve dummy; + int sco = params->locallab.spots.at(sp).scopemask; + int shortcu = 0; //lp.mergemet;// params->locallab.spots.at(sp).shortc; + + const float mindE = 2.f + MINSCOPE * sco * lp.thr; + const float maxdE = 5.f + MAXSCOPE * sco * (1 + 0.1f * lp.thr); + const float mindElim = 2.f + MINSCOPE * limscope * lp.thr; + const float maxdElim = 5.f + MAXSCOPE * limscope * (1 + 0.1f * lp.thr); + int shado = 0; + float amountcd = 0.f; + float anchorcd = 50.f; + LocHHmaskCurve lochhhmasCurve; + const int highl = 0; + + maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufgbm.get(), bufmaskorigtm.get(), originalmasktm.get(), original, reserved, inv, lp, + 0.f, false, + locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, lochhhmasCurve, false, multiThread, + enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, highl, amountcd, anchorcd, lmasktmlocalcurve, localmasktmutili, dummy, false, 1, 1, 5, 5, + shortcu, params->locallab.spots.at(sp).deltae, hueref, chromaref, lumaref, + maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, -1 + ); + + if (lp.showmasktmmet == 3) { + showmask(lumask, lp, xstart, ystart, cx, cy, bfw, bfh, bufgbm.get(), transformed, bufmaskorigtm.get(), 0); + + return; + } + } + + if (lp.showmasktmmet == 0 || lp.showmasktmmet == 1 || lp.showmasktmmet == 2 || lp.showmasktmmet == 4 || lp.showmasktmmet == 3 || lp.enatmMask) { + constexpr int itera = 0; + ImProcFunctions::EPDToneMaplocal(sp, bufgb.get(), tmp1.get(), itera, sk);//iterate to 0 calculate with edgstopping, improve result, call=1 dcrop we can put iterate to 5 + + tmp1m->CopyFrom(tmp1.get(), multiThread); //save current result7 + if(params->locallab.spots.at(sp).equiltm && params->locallab.spots.at(sp).exptonemap) { + if(call == 3) { +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) if (multiThread) +#endif + for (int y = ystart; y < yend; y++) { + for (int x = xstart; x < xend; x++) { + savenormtm->L[y][x] = tmp1->L[y - ystart][x - xstart]; + savenormtm->a[y][x] = tmp1->a[y - ystart][x - xstart]; + savenormtm->b[y][x] = tmp1->b[y - ystart][x - xstart]; + } + } + } + } + bool enatmMasktmap = params->locallab.spots.at(sp).enatmMaskaft; + + if (enatmMasktmap) { + //calculate new values for original, originalmasktm, bufmaskorigtm...in function of tmp1 + LocwavCurve dummy; + int sco = params->locallab.spots.at(sp).scopemask; + int shortcu = 0;//lp.mergemet; //params->locallab.spots.at(sp).shortc; + + const float mindE = 2.f + MINSCOPE * sco * lp.thr; + const float maxdE = 5.f + MAXSCOPE * sco * (1 + 0.1f * lp.thr); + const float mindElim = 2.f + MINSCOPE * limscope * lp.thr; + const float maxdElim = 5.f + MAXSCOPE * limscope * (1 + 0.1f * lp.thr); + int shado = 0; + float amountcd = 0.f; + float anchorcd = 50.f; + LocHHmaskCurve lochhhmasCurve; + const int highl = 0; + + maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, tmp1.get(), bufmaskorigtm.get(), originalmasktm.get(), original, reserved, inv, lp, + 0.f, false, + locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, lochhhmasCurve, false, multiThread, + enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, highl, amountcd, anchorcd, lmasktmlocalcurve, localmasktmutili, dummy, false, 1, 1, 5, 5, + shortcu, params->locallab.spots.at(sp).deltae, hueref, chromaref, lumaref, + maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, -1 + ); + + if (lp.showmasktmmet == 3) {//display mask + showmask(params->locallab.spots.at(sp).lumask, lp, xstart, ystart, cx, cy, bfw, bfh, tmp1.get(), transformed, bufmaskorigtm.get(), 0); + return; + } + + } + + tmp1->CopyFrom(tmp1m.get(), multiThread); //restore current result + + + float minL = tmp1->L[0][0] - bufgb->L[0][0]; + float maxL = minL; + float minC = std::sqrt(SQR(tmp1->a[0][0]) + SQR(tmp1->b[0][0])) - std::sqrt(SQR(bufgb->a[0][0]) + SQR(bufgb->b[0][0])); + float maxC = minC; + +#ifdef _OPENMP + #pragma omp parallel for reduction(max:maxL) reduction(min:minL) reduction(max:maxC) reduction(min:minC) schedule(dynamic,16) if (multiThread) +#endif + for (int ir = 0; ir < bfh; ir++) { + for (int jr = 0; jr < bfw; jr++) { + buflight[ir][jr] = tmp1->L[ir][jr] - bufgb->L[ir][jr]; + minL = rtengine::min(minL, buflight[ir][jr]); + maxL = rtengine::max(maxL, buflight[ir][jr]); + bufchro[ir][jr] = std::sqrt(SQR(tmp1->a[ir][jr]) + SQR(tmp1->b[ir][jr])) - std::sqrt(SQR(bufgb->a[ir][jr]) + SQR(bufgb->b[ir][jr])); + minC = rtengine::min(minC, bufchro[ir][jr]); + maxC = rtengine::max(maxC, bufchro[ir][jr]); + } + } + + float coef = 0.01f * rtengine::max(std::fabs(minL), std::fabs(maxL)); + float coefC = 0.01f * rtengine::max(std::fabs(minC), std::fabs(maxC)); + + if (coef == 0.f) { + coef = 1.f; + } else { + coef = 1.f / coef; + } + + if (coefC == 0.f) { + coefC = 1.f; + } else { + coefC = 1.f / coefC; + } + +#ifdef _OPENMP + #pragma omp parallel for if (multiThread) +#endif + for (int y = 0; y < bfh; y++) { + for (int x = 0; x < bfw; x++) { + buflight[y][x] *= coef; + bufchro[y][x] *= coefC; + } + } + + if(lp.enatmMask && lp.recothrt != 1.f) { + float hig = lp.higthrt; + float low = lp.lowthrt; + float recoth = lp.recothrt; + float decay = lp.decayt; + bool invmask = false; + maskrecov(tmp1.get(), original, bufmaskorigtm.get(), bfh, bfw, ystart, xstart, hig, low, recoth, decay, invmask, sk, multiThread); + } + + // transit_shapedetect_retinex(call, 4, bufgb.get(),bufmaskorigtm.get(), originalmasktm.get(), buflight, bufchro, hueref, chromaref, lumaref, lp, original, transformed, cx, cy, sk); + + + transit_shapedetect2(sp, meantm, stdtm, call, 8, bufgb.get(), tmp1.get(), originalmasktm.get(), hueref, chromaref, lumaref, sobelref, 0.f, nullptr, lp, original, transformed, cx, cy, sk); + + // transit_shapedetect(8, tmp1.get(), originalmasktm.get(), bufchro, false, hueref, chromaref, lumaref, sobelref, 0.f, nullptr, lp, original, transformed, cx, cy, sk); + bufgb.reset(); + + if (lp.recur) { + original->CopyFrom(transformed, multiThread); + float avge; + calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); + } + } + } + } + } + +//end TM + + + if ((lp.dehaze != 0 || lp.prevdE) && lp.retiena ) { + int ystart = rtengine::max(static_cast(lp.yc - lp.lyT) - cy, 0); + int yend = rtengine::min(static_cast(lp.yc + lp.ly) - cy, original->H); + int xstart = rtengine::max(static_cast(lp.xc - lp.lxL) - cx, 0); + int xend = rtengine::min(static_cast(lp.xc + lp.lx) - cx, original->W); + int bfh = yend - ystart; + int bfw = xend - xstart; + + if (bfh >= mSP && bfw >= mSP) { + const std::unique_ptr bufexporig(new LabImage(bfw, bfh)); //buffer for data in zone limit + const std::unique_ptr bufexpfin(new LabImage(bfw, bfh)); //buffer for data in zone limit + +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) if (multiThread) +#endif + for (int y = ystart; y < yend; y++) { + for (int x = xstart; x < xend; x++) { + bufexporig->L[y - ystart][x - xstart] = original->L[y][x]; + bufexporig->a[y - ystart][x - xstart] = original->a[y][x]; + bufexporig->b[y - ystart][x - xstart] = original->b[y][x]; + } + } + + bufexpfin->CopyFrom(bufexporig.get(), multiThread); + //calc dehaze + const std::unique_ptr tmpImage(new Imagefloat(bfw, bfh)); + + DehazeParams dehazeParams; + dehazeParams.enabled = true; + dehazeParams.strength = lp.dehaze; + dehazeParams.showDepthMap = false; + dehazeParams.saturation = lp.dehazeSaturation; + dehazeParams.depth = lp.depth; + lab2rgb(*bufexpfin, *tmpImage.get(), params->icm.workingProfile); + dehazeloc(tmpImage.get(), dehazeParams); + 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); + + if (lp.recur) { + original->CopyFrom(transformed, multiThread); + float avge; + calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); + } + } + } + + lp.invret = false;//always disabled inverse RETI too complex todo !! + + if (lp.str >= 0.2f && lp.retiena && call != 2) { + LabImage *bufreti = nullptr; + LabImage *bufmask = nullptr; + LabImage *buforig = nullptr; + LabImage *buforigmas = nullptr; + LabImage *bufmaskorigreti = nullptr; + + if (TW >= mSP && TH >= mSP) { + + array2D buflight(TW, TH); + JaggedArray bufchro(TW, TH); + + int Hd, Wd; + Hd = TH; + Wd = TW; + + bufreti = new LabImage(TW, TH); + bufmask = new LabImage(TW, TH); + bufmaskorigreti = new LabImage(TW, TH); + + if (!lp.enaretiMasktmap && lp.enaretiMask) { + buforig = new LabImage(TW, TH); + buforigmas = new LabImage(TW, TH); + // bufmaskorigreti = new LabImage(GW, GH); + } + +#ifdef _OPENMP + #pragma omp parallel for if (multiThread) +#endif + for (int ir = 0; ir < TH; ir++) //fill with 0 + for (int jr = 0; jr < TW; jr++) { + bufreti->L[ir][jr] = 0.f; + bufreti->a[ir][jr] = 0.f; + bufreti->b[ir][jr] = 0.f; + buflight[ir][jr] = 0.f; + bufchro[ir][jr] = 0.f; + } + +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) if (multiThread) +#endif + for (int y = 0; y < transformed->H ; y++) //{ + for (int x = 0; x < transformed->W; x++) { + bufreti->L[y][x] = original->L[y][x]; + bufreti->a[y][x] = original->a[y][x]; + bufreti->b[y][x] = original->b[y][x]; + bufmask->L[y][x] = original->L[y][x]; + bufmask->a[y][x] = original->a[y][x]; + bufmask->b[y][x] = original->b[y][x]; + + + + if (!lp.enaretiMasktmap && lp.enaretiMask) { + buforig->L[y][x] = original->L[y][x]; + buforig->a[y][x] = original->a[y][x]; + buforig->b[y][x] = original->b[y][x]; + + // bufmaskorigreti->L[y][x] = original->L[y][x]; + // bufmaskorigreti->a[y][x] = original->a[y][x]; + // bufmaskorigreti->b[y][x] = original->b[y][x]; + + + } + + } + float raddE = params->locallab.spots.at(sp).softradiusret; + + //calc dE and reduction to use in MSR to reduce artifacts + const float mindE = 4.f + MINSCOPE * lp.sensh * lp.thr; + const float maxdE = 5.f + MAXSCOPE * lp.sensh * (1 + 0.1f * lp.thr); + const float mindElim = 2.f + MINSCOPE * limscope * lp.thr; + const float maxdElim = 5.f + MAXSCOPE * limscope * (1 + 0.1f * lp.thr); + const float refa = chromaref * cos(hueref); + const float refb = chromaref * sin(hueref); + + const std::unique_ptr> reducDEBuffer(new JaggedArray(Wd, Hd)); + float** reducDE = *(reducDEBuffer.get()); + + float ade = 0.01f * raddE; + float bde = 100.f - raddE; + float sensibefore = ade * lp.sensh + bde;//we can change sensitivity 0.1 90 or 0.3 70 or 0.4 60 +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) if (multiThread) +#endif + for (int y = 0; y < transformed->H ; y++) + for (int x = 0; x < transformed->W; x++) { + float dE = std::sqrt(SQR(refa - bufreti->a[y][x] / 327.68f) + SQR(refb - bufreti->b[y][x] / 327.68f) + SQR(static_cast(lumaref) - bufreti->b[y][x] / 327.68f)); + const float reducdE = calcreducdE(dE, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sensibefore); + reducDE[y][x] = clipDE(reducdE); + } + + const std::unique_ptr> origBuffer(new JaggedArray(Wd, Hd)); + float** orig = *(origBuffer.get()); + + const std::unique_ptr> origBuffer1(new JaggedArray(Wd, Hd)); + float** orig1 = *(origBuffer1.get()); + +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) if (multiThread) +#endif + for (int ir = 0; ir < Hd; ir += 1) + for (int jr = 0; jr < Wd; jr += 1) { + orig[ir][jr] = bufreti->L[ir][jr]; + orig1[ir][jr] = bufreti->L[ir][jr]; + } + + LabImage *tmpl = new LabImage(Wd, Hd); + + bool fftw = lp.ftwreti; + //for Retinex Mask are incorporated in MSR + int sco = params->locallab.spots.at(sp).scopemask; + float lumask = params->locallab.spots.at(sp).lumask; + + const float mindE2 = 2.f + MINSCOPE * sco * lp.thr; + const float maxdE2 = 5.f + MAXSCOPE * sco * (1 + 0.1f * lp.thr); + const float mindElim2 = 2.f + MINSCOPE * limscope * lp.thr; + const float maxdElim2 = 5.f + MAXSCOPE * limscope * (1 + 0.1f * lp.thr); + ImProcFunctions::MSRLocal(call, sp, fftw, 1, reducDE, bufreti, bufmask, buforig, buforigmas, bufmaskorigreti, orig, orig1, + Wd, Hd, Wd, Hd, params->locallab, sk, locRETgainCcurve, locRETtransCcurve, 0, 4, 1.f, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax, + locccmasretiCurve, lcmasretiutili, locllmasretiCurve, llmasretiutili, lochhmasretiCurve, lhmasretiutili, llretiMask, + lmaskretilocalcurve, localmaskretiutili, + transformed, lp.enaretiMasktmap, lp.enaretiMask, + params->locallab.spots.at(sp).deltae, hueref, chromaref, lumaref, + maxdE2, mindE2, maxdElim2, mindElim2, lp.iterat, limscope, sco, lp.balance, lp.balanceh, lumask); +#ifdef _OPENMP + #pragma omp parallel for if (multiThread) +#endif + for (int ir = 0; ir < Hd; ir += 1) { + for (int jr = 0; jr < Wd; jr += 1) { + tmpl->L[ir][jr] = orig[ir][jr]; + if(params->locallab.spots.at(sp).equilret && params->locallab.spots.at(sp).expreti) { + if(call == 3) { + savenormreti->L[ir][jr] = tmpl->L[ir][jr]; + } + } + } + } + + if (lp.equret) { //equilibrate luminance before / after MSR + float *datain = new float[Hd * Wd]; + float *data = new float[Hd * Wd]; +#ifdef _OPENMP + #pragma omp parallel for if (multiThread) +#endif + for (int ir = 0; ir < Hd; ir += 1) + for (int jr = 0; jr < Wd; jr += 1) { + datain[ir * Wd + jr] = orig1[ir][jr]; + data[ir * Wd + jr] = orig[ir][jr]; + } + + if(params->locallab.spots.at(sp).equilret){ + if(call == 3) {//improccoordinator + normalize_mean_dt(data, datain, Hd * Wd, 1.f, 1.f, 0.f, 0.f, 0.f, 0.f); + } else if(call == 1) {//dcrop + float ma = meanreti; + float sa = stdreti; + float ma2 = (float) params->locallab.spots.at(sp).sensihs; + float sa2 = (float) params->locallab.spots.at(sp).sensiv; + //printf("ma=%f sa=%f ma2=%f sa2=%f\n", (double) ma, (double) sa, (double) ma2, (double) sa2); + //use normalize with mean and stdv + normalize_mean_dt(data, datain, Hd * Wd, 1.f, 1.f, ma, sa, ma2, sa2); + + } + } + +#ifdef _OPENMP + #pragma omp parallel for if (multiThread) +#endif + for (int ir = 0; ir < Hd; ir += 1) + for (int jr = 0; jr < Wd; jr += 1) { + tmpl->L[ir][jr] = data[ir * Wd + jr]; + } + + delete [] datain; + delete [] data; + } + + if(lp.enaretiMask && lp.recothrr != 1.f) { + float hig = lp.higthrr; + float low = lp.lowthrr; + float recoth = lp.recothrr; + float decay = lp.decayr; + bool invmask = false; + maskrecov(tmpl, original, bufmaskorigreti, Hd, Wd, 0, 0, hig, low, recoth, decay, invmask, sk, multiThread); + } + + float minL = tmpl->L[0][0] - bufreti->L[0][0]; + float maxL = minL; +#ifdef _OPENMP + #pragma omp parallel for reduction(min:minL) reduction(max:maxL) schedule(dynamic,16) if (multiThread) +#endif + for (int ir = 0; ir < Hd; ir++) { + for (int jr = 0; jr < Wd; jr++) { + buflight[ir][jr] = tmpl->L[ir][jr] - bufreti->L[ir][jr]; + minL = rtengine::min(minL, buflight[ir][jr]); + maxL = rtengine::max(maxL, buflight[ir][jr]); + } + } + + const float coef = 0.01f * rtengine::max(std::fabs(minL), std::fabs(maxL)); + + for (int ir = 0; ir < Hd; ir++) { + for (int jr = 0; jr < Wd; jr++) { + buflight[ir][jr] /= coef; + } + } + + transit_shapedetect_retinex(call, 4, bufreti, tmpl, bufmask, buforigmas, buflight, bufchro, hueref, chromaref, lumaref, lp, original, transformed, cx, cy, sk); + + if (lp.recur) { + original->CopyFrom(transformed, multiThread); + float avge; + calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); + } + + if (params->locallab.spots.at(sp).chrrt > 0) { + + if (call == 1) { + +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) if (multiThread) +#endif + for (int ir = 0; ir < Hd; ir += 1) + for (int jr = 0; jr < Wd; jr += 1) { + + orig[ir][jr] = std::sqrt(SQR(bufreti->a[ir][jr]) + SQR(bufreti->b[ir][jr])); + orig1[ir][jr] = std::sqrt(SQR(bufreti->a[ir][jr]) + SQR(bufreti->b[ir][jr])); + } + + } + + float maxChro = orig1[0][0]; +#ifdef _OPENMP + #pragma omp parallel for reduction(max:maxChro) schedule(dynamic,16) if (multiThread) +#endif + for (int ir = 0; ir < Hd; ir++) { + for (int jr = 0; jr < Wd; jr++) { + maxChro = rtengine::max(maxChro, orig1[ir][jr]); + } + } + + float divchro = maxChro; + + //first step change saturation without Retinex ==> gain of time and memory + float satreal = lp.str * static_cast(params->locallab.spots.at(sp).chrrt) / 100.f; + + if (params->locallab.spots.at(sp).chrrt <= 0.2) { + satreal /= 10.f; + } + + DiagonalCurve reti_satur({ + DCT_NURBS, + 0, 0, + 0.2, 0.2f + satreal / 250.f, + 0.6, rtengine::min(1.f, 0.6f + satreal / 250.f), + 1, 1 + }); + + if (call == 1) { + +#ifdef _OPENMP + #pragma omp parallel for if (multiThread) +#endif + for (int ir = 0; ir < Hd; ir += 1) + for (int jr = 0; jr < Wd; jr += 1) { + const float Chprov = orig1[ir][jr]; + float2 sincosval; + sincosval.y = Chprov == 0.0f ? 1.f : bufreti->a[ir][jr] / Chprov; + sincosval.x = Chprov == 0.0f ? 0.f : bufreti->b[ir][jr] / Chprov; + + if (params->locallab.spots.at(sp).chrrt <= 100.0) { //first step + float buf = LIM01(orig[ir][jr] / divchro); + buf = reti_satur.getVal(buf); + buf *= divchro; + orig[ir][jr] = buf; + } + + tmpl->a[ir][jr] = orig[ir][jr] * sincosval.y; + tmpl->b[ir][jr] = orig[ir][jr] * sincosval.x; + } + + float minC = std::sqrt(SQR(tmpl->a[0][0]) + SQR(tmpl->b[0][0])) - orig1[0][0]; + float maxC = minC; +#ifdef _OPENMP + #pragma omp parallel for reduction(min:minC) reduction(max:maxC) schedule(dynamic,16) if (multiThread) +#endif + for (int ir = 0; ir < Hd; ir++) { + for (int jr = 0; jr < Wd; jr++) { + bufchro[ir][jr] = std::sqrt(SQR(tmpl->a[ir][jr]) + SQR(tmpl->b[ir][jr])) - orig1[ir][jr]; + minC = rtengine::min(minC, bufchro[ir][jr]); + maxC = rtengine::max(maxC, bufchro[ir][jr]); + } + } + + float coefC = 0.01f * rtengine::max(std::fabs(minC), std::fabs(maxC)); + + if (coefC > 0.f) { + coefC = 1.f / coefC; +#ifdef _OPENMP + #pragma omp parallel for if (multiThread) +#endif + for (int ir = 0; ir < Hd; ir++) { + for (int jr = 0; jr < Wd; jr++) { + bufchro[ir][jr] *= coefC; + } + } + } + } + + transit_shapedetect_retinex(call, 5, tmpl, tmpl, bufmask, buforigmas, buflight, bufchro, hueref, chromaref, lumaref, lp, original, transformed, cx, cy, sk); + + if (lp.recur) { + original->CopyFrom(transformed, multiThread); + float avge; + calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); + } + } + + delete tmpl; + delete bufmask; + delete bufmaskorigreti; + + if (!lp.enaretiMasktmap && lp.enaretiMask) { + if (buforig) { + delete buforig; + } + + if (buforigmas) { + delete buforigmas; + } + } + delete bufreti; + } + } + + + + if (lp.str >= 0.2f && lp.retiena && call == 2) { + int ystart = rtengine::max(static_cast(lp.yc - lp.lyT) - cy, 0); + int yend = rtengine::min(static_cast(lp.yc + lp.ly) - cy, original->H); + int xstart = rtengine::max(static_cast(lp.xc - lp.lxL) - cx, 0); + int xend = rtengine::min(static_cast(lp.xc + lp.lx) - cx, original->W); + int bfh = yend - ystart; + int bfw = xend - xstart; + + LabImage *bufreti = nullptr; + LabImage *bufmask = nullptr; + LabImage *buforig = nullptr; + LabImage *buforigmas = nullptr; + LabImage *bufmaskorigreti = nullptr; + int bfhr = bfh; + int bfwr = bfw; + + if (bfw >= mSP && bfh > mSP) { + if (lp.ftwreti) { + optfft(N_fftwsize, bfh, bfw, bfhr, bfwr, lp, original->H, original->W, xstart, ystart, xend, yend, cx, cy); + } + + array2D buflight(bfw, bfh); + JaggedArray bufchro(bfw, bfh); + + int Hd, Wd; + Hd = TH; + Wd = TW; + + if (!lp.invret && call == 2) { + + Hd = bfh; + Wd = bfw; + bufreti = new LabImage(bfw, bfh); + bufmask = new LabImage(bfw, bfh); + bufmaskorigreti = new LabImage(bfw, bfh); + + if (!lp.enaretiMasktmap && lp.enaretiMask) { + buforig = new LabImage(bfw, bfh); + buforigmas = new LabImage(bfw, bfh); + } + +#ifdef _OPENMP + #pragma omp parallel for if (multiThread) +#endif + for (int ir = 0; ir < bfh; ir++) //fill with 0 + for (int jr = 0; jr < bfw; jr++) { + bufreti->L[ir][jr] = 0.f; + bufreti->a[ir][jr] = 0.f; + bufreti->b[ir][jr] = 0.f; + buflight[ir][jr] = 0.f; + bufchro[ir][jr] = 0.f; + } + + +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) if (multiThread) +#endif + for (int y = ystart; y < yend; y++) { + for (int x = xstart; x < xend; x++) { + bufreti->L[y - ystart][x - xstart] = original->L[y][x]; + bufreti->a[y - ystart][x - xstart] = original->a[y][x]; + bufreti->b[y - ystart][x - xstart] = original->b[y][x]; + bufmask->L[y - ystart][x - xstart] = original->L[y][x]; + bufmask->a[y - ystart][x - xstart] = original->a[y][x]; + bufmask->b[y - ystart][x - xstart] = original->b[y][x]; + + if (!lp.enaretiMasktmap && lp.enaretiMask) { + buforig->L[y - ystart][x - xstart] = original->L[y][x]; + buforig->a[y - ystart][x - xstart] = original->a[y][x]; + buforig->b[y - ystart][x - xstart] = original->b[y][x]; + } + } + } + } + + float raddE = params->locallab.spots.at(sp).softradiusret; + + //calc dE and reduction to use in MSR to reduce artifacts + const float mindE = 4.f + MINSCOPE * lp.sensh * lp.thr; + const float maxdE = 5.f + MAXSCOPE * lp.sensh * (1 + 0.1f * lp.thr); + const float mindElim = 2.f + MINSCOPE * limscope * lp.thr; + const float maxdElim = 5.f + MAXSCOPE * limscope * (1 + 0.1f * lp.thr); + const float refa = chromaref * cos(hueref); + const float refb = chromaref * sin(hueref); + + const std::unique_ptr> reducDEBuffer(new JaggedArray(Wd, Hd)); + float** reducDE = *(reducDEBuffer.get()); + float ade = 0.01f * raddE; + float bde = 100.f - raddE; + float sensibefore = ade * lp.sensh + bde;//we can change sensitivity 0.1 90 or 0.3 70 or 0.4 60 +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) if (multiThread) +#endif + for (int y = ystart; y < yend ; y++) { + for (int x = xstart; x < xend; x++) { + const float dE = std::sqrt(SQR(refa - bufreti->a[y - ystart][x - xstart] / 327.68f) + SQR(refb - bufreti->b[y - ystart][x - xstart] / 327.68f) + SQR(static_cast(lumaref) - bufreti->b[y - ystart][x - xstart] / 327.68f)); + const float reducdE = calcreducdE(dE, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sensibefore); + reducDE[y - ystart][x - xstart] = clipDE(reducdE); + } + } + + const std::unique_ptr> origBuffer(new JaggedArray(Wd, Hd)); + float** orig = *(origBuffer.get()); + + const std::unique_ptr> origBuffer1(new JaggedArray(Wd, Hd)); + float** orig1 = *(origBuffer1.get()); + + LabImage *tmpl = nullptr; + + if (!lp.invret && call == 2) { +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) if (multiThread) +#endif + for (int ir = 0; ir < Hd; ir += 1) { + for (int jr = 0; jr < Wd; jr += 1) { + orig[ir][jr] = bufreti->L[ir][jr]; + orig1[ir][jr] = bufreti->L[ir][jr]; + } + } + + tmpl = new LabImage(Wd, Hd); + } + + // float minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax; + bool fftw = lp.ftwreti; + //for Retinex Mask are incorporated in MSR + int sco = params->locallab.spots.at(sp).scopemask; + float lumask = params->locallab.spots.at(sp).lumask; + + const float mindE2 = 2.f + MINSCOPE * sco * lp.thr; + const float maxdE2 = 5.f + MAXSCOPE * sco * (1 + 0.1f * lp.thr); + const float mindElim2 = 2.f + MINSCOPE * limscope * lp.thr; + const float maxdElim2 = 5.f + MAXSCOPE * limscope * (1 + 0.1f * lp.thr); + + ImProcFunctions::MSRLocal(call, sp, fftw, 1, reducDE, bufreti, bufmask, buforig, buforigmas, bufmaskorigreti, orig, orig1, + Wd, Hd, bfwr, bfhr, params->locallab, sk, locRETgainCcurve, locRETtransCcurve, 0, 4, 1.f, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax, + locccmasretiCurve, lcmasretiutili, locllmasretiCurve, llmasretiutili, lochhmasretiCurve, lhmasretiutili, llretiMask, + lmaskretilocalcurve, localmaskretiutili, + transformed, lp.enaretiMasktmap, lp.enaretiMask, + params->locallab.spots.at(sp).deltae, hueref, chromaref, lumaref, + maxdE2, mindE2, maxdElim2, mindElim2, lp.iterat, limscope, sco, lp.balance, lp.balanceh, lumask); + +#ifdef _OPENMP + #pragma omp parallel for if (multiThread) +#endif + for (int ir = 0; ir < Hd; ir += 1) + for (int jr = 0; jr < Wd; jr += 1) { + tmpl->L[ir][jr] = orig[ir][jr]; + } + + + if (lp.equret) { //equilibrate luminance before / after MSR + const std::unique_ptr datain(new float[Hd * Wd]); + const std::unique_ptr data(new float[Hd * Wd]); +#ifdef _OPENMP + #pragma omp parallel for if (multiThread) +#endif + for (int ir = 0; ir < Hd; ir += 1) { + for (int jr = 0; jr < Wd; jr += 1) { + datain[ir * Wd + jr] = orig1[ir][jr]; + data[ir * Wd + jr] = orig[ir][jr]; + } + } + + normalize_mean_dt(data.get(), datain.get(), Hd * Wd, 1.f, 1.f, 0.f, 0.f, 0.f, 0.f); +#ifdef _OPENMP + #pragma omp parallel for if (multiThread) +#endif + for (int ir = 0; ir < Hd; ir += 1) { + for (int jr = 0; jr < Wd; jr += 1) { + tmpl->L[ir][jr] = data[ir * Wd + jr]; + } + } + } + if(lp.enaretiMask && lp.recothrr != 1.f) { + float hig = lp.higthrr; + float low = lp.lowthrr; + float recoth = lp.recothrr; + float decay = lp.decayr; + bool invmask = false; + maskrecov(tmpl, original, bufmaskorigreti, Hd, Wd, ystart, xstart, hig, low, recoth, decay, invmask, sk, multiThread); + } + + if (!lp.invret) { + float minL = tmpl->L[0][0] - bufreti->L[0][0]; + float maxL = minL; +#ifdef _OPENMP + #pragma omp parallel for reduction(min:minL) reduction(max:maxL) schedule(dynamic,16) if (multiThread) +#endif + for (int ir = 0; ir < Hd; ir++) { + for (int jr = 0; jr < Wd; jr++) { + buflight[ir][jr] = tmpl->L[ir][jr] - bufreti->L[ir][jr]; + minL = rtengine::min(minL, buflight[ir][jr]); + maxL = rtengine::max(maxL, buflight[ir][jr]); + } + } + + float coef = 0.01f * rtengine::max(std::fabs(minL), std::fabs(maxL)); + + if (coef > 0.f) { + coef = 1.f / coef; +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) if (multiThread) +#endif + for (int ir = 0; ir < Hd; ir++) { + for (int jr = 0; jr < Wd; jr++) { + buflight[ir][jr] *= coef; + } + } + } + + transit_shapedetect_retinex(call, 4, bufreti, tmpl, bufmask, buforigmas, buflight, bufchro, hueref, chromaref, lumaref, lp, original, transformed, cx, cy, sk); + + if (lp.recur) { + original->CopyFrom(transformed, multiThread); + float avge; + calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); + } + } + + if (params->locallab.spots.at(sp).chrrt > 0) { + if (!lp.invret && call == 2) { +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) if (multiThread) +#endif + for (int ir = 0; ir < Hd; ir += 1) { + for (int jr = 0; jr < Wd; jr += 1) { + orig[ir][jr] = std::sqrt(SQR(bufreti->a[ir][jr]) + SQR(bufreti->b[ir][jr])); + orig1[ir][jr] = std::sqrt(SQR(bufreti->a[ir][jr]) + SQR(bufreti->b[ir][jr])); + } + } + } + + float maxChro = orig1[0][0]; +#ifdef _OPENMP + #pragma omp parallel for reduction(max:maxChro) schedule(dynamic,16) if (multiThread) +#endif + for (int ir = 0; ir < Hd; ir++) { + for (int jr = 0; jr < Wd; jr++) { + maxChro = rtengine::max(maxChro, orig1[ir][jr]); + } + } + + //first step change saturation without Retinex ==> gain of time and memory + float satreal = lp.str * static_cast(params->locallab.spots.at(sp).chrrt) / 100.f; + + if (params->locallab.spots.at(sp).chrrt <= 0.2) { + satreal /= 10.f; + } + + DiagonalCurve reti_satur({ + DCT_NURBS, + 0, 0, + 0.2, 0.2f + satreal / 250.f, + 0.6, rtengine::min(1.f, 0.6f + satreal / 250.f), + 1, 1 + }); + + if (!lp.invret && call == 2) { + +#ifdef _OPENMP + #pragma omp parallel for if (multiThread) +#endif + for (int ir = 0; ir < Hd; ir += 1) { + for (int jr = 0; jr < Wd; jr += 1) { + const float Chprov = orig1[ir][jr]; + float2 sincosval; + sincosval.y = Chprov == 0.0f ? 1.f : bufreti->a[ir][jr] / Chprov; + sincosval.x = Chprov == 0.0f ? 0.f : bufreti->b[ir][jr] / Chprov; + + if (params->locallab.spots.at(sp).chrrt <= 40.0) { //first step + orig[ir][jr] = static_cast(reti_satur.getVal(LIM01(orig[ir][jr] / maxChro))) * maxChro; + } + + tmpl->a[ir][jr] = orig[ir][jr] * sincosval.y; + tmpl->b[ir][jr] = orig[ir][jr] * sincosval.x; + } + } + + float minC = std::sqrt(SQR(tmpl->a[0][0]) + SQR(tmpl->b[0][0])) - orig1[0][0]; + float maxC = minC; +#ifdef _OPENMP + #pragma omp parallel for reduction(min:minC) reduction(max:maxC) schedule(dynamic,16) if (multiThread) +#endif + for (int ir = 0; ir < Hd; ir++) { + for (int jr = 0; jr < Wd; jr++) { + bufchro[ir][jr] = std::sqrt(SQR(tmpl->a[ir][jr]) + SQR(tmpl->b[ir][jr])) - orig1[ir][jr]; + minC = rtengine::min(minC, bufchro[ir][jr]); + maxC = rtengine::max(maxC, bufchro[ir][jr]); + } + } + + float coefC = 0.01f * rtengine::max(std::fabs(minC), std::fabs(maxC)); + + if (coefC > 0.f) { + coefC = 1.f / coefC; +#ifdef _OPENMP + #pragma omp parallel for if (multiThread) +#endif + for (int ir = 0; ir < Hd; ir++) { + for (int jr = 0; jr < Wd; jr++) { + bufchro[ir][jr] *= coefC; + } + } + } + } + + if (!lp.invret) { + transit_shapedetect_retinex(call, 5, tmpl, tmpl, bufmask, buforigmas, buflight, bufchro, hueref, chromaref, lumaref, lp, original, transformed, cx, cy, sk); + + if (lp.recur) { + original->CopyFrom(transformed, multiThread); + float avge; + calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); + } + } + } + + delete tmpl; + delete bufmask; + delete bufmaskorigreti; + + if (!lp.enaretiMasktmap && lp.enaretiMask) { + if (buforig) { + delete buforig; + } + + if (buforigmas) { + delete buforigmas; + } + } + delete bufreti; + } + } + //begin cbdl if ((lp.mulloc[0] != 1.f || lp.mulloc[1] != 1.f || lp.mulloc[2] != 1.f || lp.mulloc[3] != 1.f || lp.mulloc[4] != 1.f || lp.mulloc[5] != 1.f || lp.clarityml != 0.f || lp.contresid != 0.f || lp.enacbMask || lp.showmaskcbmet == 2 || lp.showmaskcbmet == 3 || lp.showmaskcbmet == 4 || lp.prevdE) && lp.cbdlena) { @@ -12249,7 +13359,6 @@ void ImProcFunctions::Lab_Local( const int xend = rtengine::min(static_cast(lp.xc + lp.lx) - cx, original->W); int bfh = yend - ystart; int bfw = xend - xstart; - if (bfw > 65 && bfh > 65) { array2D bufsh(bfw, bfh); JaggedArray bufchrom(bfw, bfh, true); @@ -12268,9 +13377,9 @@ void ImProcFunctions::Lab_Local( #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) if (multiThread) #endif - for (int y = 0; y < bfh; y++) { - for (int x = 0; x < bfw; x++) { - loctemp->L[y][x] = original->L[y + ystart][x + xstart]; + for (int y = ystart; y < yend; y++) { + for (int x = xstart; x < xend; x++) { + loctemp->L[y - ystart][x - xstart] = original->L[y][x]; } } @@ -12357,6 +13466,7 @@ void ImProcFunctions::Lab_Local( bufsh[y - ystart][x - xstart] = origcbdl->L[y - ystart][x - xstart] = original->L[y][x]; loctemp->a[y - ystart][x - xstart] = origcbdl->a[y - ystart][x - xstart] = original->a[y][x]; loctemp->b[y - ystart][x - xstart] = origcbdl->b[y - ystart][x - xstart] = original->b[y][x]; + loctemp->L[y - ystart][x - xstart] = origcbdl->b[y - ystart][x - xstart] = original->L[y][x]; } } @@ -12370,6 +13480,7 @@ void ImProcFunctions::Lab_Local( ImProcFunctions::cbdl_local_temp(bufsh, loctemp->L, bfw, bfh, lp.mulloc, 1.f, lp.threshol, lp.clarityml, lp.contresid, skinprot, false, b_l, t_l, t_r, b_r, choice, sk, multiThread); + if (lp.softradiuscb > 0.f) { softproc(origcbdl.get(), loctemp.get(), lp.softradiuscb, bfh, bfw, 0.001, 0.00001, 0.5f, sk, multiThread, 1); } @@ -12382,6 +13493,7 @@ void ImProcFunctions::Lab_Local( bool invmask = false; maskrecov(loctemp.get(), original, bufmaskorigcb.get(), bfh, bfw, ystart, xstart, hig, low, recoth, decay, invmask, sk, multiThread); } + } transit_shapedetect(6, loctemp.get(), originalmaskcb.get(), bufchrom, false, hueref, chromaref, lumaref, sobelref, 0.f, nullptr, lp, original, transformed, cx, cy, sk); @@ -12390,6 +13502,7 @@ void ImProcFunctions::Lab_Local( //chroma CBDL begin here if (lp.chromacb > 0.f && !nochroma) { + #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) if (multiThread) #endif @@ -12445,14 +13558,15 @@ void ImProcFunctions::Lab_Local( } transit_shapedetect(7, loctemp.get(), nullptr, bufchrom, false, hueref, chromaref, lumaref, sobelref, 0.f, nullptr, lp, original, transformed, cx, cy, sk); - bufsh.free(); - - if (params->locallab.spots.at(sp).recurs) { - original->CopyFrom(transformed, multiThread); - float avge; - calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); - } } + bufsh.free(); + + if (lp.recur) { + original->CopyFrom(transformed, multiThread); + float avge; + calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); + } + } } } @@ -12667,13 +13781,13 @@ void ImProcFunctions::Lab_Local( } - transit_shapedetect2(call, 2, bufexporig.get(), bufexpfin.get(), originalmaskvib.get(), hueref, chromaref, lumaref, sobelref, 0.f, nullptr, lp, original, transformed, cx, cy, sk); + transit_shapedetect2(sp, 0.f, 0.f, call, 2, bufexporig.get(), bufexpfin.get(), originalmaskvib.get(), hueref, chromaref, lumaref, sobelref, 0.f, nullptr, lp, original, transformed, cx, cy, sk); } - if (params->locallab.spots.at(sp).recurs) { + if (lp.recur) { original->CopyFrom(transformed, multiThread); float avge; calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); @@ -12683,234 +13797,6 @@ void ImProcFunctions::Lab_Local( } -//Tone mapping - - if ((lp.strengt != 0.f || lp.showmasktmmet == 2 || lp.enatmMask || lp.showmasktmmet == 3 || lp.showmasktmmet == 4 || lp.prevdE) && lp.tonemapena && !params->epd.enabled) { - if (call <= 3) { //simpleprocess dcrop improcc - const int ystart = rtengine::max(static_cast(lp.yc - lp.lyT) - cy, 0); - const int yend = rtengine::min(static_cast(lp.yc + lp.ly) - cy, original->H); - const int xstart = rtengine::max(static_cast(lp.xc - lp.lxL) - cx, 0); - const int xend = rtengine::min(static_cast(lp.xc + lp.lx) - cx, original->W); - const int bfh = yend - ystart; - const int bfw = xend - xstart; - - if (bfw >= mDEN && bfh >= mDEN) { - // printf("OK TM\n"); - array2D buflight(bfw, bfh); - JaggedArray bufchro(bfw, bfh); - std::unique_ptr bufgb(new LabImage(bfw, bfh)); - const std::unique_ptr tmp1(new LabImage(bfw, bfh)); - const std::unique_ptr bufgbm(new LabImage(bfw, bfh)); - const std::unique_ptr tmp1m(new LabImage(bfw, bfh)); - std::unique_ptr bufmaskorigtm; - std::unique_ptr bufmaskblurtm; - std::unique_ptr originalmasktm; - - // if (lp.showmasktmmet == 0 || lp.showmasktmmet == 2 || lp.enatmMask || lp.showmasktmmet == 3 || lp.showmasktmmet == 4) { - if (lp.showmasktmmet == 2 || lp.enatmMask || lp.showmasktmmet == 3 || lp.showmasktmmet == 4) { - bufmaskorigtm.reset(new LabImage(bfw, bfh)); - bufmaskblurtm.reset(new LabImage(bfw, bfh)); - originalmasktm.reset(new LabImage(bfw, bfh)); - } - -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) if (multiThread) -#endif - for (int y = ystart; y < yend; y++) { - for (int x = xstart; x < xend; x++) { - bufgb->L[y - ystart][x - xstart] = original->L[y][x]; - bufgb->a[y - ystart][x - xstart] = original->a[y][x]; - bufgb->b[y - ystart][x - xstart] = original->b[y][x]; - bufgbm->L[y - ystart][x - xstart] = original->L[y][x]; - bufgbm->a[y - ystart][x - xstart] = original->a[y][x]; - bufgbm->b[y - ystart][x - xstart] = original->b[y][x]; - } - } - - int inv = 0; - bool showmaske = false; - bool enaMask = false; - bool deltaE = false; - bool modmask = false; - bool zero = false; - bool modif = false; - - if (lp.showmasktmmet == 3) { - showmaske = true; - } - - if (lp.enatmMask) { - enaMask = true; - } - - if (lp.showmasktmmet == 4) { - deltaE = true; - } - - if (lp.showmasktmmet == 2) { - modmask = true; - } - - if (lp.showmasktmmet == 1) { - modif = true; - } - - if (lp.showmasktmmet == 0) { - zero = true; - } - - float chrom = lp.chromatm;; - float rad = lp.radmatm; - float gamma = lp.gammatm; - float slope = lp.slomatm; - float blendm = lp.blendmatm; - float lap = params->locallab.spots.at(sp).lapmasktm; - bool pde = params->locallab.spots.at(sp).laplac; - int lumask = params->locallab.spots.at(sp).lumask; - - if (!params->locallab.spots.at(sp).enatmMaskaft) { - LocwavCurve dummy; - int sco = params->locallab.spots.at(sp).scopemask; - int shortcu = 0; //lp.mergemet;// params->locallab.spots.at(sp).shortc; - - const float mindE = 2.f + MINSCOPE * sco * lp.thr; - const float maxdE = 5.f + MAXSCOPE * sco * (1 + 0.1f * lp.thr); - const float mindElim = 2.f + MINSCOPE * limscope * lp.thr; - const float maxdElim = 5.f + MAXSCOPE * limscope * (1 + 0.1f * lp.thr); - int shado = 0; - float amountcd = 0.f; - float anchorcd = 50.f; - LocHHmaskCurve lochhhmasCurve; - const int highl = 0; - - maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, bufgbm.get(), bufmaskorigtm.get(), originalmasktm.get(), original, reserved, inv, lp, - 0.f, false, - locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, lochhhmasCurve, false, multiThread, - enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, highl, amountcd, anchorcd, lmasktmlocalcurve, localmasktmutili, dummy, false, 1, 1, 5, 5, - shortcu, params->locallab.spots.at(sp).deltae, hueref, chromaref, lumaref, - maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, -1 - ); - - if (lp.showmasktmmet == 3) { - showmask(lumask, lp, xstart, ystart, cx, cy, bfw, bfh, bufgbm.get(), transformed, bufmaskorigtm.get(), 0); - - return; - } - } - - if (lp.showmasktmmet == 0 || lp.showmasktmmet == 1 || lp.showmasktmmet == 2 || lp.showmasktmmet == 4 || lp.showmasktmmet == 3 || lp.enatmMask) { - constexpr int itera = 0; - ImProcFunctions::EPDToneMaplocal(sp, bufgb.get(), tmp1.get(), itera, sk);//iterate to 0 calculate with edgstopping, improve result, call=1 dcrop we can put iterate to 5 - - tmp1m->CopyFrom(tmp1.get(), multiThread); //save current result - bool enatmMasktmap = params->locallab.spots.at(sp).enatmMaskaft; - - if (enatmMasktmap) { - //calculate new values for original, originalmasktm, bufmaskorigtm...in function of tmp1 - LocwavCurve dummy; - int sco = params->locallab.spots.at(sp).scopemask; - int shortcu = 0;//lp.mergemet; //params->locallab.spots.at(sp).shortc; - - const float mindE = 2.f + MINSCOPE * sco * lp.thr; - const float maxdE = 5.f + MAXSCOPE * sco * (1 + 0.1f * lp.thr); - const float mindElim = 2.f + MINSCOPE * limscope * lp.thr; - const float maxdElim = 5.f + MAXSCOPE * limscope * (1 + 0.1f * lp.thr); - int shado = 0; - float amountcd = 0.f; - float anchorcd = 50.f; - LocHHmaskCurve lochhhmasCurve; - const int highl = 0; - - maskcalccol(false, pde, bfw, bfh, xstart, ystart, sk, cx, cy, tmp1.get(), bufmaskorigtm.get(), originalmasktm.get(), original, reserved, inv, lp, - 0.f, false, - locccmastmCurve, lcmastmutili, locllmastmCurve, llmastmutili, lochhmastmCurve, lhmastmutili, lochhhmasCurve, false, multiThread, - enaMask, showmaske, deltaE, modmask, zero, modif, chrom, rad, lap, gamma, slope, blendm, blendm, shado, highl, amountcd, anchorcd, lmasktmlocalcurve, localmasktmutili, dummy, false, 1, 1, 5, 5, - shortcu, params->locallab.spots.at(sp).deltae, hueref, chromaref, lumaref, - maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sco, false, 0.f, 0.f, -1 - ); - - if (lp.showmasktmmet == 3) {//display mask - showmask(params->locallab.spots.at(sp).lumask, lp, xstart, ystart, cx, cy, bfw, bfh, tmp1.get(), transformed, bufmaskorigtm.get(), 0); - return; - } - - } - - tmp1->CopyFrom(tmp1m.get(), multiThread); //restore current result - - - float minL = tmp1->L[0][0] - bufgb->L[0][0]; - float maxL = minL; - float minC = std::sqrt(SQR(tmp1->a[0][0]) + SQR(tmp1->b[0][0])) - std::sqrt(SQR(bufgb->a[0][0]) + SQR(bufgb->b[0][0])); - float maxC = minC; - -#ifdef _OPENMP - #pragma omp parallel for reduction(max:maxL) reduction(min:minL) reduction(max:maxC) reduction(min:minC) schedule(dynamic,16) if (multiThread) -#endif - for (int ir = 0; ir < bfh; ir++) { - for (int jr = 0; jr < bfw; jr++) { - buflight[ir][jr] = tmp1->L[ir][jr] - bufgb->L[ir][jr]; - minL = rtengine::min(minL, buflight[ir][jr]); - maxL = rtengine::max(maxL, buflight[ir][jr]); - bufchro[ir][jr] = std::sqrt(SQR(tmp1->a[ir][jr]) + SQR(tmp1->b[ir][jr])) - std::sqrt(SQR(bufgb->a[ir][jr]) + SQR(bufgb->b[ir][jr])); - minC = rtengine::min(minC, bufchro[ir][jr]); - maxC = rtengine::max(maxC, bufchro[ir][jr]); - } - } - - float coef = 0.01f * rtengine::max(std::fabs(minL), std::fabs(maxL)); - float coefC = 0.01f * rtengine::max(std::fabs(minC), std::fabs(maxC)); - - if (coef == 0.f) { - coef = 1.f; - } else { - coef = 1.f / coef; - } - - if (coefC == 0.f) { - coefC = 1.f; - } else { - coefC = 1.f / coefC; - } - -#ifdef _OPENMP - #pragma omp parallel for if (multiThread) -#endif - for (int y = 0; y < bfh; y++) { - for (int x = 0; x < bfw; x++) { - buflight[y][x] *= coef; - bufchro[y][x] *= coefC; - } - } - - if(lp.enatmMask && lp.recothrt != 1.f) { - float hig = lp.higthrt; - float low = lp.lowthrt; - float recoth = lp.recothrt; - float decay = lp.decayt; - bool invmask = false; - maskrecov(tmp1.get(), original, bufmaskorigtm.get(), bfh, bfw, ystart, xstart, hig, low, recoth, decay, invmask, sk, multiThread); - } - - // transit_shapedetect_retinex(call, 4, bufgb.get(),bufmaskorigtm.get(), originalmasktm.get(), buflight, bufchro, hueref, chromaref, lumaref, lp, original, transformed, cx, cy, sk); - transit_shapedetect2(call, 8, bufgb.get(), tmp1.get(), originalmasktm.get(), hueref, chromaref, lumaref, sobelref, 0.f, nullptr, lp, original, transformed, cx, cy, sk); - - // transit_shapedetect(8, tmp1.get(), originalmasktm.get(), bufchro, false, hueref, chromaref, lumaref, sobelref, 0.f, nullptr, lp, original, transformed, cx, cy, sk); - bufgb.reset(); - - if (params->locallab.spots.at(sp).recurs) { - original->CopyFrom(transformed, multiThread); - float avge; - calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); - } - } - } - } - } - -//end TM - - //shadow highlight bool tonequ = false; @@ -13099,9 +13985,24 @@ void ImProcFunctions::Lab_Local( maskrecov(bufexpfin.get(), original, bufmaskorigSH.get(), bfh, bfw, ystart, xstart, hig, low, recoth, decay, invmask, sk, multiThread); } - transit_shapedetect2(call, 9, bufexporig.get(), bufexpfin.get(), originalmaskSH.get(), hueref, chromaref, lumaref, sobelref, 0.f, nullptr, lp, original, transformed, cx, cy, sk); + const float repart = 1.0 - 0.01 * params->locallab.spots.at(sp).reparsh; + int bw = bufexporig->W; + int bh = bufexporig->H; - if (params->locallab.spots.at(sp).recurs) { +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) if(multiThread) +#endif + for (int x = 0; x < bh; x++) { + for (int y = 0; y < bw; y++) { + bufexpfin->L[x][y] = intp(repart, bufexporig->L[x][y], bufexpfin->L[x][y]); + bufexpfin->a[x][y] = intp(repart, bufexporig->a[x][y], bufexpfin->a[x][y]); + bufexpfin->b[x][y] = intp(repart, bufexporig->b[x][y], bufexpfin->b[x][y]); + } + } + + transit_shapedetect2(sp, 0.f, 0.f, call, 9, bufexporig.get(), bufexpfin.get(), originalmaskSH.get(), hueref, chromaref, lumaref, sobelref, 0.f, nullptr, lp, original, transformed, cx, cy, sk); + + if (lp.recur) { original->CopyFrom(transformed, multiThread); float avge; calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); @@ -13186,7 +14087,7 @@ void ImProcFunctions::Lab_Local( float adjustr = 2.f; InverseColorLight_Local(tonequ, tonecurv, sp, 2, lp, originalmaskSH.get(), lightCurveloc, hltonecurveloc, shtonecurveloc, tonecurveloc, exlocalcurve, cclocalcurve, adjustr, localcutili, lllocalcurve, locallutili, original, transformed, cx, cy, hueref, chromaref, lumaref, sk); - if (params->locallab.spots.at(sp).recurs) { + if (lp.recur) { original->CopyFrom(transformed, multiThread); float avge; calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); @@ -13262,9 +14163,9 @@ void ImProcFunctions::Lab_Local( } } - transit_shapedetect2(call, 3, bufexporig.get(), bufexpfin.get(), nullptr, hueref, chromaref, lumaref, sobelref, 0.f, nullptr, lp, original, transformed, cx, cy, sk); + transit_shapedetect2(sp, 0.f, 0.f, call, 3, bufexporig.get(), bufexpfin.get(), nullptr, hueref, chromaref, lumaref, sobelref, 0.f, nullptr, lp, original, transformed, cx, cy, sk); - if (params->locallab.spots.at(sp).recurs) { + if (lp.recur) { original->CopyFrom(transformed, multiThread); float avge; calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); @@ -13724,12 +14625,26 @@ void ImProcFunctions::Lab_Local( bool invmask = false; maskrecov(tmp1.get(), original, bufmaskoriglc.get(), bfh, bfw, ystart, xstart, hig, low, recoth, decay, invmask, sk, multiThread); } + const float repart = 1.0 - 0.01 * params->locallab.spots.at(sp).reparw; + int bw = bufgb->W; + int bh = bufgb->H; - transit_shapedetect2(call, 10, bufgb.get(), tmp1.get(), originalmasklc.get(), hueref, chromaref, lumaref, sobelref, 0.f, nullptr, lp, original, transformed, cx, cy, sk); +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) if(multiThread) +#endif + for (int x = 0; x < bh; x++) { + for (int y = 0; y < bw; y++) { + tmp1->L[x][y] = intp(repart, bufgb->L[x][y], tmp1->L[x][y]); + tmp1->a[x][y] = intp(repart, bufgb->a[x][y], tmp1->a[x][y]); + tmp1->b[x][y] = intp(repart, bufgb->b[x][y], tmp1->b[x][y]); + } + } + + transit_shapedetect2(sp, 0.f, 0.f, call, 10, bufgb.get(), tmp1.get(), originalmasklc.get(), hueref, chromaref, lumaref, sobelref, 0.f, nullptr, lp, original, transformed, cx, cy, sk); tmp1.reset(); } - if (params->locallab.spots.at(sp).recurs) { + if (lp.recur) { original->CopyFrom(transformed, multiThread); float avge; calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); @@ -13780,7 +14695,7 @@ void ImProcFunctions::Lab_Local( //sharpen ellipse and transition Sharp_Local(call, loctemp, 0, hueref, chromaref, lumaref, lp, original, transformed, cx, cy, sk); - if (params->locallab.spots.at(sp).recurs) { + if (lp.recur) { original->CopyFrom(transformed, multiThread); float avge; calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); @@ -13795,715 +14710,13 @@ void ImProcFunctions::Lab_Local( InverseSharp_Local(loctemp, hueref, lumaref, chromaref, lp, original, transformed, cx, cy, sk); - if (params->locallab.spots.at(sp).recurs) { + if (lp.recur) { original->CopyFrom(transformed, multiThread); float avge; calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); } } - if ((lp.dehaze != 0 || lp.prevdE) && lp.retiena ) { - int ystart = rtengine::max(static_cast(lp.yc - lp.lyT) - cy, 0); - int yend = rtengine::min(static_cast(lp.yc + lp.ly) - cy, original->H); - int xstart = rtengine::max(static_cast(lp.xc - lp.lxL) - cx, 0); - int xend = rtengine::min(static_cast(lp.xc + lp.lx) - cx, original->W); - int bfh = yend - ystart; - int bfw = xend - xstart; - - if (bfh >= mSP && bfw >= mSP) { - const std::unique_ptr bufexporig(new LabImage(bfw, bfh)); //buffer for data in zone limit - const std::unique_ptr bufexpfin(new LabImage(bfw, bfh)); //buffer for data in zone limit - -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) if (multiThread) -#endif - for (int y = ystart; y < yend; y++) { - for (int x = xstart; x < xend; x++) { - bufexporig->L[y - ystart][x - xstart] = original->L[y][x]; - bufexporig->a[y - ystart][x - xstart] = original->a[y][x]; - bufexporig->b[y - ystart][x - xstart] = original->b[y][x]; - } - } - - bufexpfin->CopyFrom(bufexporig.get(), multiThread); - //calc dehaze - const std::unique_ptr tmpImage(new Imagefloat(bfw, bfh)); - - DehazeParams dehazeParams; - dehazeParams.enabled = true; - dehazeParams.strength = lp.dehaze; - dehazeParams.showDepthMap = false; - dehazeParams.saturation = lp.dehazeSaturation; - dehazeParams.depth = lp.depth; - lab2rgb(*bufexpfin, *tmpImage.get(), params->icm.workingProfile); - dehazeloc(tmpImage.get(), dehazeParams); - rgb2lab(*tmpImage.get(), *bufexpfin, params->icm.workingProfile); - - transit_shapedetect2(call, 30, bufexporig.get(), bufexpfin.get(), nullptr, hueref, chromaref, lumaref, sobelref, 0.f, nullptr, lp, original, transformed, cx, cy, sk); - - if (params->locallab.spots.at(sp).recurs) { - original->CopyFrom(transformed, multiThread); - float avge; - calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); - } - } - } - - lp.invret = false;//always disabled inverse RETI too complex todo !! - - if (lp.str >= 0.2f && lp.retiena && call != 2) { - LabImage *bufreti = nullptr; - LabImage *bufmask = nullptr; - LabImage *buforig = nullptr; - LabImage *buforigmas = nullptr; - LabImage *bufmaskorigreti = nullptr; - - if (TW >= mSP && TH >= mSP) { - - array2D buflight(TW, TH); - JaggedArray bufchro(TW, TH); - - int Hd, Wd; - Hd = TH; - Wd = TW; - - bufreti = new LabImage(TW, TH); - bufmask = new LabImage(TW, TH); - bufmaskorigreti = new LabImage(TW, TH); - - if (!lp.enaretiMasktmap && lp.enaretiMask) { - buforig = new LabImage(TW, TH); - buforigmas = new LabImage(TW, TH); - // bufmaskorigreti = new LabImage(GW, GH); - } - -#ifdef _OPENMP - #pragma omp parallel for if (multiThread) -#endif - for (int ir = 0; ir < TH; ir++) //fill with 0 - for (int jr = 0; jr < TW; jr++) { - bufreti->L[ir][jr] = 0.f; - bufreti->a[ir][jr] = 0.f; - bufreti->b[ir][jr] = 0.f; - buflight[ir][jr] = 0.f; - bufchro[ir][jr] = 0.f; - } - -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) if (multiThread) -#endif - for (int y = 0; y < transformed->H ; y++) //{ - for (int x = 0; x < transformed->W; x++) { - bufreti->L[y][x] = original->L[y][x]; - bufreti->a[y][x] = original->a[y][x]; - bufreti->b[y][x] = original->b[y][x]; - bufmask->L[y][x] = original->L[y][x]; - bufmask->a[y][x] = original->a[y][x]; - bufmask->b[y][x] = original->b[y][x]; - - - - if (!lp.enaretiMasktmap && lp.enaretiMask) { - buforig->L[y][x] = original->L[y][x]; - buforig->a[y][x] = original->a[y][x]; - buforig->b[y][x] = original->b[y][x]; - - // bufmaskorigreti->L[y][x] = original->L[y][x]; - // bufmaskorigreti->a[y][x] = original->a[y][x]; - // bufmaskorigreti->b[y][x] = original->b[y][x]; - - - } - - } - float raddE = params->locallab.spots.at(sp).softradiusret; - - //calc dE and reduction to use in MSR to reduce artifacts - const float mindE = 4.f + MINSCOPE * lp.sensh * lp.thr; - const float maxdE = 5.f + MAXSCOPE * lp.sensh * (1 + 0.1f * lp.thr); - const float mindElim = 2.f + MINSCOPE * limscope * lp.thr; - const float maxdElim = 5.f + MAXSCOPE * limscope * (1 + 0.1f * lp.thr); - const float refa = chromaref * cos(hueref); - const float refb = chromaref * sin(hueref); - - const std::unique_ptr> reducDEBuffer(new JaggedArray(Wd, Hd)); - float** reducDE = *(reducDEBuffer.get()); - - float ade = 0.01f * raddE; - float bde = 100.f - raddE; - float sensibefore = ade * lp.sensh + bde;//we can change sensitivity 0.1 90 or 0.3 70 or 0.4 60 -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) if (multiThread) -#endif - for (int y = 0; y < transformed->H ; y++) - for (int x = 0; x < transformed->W; x++) { - float dE = std::sqrt(SQR(refa - bufreti->a[y][x] / 327.68f) + SQR(refb - bufreti->b[y][x] / 327.68f) + SQR(static_cast(lumaref) - bufreti->b[y][x] / 327.68f)); - const float reducdE = calcreducdE(dE, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sensibefore); - reducDE[y][x] = clipDE(reducdE); - } - - const std::unique_ptr> origBuffer(new JaggedArray(Wd, Hd)); - float** orig = *(origBuffer.get()); - - const std::unique_ptr> origBuffer1(new JaggedArray(Wd, Hd)); - float** orig1 = *(origBuffer1.get()); - -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) if (multiThread) -#endif - for (int ir = 0; ir < Hd; ir += 1) - for (int jr = 0; jr < Wd; jr += 1) { - orig[ir][jr] = bufreti->L[ir][jr]; - orig1[ir][jr] = bufreti->L[ir][jr]; - } - - LabImage *tmpl = new LabImage(Wd, Hd); - - bool fftw = lp.ftwreti; - //for Retinex Mask are incorporated in MSR - int sco = params->locallab.spots.at(sp).scopemask; - float lumask = params->locallab.spots.at(sp).lumask; - - const float mindE2 = 2.f + MINSCOPE * sco * lp.thr; - const float maxdE2 = 5.f + MAXSCOPE * sco * (1 + 0.1f * lp.thr); - const float mindElim2 = 2.f + MINSCOPE * limscope * lp.thr; - const float maxdElim2 = 5.f + MAXSCOPE * limscope * (1 + 0.1f * lp.thr); - ImProcFunctions::MSRLocal(call, sp, fftw, 1, reducDE, bufreti, bufmask, buforig, buforigmas, bufmaskorigreti, orig, orig1, - Wd, Hd, Wd, Hd, params->locallab, sk, locRETgainCcurve, locRETtransCcurve, 0, 4, 1.f, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax, - locccmasretiCurve, lcmasretiutili, locllmasretiCurve, llmasretiutili, lochhmasretiCurve, lhmasretiutili, llretiMask, - lmaskretilocalcurve, localmaskretiutili, - transformed, lp.enaretiMasktmap, lp.enaretiMask, - params->locallab.spots.at(sp).deltae, hueref, chromaref, lumaref, - maxdE2, mindE2, maxdElim2, mindElim2, lp.iterat, limscope, sco, lp.balance, lp.balanceh, lumask); -#ifdef _OPENMP - #pragma omp parallel for if (multiThread) -#endif - for (int ir = 0; ir < Hd; ir += 1) { - for (int jr = 0; jr < Wd; jr += 1) { - tmpl->L[ir][jr] = orig[ir][jr]; - } - } - - if (lp.equret) { //equilibrate luminance before / after MSR - float *datain = new float[Hd * Wd]; - float *data = new float[Hd * Wd]; -#ifdef _OPENMP - #pragma omp parallel for if (multiThread) -#endif - for (int ir = 0; ir < Hd; ir += 1) - for (int jr = 0; jr < Wd; jr += 1) { - datain[ir * Wd + jr] = orig1[ir][jr]; - data[ir * Wd + jr] = orig[ir][jr]; - } - - normalize_mean_dt(data, datain, Hd * Wd, 1.f, 1.f); -#ifdef _OPENMP - #pragma omp parallel for if (multiThread) -#endif - for (int ir = 0; ir < Hd; ir += 1) - for (int jr = 0; jr < Wd; jr += 1) { - tmpl->L[ir][jr] = data[ir * Wd + jr]; - } - - delete [] datain; - delete [] data; - } - - if(lp.enaretiMask && lp.recothrr != 1.f) { - float hig = lp.higthrr; - float low = lp.lowthrr; - float recoth = lp.recothrr; - float decay = lp.decayr; - bool invmask = false; - maskrecov(tmpl, original, bufmaskorigreti, Hd, Wd, 0, 0, hig, low, recoth, decay, invmask, sk, multiThread); - } - - float minL = tmpl->L[0][0] - bufreti->L[0][0]; - float maxL = minL; -#ifdef _OPENMP - #pragma omp parallel for reduction(min:minL) reduction(max:maxL) schedule(dynamic,16) if (multiThread) -#endif - for (int ir = 0; ir < Hd; ir++) { - for (int jr = 0; jr < Wd; jr++) { - buflight[ir][jr] = tmpl->L[ir][jr] - bufreti->L[ir][jr]; - minL = rtengine::min(minL, buflight[ir][jr]); - maxL = rtengine::max(maxL, buflight[ir][jr]); - } - } - - const float coef = 0.01f * rtengine::max(std::fabs(minL), std::fabs(maxL)); - - for (int ir = 0; ir < Hd; ir++) { - for (int jr = 0; jr < Wd; jr++) { - buflight[ir][jr] /= coef; - } - } - - transit_shapedetect_retinex(call, 4, bufreti, tmpl, bufmask, buforigmas, buflight, bufchro, hueref, chromaref, lumaref, lp, original, transformed, cx, cy, sk); - - if (params->locallab.spots.at(sp).recurs) { - original->CopyFrom(transformed, multiThread); - float avge; - calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); - } - - if (params->locallab.spots.at(sp).chrrt > 0) { - - if (call == 1) { - -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) if (multiThread) -#endif - for (int ir = 0; ir < Hd; ir += 1) - for (int jr = 0; jr < Wd; jr += 1) { - - orig[ir][jr] = std::sqrt(SQR(bufreti->a[ir][jr]) + SQR(bufreti->b[ir][jr])); - orig1[ir][jr] = std::sqrt(SQR(bufreti->a[ir][jr]) + SQR(bufreti->b[ir][jr])); - } - - } - - float maxChro = orig1[0][0]; -#ifdef _OPENMP - #pragma omp parallel for reduction(max:maxChro) schedule(dynamic,16) if (multiThread) -#endif - for (int ir = 0; ir < Hd; ir++) { - for (int jr = 0; jr < Wd; jr++) { - maxChro = rtengine::max(maxChro, orig1[ir][jr]); - } - } - - float divchro = maxChro; - - //first step change saturation without Retinex ==> gain of time and memory - float satreal = lp.str * static_cast(params->locallab.spots.at(sp).chrrt) / 100.f; - - if (params->locallab.spots.at(sp).chrrt <= 0.2) { - satreal /= 10.f; - } - - DiagonalCurve reti_satur({ - DCT_NURBS, - 0, 0, - 0.2, 0.2f + satreal / 250.f, - 0.6, rtengine::min(1.f, 0.6f + satreal / 250.f), - 1, 1 - }); - - if (call == 1) { - -#ifdef _OPENMP - #pragma omp parallel for if (multiThread) -#endif - for (int ir = 0; ir < Hd; ir += 1) - for (int jr = 0; jr < Wd; jr += 1) { - const float Chprov = orig1[ir][jr]; - float2 sincosval; - sincosval.y = Chprov == 0.0f ? 1.f : bufreti->a[ir][jr] / Chprov; - sincosval.x = Chprov == 0.0f ? 0.f : bufreti->b[ir][jr] / Chprov; - - if (params->locallab.spots.at(sp).chrrt <= 100.0) { //first step - float buf = LIM01(orig[ir][jr] / divchro); - buf = reti_satur.getVal(buf); - buf *= divchro; - orig[ir][jr] = buf; - } - - tmpl->a[ir][jr] = orig[ir][jr] * sincosval.y; - tmpl->b[ir][jr] = orig[ir][jr] * sincosval.x; - } - - float minC = std::sqrt(SQR(tmpl->a[0][0]) + SQR(tmpl->b[0][0])) - orig1[0][0]; - float maxC = minC; -#ifdef _OPENMP - #pragma omp parallel for reduction(min:minC) reduction(max:maxC) schedule(dynamic,16) if (multiThread) -#endif - for (int ir = 0; ir < Hd; ir++) { - for (int jr = 0; jr < Wd; jr++) { - bufchro[ir][jr] = std::sqrt(SQR(tmpl->a[ir][jr]) + SQR(tmpl->b[ir][jr])) - orig1[ir][jr]; - minC = rtengine::min(minC, bufchro[ir][jr]); - maxC = rtengine::max(maxC, bufchro[ir][jr]); - } - } - - float coefC = 0.01f * rtengine::max(std::fabs(minC), std::fabs(maxC)); - - if (coefC > 0.f) { - coefC = 1.f / coefC; -#ifdef _OPENMP - #pragma omp parallel for if (multiThread) -#endif - for (int ir = 0; ir < Hd; ir++) { - for (int jr = 0; jr < Wd; jr++) { - bufchro[ir][jr] *= coefC; - } - } - } - } - - transit_shapedetect_retinex(call, 5, tmpl, tmpl, bufmask, buforigmas, buflight, bufchro, hueref, chromaref, lumaref, lp, original, transformed, cx, cy, sk); - - if (params->locallab.spots.at(sp).recurs) { - original->CopyFrom(transformed, multiThread); - float avge; - calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); - } - } - - delete tmpl; - delete bufmask; - delete bufmaskorigreti; - - if (!lp.enaretiMasktmap && lp.enaretiMask) { - if (buforig) { - delete buforig; - } - - if (buforigmas) { - delete buforigmas; - } - } - delete bufreti; - } - } - - - - if (lp.str >= 0.2f && lp.retiena && call == 2) { - int ystart = rtengine::max(static_cast(lp.yc - lp.lyT) - cy, 0); - int yend = rtengine::min(static_cast(lp.yc + lp.ly) - cy, original->H); - int xstart = rtengine::max(static_cast(lp.xc - lp.lxL) - cx, 0); - int xend = rtengine::min(static_cast(lp.xc + lp.lx) - cx, original->W); - int bfh = yend - ystart; - int bfw = xend - xstart; - - LabImage *bufreti = nullptr; - LabImage *bufmask = nullptr; - LabImage *buforig = nullptr; - LabImage *buforigmas = nullptr; - LabImage *bufmaskorigreti = nullptr; - int bfhr = bfh; - int bfwr = bfw; - - if (bfw >= mSP && bfh > mSP) { - if (lp.ftwreti) { - optfft(N_fftwsize, bfh, bfw, bfhr, bfwr, lp, original->H, original->W, xstart, ystart, xend, yend, cx, cy); - } - - array2D buflight(bfw, bfh); - JaggedArray bufchro(bfw, bfh); - - int Hd, Wd; - Hd = TH; - Wd = TW; - - if (!lp.invret && call == 2) { - - Hd = bfh; - Wd = bfw; - bufreti = new LabImage(bfw, bfh); - bufmask = new LabImage(bfw, bfh); - bufmaskorigreti = new LabImage(bfw, bfh); - - if (!lp.enaretiMasktmap && lp.enaretiMask) { - buforig = new LabImage(bfw, bfh); - buforigmas = new LabImage(bfw, bfh); - } - -#ifdef _OPENMP - #pragma omp parallel for if (multiThread) -#endif - for (int ir = 0; ir < bfh; ir++) //fill with 0 - for (int jr = 0; jr < bfw; jr++) { - bufreti->L[ir][jr] = 0.f; - bufreti->a[ir][jr] = 0.f; - bufreti->b[ir][jr] = 0.f; - buflight[ir][jr] = 0.f; - bufchro[ir][jr] = 0.f; - } - - -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) if (multiThread) -#endif - for (int y = ystart; y < yend; y++) { - for (int x = xstart; x < xend; x++) { - bufreti->L[y - ystart][x - xstart] = original->L[y][x]; - bufreti->a[y - ystart][x - xstart] = original->a[y][x]; - bufreti->b[y - ystart][x - xstart] = original->b[y][x]; - bufmask->L[y - ystart][x - xstart] = original->L[y][x]; - bufmask->a[y - ystart][x - xstart] = original->a[y][x]; - bufmask->b[y - ystart][x - xstart] = original->b[y][x]; - - if (!lp.enaretiMasktmap && lp.enaretiMask) { - buforig->L[y - ystart][x - xstart] = original->L[y][x]; - buforig->a[y - ystart][x - xstart] = original->a[y][x]; - buforig->b[y - ystart][x - xstart] = original->b[y][x]; - } - } - } - } - - float raddE = params->locallab.spots.at(sp).softradiusret; - - //calc dE and reduction to use in MSR to reduce artifacts - const float mindE = 4.f + MINSCOPE * lp.sensh * lp.thr; - const float maxdE = 5.f + MAXSCOPE * lp.sensh * (1 + 0.1f * lp.thr); - const float mindElim = 2.f + MINSCOPE * limscope * lp.thr; - const float maxdElim = 5.f + MAXSCOPE * limscope * (1 + 0.1f * lp.thr); - const float refa = chromaref * cos(hueref); - const float refb = chromaref * sin(hueref); - - const std::unique_ptr> reducDEBuffer(new JaggedArray(Wd, Hd)); - float** reducDE = *(reducDEBuffer.get()); - float ade = 0.01f * raddE; - float bde = 100.f - raddE; - float sensibefore = ade * lp.sensh + bde;//we can change sensitivity 0.1 90 or 0.3 70 or 0.4 60 -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) if (multiThread) -#endif - for (int y = ystart; y < yend ; y++) { - for (int x = xstart; x < xend; x++) { - const float dE = std::sqrt(SQR(refa - bufreti->a[y - ystart][x - xstart] / 327.68f) + SQR(refb - bufreti->b[y - ystart][x - xstart] / 327.68f) + SQR(static_cast(lumaref) - bufreti->b[y - ystart][x - xstart] / 327.68f)); - const float reducdE = calcreducdE(dE, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, sensibefore); - reducDE[y - ystart][x - xstart] = clipDE(reducdE); - } - } - - const std::unique_ptr> origBuffer(new JaggedArray(Wd, Hd)); - float** orig = *(origBuffer.get()); - - const std::unique_ptr> origBuffer1(new JaggedArray(Wd, Hd)); - float** orig1 = *(origBuffer1.get()); - - LabImage *tmpl = nullptr; - - if (!lp.invret && call == 2) { -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) if (multiThread) -#endif - for (int ir = 0; ir < Hd; ir += 1) { - for (int jr = 0; jr < Wd; jr += 1) { - orig[ir][jr] = bufreti->L[ir][jr]; - orig1[ir][jr] = bufreti->L[ir][jr]; - } - } - - tmpl = new LabImage(Wd, Hd); - } - - // float minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax; - bool fftw = lp.ftwreti; - //for Retinex Mask are incorporated in MSR - int sco = params->locallab.spots.at(sp).scopemask; - float lumask = params->locallab.spots.at(sp).lumask; - - const float mindE2 = 2.f + MINSCOPE * sco * lp.thr; - const float maxdE2 = 5.f + MAXSCOPE * sco * (1 + 0.1f * lp.thr); - const float mindElim2 = 2.f + MINSCOPE * limscope * lp.thr; - const float maxdElim2 = 5.f + MAXSCOPE * limscope * (1 + 0.1f * lp.thr); - - ImProcFunctions::MSRLocal(call, sp, fftw, 1, reducDE, bufreti, bufmask, buforig, buforigmas, bufmaskorigreti, orig, orig1, - Wd, Hd, bfwr, bfhr, params->locallab, sk, locRETgainCcurve, locRETtransCcurve, 0, 4, 1.f, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax, - locccmasretiCurve, lcmasretiutili, locllmasretiCurve, llmasretiutili, lochhmasretiCurve, lhmasretiutili, llretiMask, - lmaskretilocalcurve, localmaskretiutili, - transformed, lp.enaretiMasktmap, lp.enaretiMask, - params->locallab.spots.at(sp).deltae, hueref, chromaref, lumaref, - maxdE2, mindE2, maxdElim2, mindElim2, lp.iterat, limscope, sco, lp.balance, lp.balanceh, lumask); - -#ifdef _OPENMP - #pragma omp parallel for if (multiThread) -#endif - for (int ir = 0; ir < Hd; ir += 1) - for (int jr = 0; jr < Wd; jr += 1) { - tmpl->L[ir][jr] = orig[ir][jr]; - } - - - if (lp.equret) { //equilibrate luminance before / after MSR - const std::unique_ptr datain(new float[Hd * Wd]); - const std::unique_ptr data(new float[Hd * Wd]); -#ifdef _OPENMP - #pragma omp parallel for if (multiThread) -#endif - for (int ir = 0; ir < Hd; ir += 1) { - for (int jr = 0; jr < Wd; jr += 1) { - datain[ir * Wd + jr] = orig1[ir][jr]; - data[ir * Wd + jr] = orig[ir][jr]; - } - } - - normalize_mean_dt(data.get(), datain.get(), Hd * Wd, 1.f, 1.f); -#ifdef _OPENMP - #pragma omp parallel for if (multiThread) -#endif - for (int ir = 0; ir < Hd; ir += 1) { - for (int jr = 0; jr < Wd; jr += 1) { - tmpl->L[ir][jr] = data[ir * Wd + jr]; - } - } - } - if(lp.enaretiMask && lp.recothrr != 1.f) { - float hig = lp.higthrr; - float low = lp.lowthrr; - float recoth = lp.recothrr; - float decay = lp.decayr; - bool invmask = false; - maskrecov(tmpl, original, bufmaskorigreti, Hd, Wd, ystart, xstart, hig, low, recoth, decay, invmask, sk, multiThread); - } - - if (!lp.invret) { - float minL = tmpl->L[0][0] - bufreti->L[0][0]; - float maxL = minL; -#ifdef _OPENMP - #pragma omp parallel for reduction(min:minL) reduction(max:maxL) schedule(dynamic,16) if (multiThread) -#endif - for (int ir = 0; ir < Hd; ir++) { - for (int jr = 0; jr < Wd; jr++) { - buflight[ir][jr] = tmpl->L[ir][jr] - bufreti->L[ir][jr]; - minL = rtengine::min(minL, buflight[ir][jr]); - maxL = rtengine::max(maxL, buflight[ir][jr]); - } - } - - float coef = 0.01f * rtengine::max(std::fabs(minL), std::fabs(maxL)); - - if (coef > 0.f) { - coef = 1.f / coef; -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) if (multiThread) -#endif - for (int ir = 0; ir < Hd; ir++) { - for (int jr = 0; jr < Wd; jr++) { - buflight[ir][jr] *= coef; - } - } - } - - transit_shapedetect_retinex(call, 4, bufreti, tmpl, bufmask, buforigmas, buflight, bufchro, hueref, chromaref, lumaref, lp, original, transformed, cx, cy, sk); - - if (params->locallab.spots.at(sp).recurs) { - original->CopyFrom(transformed, multiThread); - float avge; - calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); - } - } - - if (params->locallab.spots.at(sp).chrrt > 0) { - if (!lp.invret && call == 2) { -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) if (multiThread) -#endif - for (int ir = 0; ir < Hd; ir += 1) { - for (int jr = 0; jr < Wd; jr += 1) { - orig[ir][jr] = std::sqrt(SQR(bufreti->a[ir][jr]) + SQR(bufreti->b[ir][jr])); - orig1[ir][jr] = std::sqrt(SQR(bufreti->a[ir][jr]) + SQR(bufreti->b[ir][jr])); - } - } - } - - float maxChro = orig1[0][0]; -#ifdef _OPENMP - #pragma omp parallel for reduction(max:maxChro) schedule(dynamic,16) if (multiThread) -#endif - for (int ir = 0; ir < Hd; ir++) { - for (int jr = 0; jr < Wd; jr++) { - maxChro = rtengine::max(maxChro, orig1[ir][jr]); - } - } - - //first step change saturation without Retinex ==> gain of time and memory - float satreal = lp.str * static_cast(params->locallab.spots.at(sp).chrrt) / 100.f; - - if (params->locallab.spots.at(sp).chrrt <= 0.2) { - satreal /= 10.f; - } - - DiagonalCurve reti_satur({ - DCT_NURBS, - 0, 0, - 0.2, 0.2f + satreal / 250.f, - 0.6, rtengine::min(1.f, 0.6f + satreal / 250.f), - 1, 1 - }); - - if (!lp.invret && call == 2) { - -#ifdef _OPENMP - #pragma omp parallel for if (multiThread) -#endif - for (int ir = 0; ir < Hd; ir += 1) { - for (int jr = 0; jr < Wd; jr += 1) { - const float Chprov = orig1[ir][jr]; - float2 sincosval; - sincosval.y = Chprov == 0.0f ? 1.f : bufreti->a[ir][jr] / Chprov; - sincosval.x = Chprov == 0.0f ? 0.f : bufreti->b[ir][jr] / Chprov; - - if (params->locallab.spots.at(sp).chrrt <= 40.0) { //first step - orig[ir][jr] = static_cast(reti_satur.getVal(LIM01(orig[ir][jr] / maxChro))) * maxChro; - } - - tmpl->a[ir][jr] = orig[ir][jr] * sincosval.y; - tmpl->b[ir][jr] = orig[ir][jr] * sincosval.x; - } - } - - float minC = std::sqrt(SQR(tmpl->a[0][0]) + SQR(tmpl->b[0][0])) - orig1[0][0]; - float maxC = minC; -#ifdef _OPENMP - #pragma omp parallel for reduction(min:minC) reduction(max:maxC) schedule(dynamic,16) if (multiThread) -#endif - for (int ir = 0; ir < Hd; ir++) { - for (int jr = 0; jr < Wd; jr++) { - bufchro[ir][jr] = std::sqrt(SQR(tmpl->a[ir][jr]) + SQR(tmpl->b[ir][jr])) - orig1[ir][jr]; - minC = rtengine::min(minC, bufchro[ir][jr]); - maxC = rtengine::max(maxC, bufchro[ir][jr]); - } - } - - float coefC = 0.01f * rtengine::max(std::fabs(minC), std::fabs(maxC)); - - if (coefC > 0.f) { - coefC = 1.f / coefC; -#ifdef _OPENMP - #pragma omp parallel for if (multiThread) -#endif - for (int ir = 0; ir < Hd; ir++) { - for (int jr = 0; jr < Wd; jr++) { - bufchro[ir][jr] *= coefC; - } - } - } - } - - if (!lp.invret) { - transit_shapedetect_retinex(call, 5, tmpl, tmpl, bufmask, buforigmas, buflight, bufchro, hueref, chromaref, lumaref, lp, original, transformed, cx, cy, sk); - - if (params->locallab.spots.at(sp).recurs) { - original->CopyFrom(transformed, multiThread); - float avge; - calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); - } - } - } - - delete tmpl; - delete bufmask; - delete bufmaskorigreti; - - if (!lp.enaretiMasktmap && lp.enaretiMask) { - if (buforig) { - delete buforig; - } - - if (buforigmas) { - delete buforigmas; - } - } - delete bufreti; - } - } - bool enablefat = false; if (params->locallab.spots.at(sp).fatamount > 1.0) { @@ -14720,36 +14933,22 @@ void ImProcFunctions::Lab_Local( datain[y * bfwr + x] = bufexpfin->L[y][x]; } } - FattalToneMappingParams fatParams; fatParams.enabled = true; fatParams.threshold = params->locallab.spots.at(sp).fatdetail; fatParams.amount = params->locallab.spots.at(sp).fatamount; - fatParams.anchor = 50.f; //params->locallab.spots.at(sp).fatanchor; - const float sigm = params->locallab.spots.at(sp).fatlevel; - const float mean = params->locallab.spots.at(sp).fatanchor; + fatParams.anchor = params->locallab.spots.at(sp).fatanchor; + //const float sigm = 1.f; //params->locallab.spots.at(sp).fatlevel; + //const float mean = 1.f;// params->locallab.spots.at(sp).fatanchor; const std::unique_ptr tmpImagefat(new Imagefloat(bfwr, bfhr)); lab2rgb(*bufexpfin, *(tmpImagefat.get()), params->icm.workingProfile); - ToneMapFattal02(tmpImagefat.get(), fatParams, 3, 0, nullptr, 0, 0, 1);//last parameter = 1 ==>ART algorithm + int alg = 0; + if(fatParams.anchor == 50.f) { + alg = 1; + } + ToneMapFattal02(tmpImagefat.get(), fatParams, 3, 0, nullptr, 0, 0, alg);//last parameter = 1 ==>ART algorithm rgb2lab(*(tmpImagefat.get()), *bufexpfin, params->icm.workingProfile); -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) if (multiThread) -#endif - for (int y = 0; y < bfhr; y++) { - for (int x = 0; x < bfwr; x++) { - dataout[y * bfwr + x] = bufexpfin->L[y][x]; - } - } - normalize_mean_dt(dataout.get(), datain.get(), bfwr * bfhr, mean, sigm); -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) if (multiThread) -#endif - for (int y = 0; y < bfhr; y++) { - for (int x = 0; x < bfwr; x++) { - bufexpfin->L[y][x] = dataout[y * bfwr + x]; - } - } } if (lp.laplacexp > 0.1f) { @@ -14859,10 +15058,26 @@ void ImProcFunctions::Lab_Local( } float meansob = 0.f; - transit_shapedetect2(call, 1, bufexporig.get(), bufexpfin.get(), originalmaskexp.get(), hueref, chromaref, lumaref, sobelref, meansob, blend2, lp, original, transformed, cx, cy, sk); + + const float repart = 1.0 - 0.01 * params->locallab.spots.at(sp).reparexp; + int bw = bufexporig->W; + int bh = bufexporig->H; + +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) if(multiThread) +#endif + for (int x = 0; x < bh; x++) { + for (int y = 0; y < bw; y++) { + bufexpfin->L[x][y] = intp(repart, bufexporig->L[x][y], bufexpfin->L[x][y]); + bufexpfin->a[x][y] = intp(repart, bufexporig->a[x][y], bufexpfin->a[x][y]); + bufexpfin->b[x][y] = intp(repart, bufexporig->b[x][y], bufexpfin->b[x][y]); + } + } + + transit_shapedetect2(sp, 0.f, 0.f, call, 1, bufexporig.get(), bufexpfin.get(), originalmaskexp.get(), hueref, chromaref, lumaref, sobelref, meansob, blend2, lp, original, transformed, cx, cy, sk); } - if (params->locallab.spots.at(sp).recurs) { + if (lp.recur) { original->CopyFrom(transformed, multiThread); float avge; calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); @@ -14948,7 +15163,7 @@ void ImProcFunctions::Lab_Local( InverseColorLight_Local(false, false, sp, 1, lp, originalmaskexp.get(), lightCurveloc, hltonecurveloc, shtonecurveloc, tonecurveloc, exlocalcurve, cclocalcurve, adjustr, localcutili, lllocalcurve, locallutili, original, transformed, cx, cy, hueref, chromaref, lumaref, sk); - if (params->locallab.spots.at(sp).recurs) { + if (lp.recur) { original->CopyFrom(transformed, multiThread); float avge; calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); @@ -14965,10 +15180,7 @@ void ImProcFunctions::Lab_Local( const float b_base = lp.lowB / scaling; const bool ctoning = (a_scale != 0.f || b_scale != 0.f || a_base != 0.f || b_base != 0.f); const float a_scalemerg = (lp.highAmerg - lp.lowAmerg) / factor / scaling; - const float a_basemerg = lp.lowAmerg / scaling; const float b_scalemerg = (lp.highBmerg - lp.lowBmerg) / factor / scaling; - const float b_basemerg = lp.lowBmerg / scaling; - const bool ctoningmerg = (a_scalemerg != 0.f || b_scalemerg != 0.f || a_basemerg != 0.f || b_basemerg != 0.f); if (!lp.inv && (lp.chro != 0 || lp.ligh != 0.f || lp.cont != 0 || ctoning || lp.mergemet > 0 || lp.strcol != 0.f || lp.strcolab != 0.f || lp.qualcurvemet != 0 || lp.showmaskcolmet == 2 || lp.enaColorMask || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4 || lp.showmaskcolmet == 5 || lp.prevdE) && lp.colorena) { // || lllocalcurve)) { //interior ellipse renforced lightness and chroma //locallutili int ystart = rtengine::max(static_cast(lp.yc - lp.lyT) - cy, 0); @@ -15443,7 +15655,7 @@ void ImProcFunctions::Lab_Local( bufcolreserv->L[y][x] = lastorig->L[y + ystart][x + xstart]; bufcolreserv->a[y][x] = lastorig->a[y + ystart][x + xstart]; bufcolreserv->b[y][x] = lastorig->b[y + ystart][x + xstart]; - } else if (lp.mergemet == 4 && ctoningmerg) { + } else if (lp.mergemet == 4) { bufcolreserv->L[y][x] = merlucol * 327.68f; bufcolreserv->a[y][x] = 9.f * scaledirect * a_scalemerg; bufcolreserv->b[y][x] = 9.f * scaledirect * b_scalemerg; @@ -15922,7 +16134,22 @@ void ImProcFunctions::Lab_Local( softproc(bufcolreserv.get(), bufcolfin.get(), lp.softradiuscol, bfh, bfw, 0.001, 0.00001, 0.5f, sk, multiThread, 1); } float meansob = 0.f; - transit_shapedetect2(call, 0, bufcolreserv.get(), bufcolfin.get(), originalmaskcol.get(), hueref, chromaref, lumaref, sobelref, meansob, blend2, lp, original, transformed, cx, cy, sk); + const float repart = 1.0 - 0.01 * params->locallab.spots.at(sp).reparcol; + int bw = bufcolreserv->W; + int bh = bufcolreserv->H; + +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) if(multiThread) +#endif + for (int x = 0; x < bh; x++) { + for (int y = 0; y < bw; y++) { + bufcolfin->L[x][y] = intp(repart, bufcolreserv->L[x][y], bufcolfin->L[x][y]); + bufcolfin->a[x][y] = intp(repart, bufcolreserv->a[x][y], bufcolfin->a[x][y]); + bufcolfin->b[x][y] = intp(repart, bufcolreserv->b[x][y], bufcolfin->b[x][y]); + } + } + + transit_shapedetect2(sp, 0.f, 0.f, call, 0, bufcolreserv.get(), bufcolfin.get(), originalmaskcol.get(), hueref, chromaref, lumaref, sobelref, meansob, blend2, lp, original, transformed, cx, cy, sk); } if (!nottransit) { @@ -16004,13 +16231,28 @@ void ImProcFunctions::Lab_Local( bool invmask = false; maskrecov(bufcolfin.get(), original, bufmaskblurcol.get(), bfh, bfw, ystart, xstart, hig, low, recoth, decay, invmask, sk, multiThread); } + const float repart = 1.0 - 0.01 * params->locallab.spots.at(sp).reparcol; + int bw = bufcolorig->W; + int bh = bufcolorig->H; + +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) if(multiThread) +#endif + for (int x = 0; x < bh; x++) { + for (int y = 0; y < bw; y++) { + bufcolfin->L[x][y] = intp(repart, bufcolorig->L[x][y], bufcolfin->L[x][y]); + bufcolfin->a[x][y] = intp(repart, bufcolorig->a[x][y], bufcolfin->a[x][y]); + bufcolfin->b[x][y] = intp(repart, bufcolorig->b[x][y], bufcolfin->b[x][y]); + } + } + float meansob = 0.f; - transit_shapedetect2(call, 0, bufcolorig.get(), bufcolfin.get(), originalmaskcol.get(), hueref, chromaref, lumaref, sobelref, meansob, blend2, lp, original, transformed, cx, cy, sk); + transit_shapedetect2(sp, 0.f, 0.f, call, 0, bufcolorig.get(), bufcolfin.get(), originalmaskcol.get(), hueref, chromaref, lumaref, sobelref, meansob, blend2, lp, original, transformed, cx, cy, sk); } } - if (params->locallab.spots.at(sp).recurs) { + if (lp.recur) { original->CopyFrom(transformed, multiThread); float avge; calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); @@ -16109,7 +16351,7 @@ void ImProcFunctions::Lab_Local( if (lp.showmaskcolmetinv == 0 || lp.enaColorMaskinv) { InverseColorLight_Local(false, false, sp, 0, lp, originalmaskcol.get(), lightCurveloc, hltonecurveloc, shtonecurveloc, tonecurveloc, exlocalcurve, cclocalcurve, adjustr, localcutili, lllocalcurve, locallutili, original, transformed, cx, cy, hueref, chromaref, lumaref, sk); - if (params->locallab.spots.at(sp).recurs) { + if (lp.recur) { original->CopyFrom(transformed, multiThread); float avge; calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); @@ -16274,11 +16516,11 @@ void ImProcFunctions::Lab_Local( float meansob = 0.f; - transit_shapedetect2(call, 20, bufcolorigsav.get(), bufcolfin.get(), originalmaskcol.get(), hueref, chromaref, lumaref, sobelref, meansob, nullptr, lp, origsav, transformed, cx, cy, sk); + transit_shapedetect2(sp, 0.f, 0.f, call, 20, bufcolorigsav.get(), bufcolfin.get(), originalmaskcol.get(), hueref, chromaref, lumaref, sobelref, meansob, nullptr, lp, origsav, transformed, cx, cy, sk); delete origsav; origsav = NULL; - if (params->locallab.spots.at(sp).recurs) { + if (lp.recur) { original->CopyFrom(transformed, multiThread); float avge; calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili); diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index ec724133b..caec5ec22 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -1040,7 +1040,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const } - if (!exblurL && cp.contrast == 0.f && cp.blurres == 0.f && !cp.noiseena && !cp.tonemap && !cp.resena && !cp.chromena && !cp.finena && !cp.edgeena && cp.conres == 0.f && cp.conresH == 0.f && cp.val == 0 && !ref0 && params->wavelet.CLmethod == "all") { // no processing of residual L or edge=> we probably can reduce the number of levels + if (!exblurL && cp.contrast == 0.f && cp.blurres == 0.f && !cp.noiseena && !cp.tonemap && !cp.resena && !cp.chromena && !cp.toningena && !cp.finena && !cp.edgeena && cp.conres == 0.f && cp.conresH == 0.f && cp.val == 0 && !ref0 && params->wavelet.CLmethod == "all") { // no processing of residual L or edge=> we probably can reduce the number of levels while (levwavL > 0 && cp.mul[levwavL - 1] == 0.f) { // cp.mul[level] == 0.f means no changes to level levwavL--; } @@ -1724,7 +1724,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const if (!hhutili) { //always a or b int levwava = levwav; - if (!exblurab && cp.chrores == 0.f && cp.blurcres == 0.f && !cp.noiseena && !cp.tonemap && !cp.resena && !cp.chromena && !cp.finena && !cp.edgeena&& params->wavelet.CLmethod == "all" && !cp.cbena) { // no processing of residual ab => we probably can reduce the number of levels + if (!exblurab && cp.chrores == 0.f && cp.blurcres == 0.f && !cp.noiseena && !cp.tonemap && !cp.resena && !cp.chromena && !cp.toningena && !cp.finena && !cp.edgeena && params->wavelet.CLmethod == "all" && !cp.cbena) { // no processing of residual ab => we probably can reduce the number of levels while (levwava > 0 && !cp.diag && (((cp.CHmet == 2 && (cp.chro == 0.f || cp.mul[levwava - 1] == 0.f)) || (cp.CHmet != 2 && (levwava == 10 || (!cp.curv || cp.mulC[levwava - 1] == 0.f))))) && (!cp.opaRG || levwava == 10 || (cp.opaRG && cp.mulopaRG[levwava - 1] == 0.f)) && ((levwava == 10 || (cp.CHSLmet == 1 && cp.mulC[levwava - 1] == 0.f)))) { levwava--; } @@ -1777,7 +1777,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const int levwavb = levwav; - if (!exblurab && cp.chrores == 0.f && cp.blurcres == 0.f && !cp.noiseena && !cp.tonemap && !cp.resena && !cp.chromena && !cp.finena && !cp.edgeena && params->wavelet.CLmethod == "all" && !cp.cbena) { // no processing of residual ab => we probably can reduce the number of levels + if (!exblurab && cp.chrores == 0.f && cp.blurcres == 0.f && !cp.noiseena && !cp.tonemap && !cp.resena && !cp.chromena && !cp.toningena && !cp.finena && !cp.edgeena && params->wavelet.CLmethod == "all" && !cp.cbena) { // no processing of residual ab => we probably can reduce the number of levels while (levwavb > 0 && !cp.diag && (((cp.CHmet == 2 && (cp.chro == 0.f || cp.mul[levwavb - 1] == 0.f)) || (cp.CHmet != 2 && (levwavb == 10 || (!cp.curv || cp.mulC[levwavb - 1] == 0.f))))) && (!cp.opaBY || levwavb == 10 || (cp.opaBY && cp.mulopaBY[levwavb - 1] == 0.f)) && ((levwavb == 10 || (cp.CHSLmet == 1 && cp.mulC[levwavb - 1] == 0.f)))) { levwavb--; } @@ -2785,7 +2785,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float * float eddlipinfl = 0.005f * cp.edgsens + 0.4f; float eddlipampl = 1.f + cp.edgampl / 50.f; - if (cp.detectedge) { //enabled Lipschitz control...more memory..more time... + if (cp.detectedge && cp.val > 0) { //enabled Lipschitz control...more memory..more time... const std::unique_ptr tmCBuffer(new float[H_L * W_L]); float *tmC[H_L]; @@ -4532,6 +4532,10 @@ void ImProcFunctions::ContAllAB(LabImage * labco, int maxlvl, float ** varhue, f } if ((useOpacity && level < 9 && mulOpacity != 0.f) && cp.toningena) { //toning + // if (settings->verbose) { + // printf("Toning enabled\n"); + // } + float mea[10]; float effect = cp.sigmaton; float betaab; diff --git a/rtengine/klt/writeFeatures.cc b/rtengine/klt/writeFeatures.cc index d3bf6f3d4..d3ec627ed 100644 --- a/rtengine/klt/writeFeatures.cc +++ b/rtengine/klt/writeFeatures.cc @@ -559,19 +559,19 @@ static structureType _readHeader( if (id == FEATURE_TABLE) { fscanf(fp, "%s", line); if (strcmp(line, ",") != 0) { - KLTError("(_readFeatures) File '%s' is corrupted -- " + KLTError("(_readFeatures) File is corrupted -- " "(Expected 'comma', found '%s' instead)", line); exit(1); } fscanf(fp, "%s", line); if (strcmp(line, "nFeatures") != 0) { - KLTError("(_readFeatures) File '%s' is corrupted -- " + KLTError("(_readFeatures) File is corrupted -- " "(2 Expected 'nFeatures ', found '%s' instead)", line); exit(1); } fscanf(fp, "%s", line); if (strcmp(line, "=") != 0) { - KLTError("(_readFeatures) File '%s' is corrupted -- " + KLTError("(_readFeatures) File is corrupted -- " "(2 Expected '= ', found '%s' instead)", line); exit(1); } diff --git a/rtengine/lcp.cc b/rtengine/lcp.cc index 8e90a3549..7fd22d1f8 100644 --- a/rtengine/lcp.cc +++ b/rtengine/lcp.cc @@ -196,7 +196,7 @@ rtengine::LCPProfile::LCPProfile(const Glib::ustring& fname) : XML_Parser parser = XML_ParserCreate(nullptr); if (!parser) { - throw "Couldn't allocate memory for XML parser"; + throw std::runtime_error("Couldn't allocate memory for XML parser"); } XML_SetElementHandler(parser, XmlStartHandler, XmlEndHandler); @@ -216,7 +216,7 @@ rtengine::LCPProfile::LCPProfile(const Glib::ustring& fname) : if (XML_Parse(parser, buf, bytesRead, done) == XML_STATUS_ERROR) { XML_ParserFree(parser); - throw "Invalid XML in LCP file"; + throw std::runtime_error("Invalid XML in LCP file"); } } while (!done); diff --git a/rtengine/lj92.c b/rtengine/lj92.c index d72075a62..1e0e8cb80 100644 --- a/rtengine/lj92.c +++ b/rtengine/lj92.c @@ -313,6 +313,9 @@ static int decode(ljp* self) { } static int receive(ljp* self,int ssss) { + if (ssss == 16) { + return 1 << 15; + } int i = 0; int v = 0; while (i != ssss) { @@ -365,24 +368,29 @@ inline static int nextdiff(ljp* self, int Px) { cnt -= usedbits; int keepbitsmask = (1 << cnt)-1; b &= keepbitsmask; - while (cnt < t) { - next = *(u16*)&self->data[ix]; - int one = next&0xFF; - int two = next>>8; - b = (b<<16)|(one<<8)|two; - cnt += 16; - ix += 2; - if (one==0xFF) { - b >>= 8; - cnt -= 8; - } else if (two==0xFF) ix++; - } - cnt -= t; - int diff = b >> cnt; - int vt = 1<<(t-1); - if (diff < vt) { - vt = (-1 << t) + 1; - diff += vt; + int diff; + if (t == 16) { + diff = 1 << 15; + } else { + while (cnt < t) { + next = *(u16*)&self->data[ix]; + int one = next&0xFF; + int two = next>>8; + b = (b<<16)|(one<<8)|two; + cnt += 16; + ix += 2; + if (one==0xFF) { + b >>= 8; + cnt -= 8; + } else if (two==0xFF) ix++; + } + cnt -= t; + diff = b >> cnt; + int vt = 1<<(t-1); + if (diff < vt) { + vt = (-1 << t) + 1; + diff += vt; + } } keepbitsmask = (1 << cnt)-1; self->b = b & keepbitsmask; @@ -424,6 +432,7 @@ static int parsePred6(ljp* self) { diff = nextdiff(self,0); Px = 1 << (self->bits-1); left = Px + diff; + left = (u16) (left % 65536); if (self->linearize) linear = self->linearize[left]; else @@ -437,6 +446,7 @@ static int parsePred6(ljp* self) { diff = nextdiff(self,0); Px = left; left = Px + diff; + left = (u16) (left % 65536); if (self->linearize) linear = self->linearize[left]; else @@ -460,6 +470,7 @@ static int parsePred6(ljp* self) { diff = nextdiff(self,0); Px = lastrow[col]; // Use value above for first pixel in row left = Px + diff; + left = (u16) (left % 65536); if (self->linearize) { if (left>self->linlen) return LJ92_ERROR_CORRUPT; linear = self->linearize[left]; @@ -478,6 +489,7 @@ static int parsePred6(ljp* self) { diff = nextdiff(self,0); Px = lastrow[col] + ((left - lastrow[col-1])>>1); left = Px + diff; + left = (u16) (left % 65536); //printf("%d %d %d %d %d %x\n",col,diff,left,lastrow[col],lastrow[col-1],&lastrow[col]); if (self->linearize) { if (left>self->linlen) return LJ92_ERROR_CORRUPT; @@ -556,6 +568,7 @@ static int parseScan(ljp* self) { } diff = nextdiff(self,Px); left = Px + diff; + left = (u16) (left % 65536); //printf("%d %d %d\n",c,diff,left); int linear; if (self->linearize) { diff --git a/rtengine/procevents.h b/rtengine/procevents.h index d1d0c1126..0bb673f1e 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -1064,6 +1064,15 @@ enum ProcEventCode { Evlocallabdivgr = 1038, EvLocallabSpotavoidrad = 1039, EvLocallabSpotavoidmun = 1040, + Evlocallabcontthres = 1041, + Evlocallabnorm = 1042, + Evlocallabreparw = 1043, + Evlocallabreparcol = 1044, + Evlocallabreparden = 1045, + Evlocallabreparsh = 1046, + Evlocallabreparexp = 1047, + Evlocallabrepartm = 1048, + Evlocallabchroml = 1049, NUMOFEVENTS }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 46ad90702..513c8694c 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2850,6 +2850,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : complexcolor(2), curvactiv(false), lightness(0), + reparcol(100.), contrast(0), chroma(0), labgridALow(0.0), @@ -3115,6 +3116,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : 1.0, 1.0 }, + norm(true), inversex(false), enaExpMask(false), enaExpMaskaft(false), @@ -3181,12 +3183,13 @@ LocallabParams::LocallabSpot::LocallabSpot() : expMethod("std"), exnoiseMethod("none"), laplacexp(0.0), + reparexp(100.0), balanexp(1.0), linear(0.05), gamm(0.4), fatamount(1.0), fatdetail(40.0), - fatanchor(1.0), + fatanchor(50.0), fatlevel(1.), recothrese(1.), lowthrese(12.), @@ -3261,6 +3264,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : slomaskSH(0.0), lapmaskSH(0.0), detailSH(0), + reparsh(100.), LmaskSHcurve{ static_cast(DCT_NURBS), 0.0, @@ -3419,6 +3423,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : nlrad(5), nlgam(3.), sensiden(60), + reparden(100.), detailthr(50), locwavcurveden{ static_cast(FCT_MinMaxCPoints), @@ -3548,6 +3553,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : gamma(1.0), estop(1.4), scaltm(1.0), + repartm(100.0), rewei(0), satur(0.), sensitm(60), @@ -3662,8 +3668,8 @@ LocallabParams::LocallabSpot::LocallabSpot() : 0.35 }, inversret(false), - equilret(true), - loglin(false), + equilret(false), + loglin(true), dehazeSaturation(50.0), softradiusret(40.0), CCmaskreticurve{ @@ -3793,6 +3799,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : edgw(60.0), basew(10.0), sensilc(60), + reparw(100.), fftwlc(false), blurlc(true), wavblur(false), @@ -4033,9 +4040,11 @@ LocallabParams::LocallabSpot::LocallabSpot() : targetGray(18.), catad(0.), saturl(0.), + chroml(0.), lightl(0.), lightq(0.), contl(0.), + contthres(0.), contq(0.), colorfl(0.), LcurveL{ @@ -4272,6 +4281,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && complexcolor == other.complexcolor && curvactiv == other.curvactiv && lightness == other.lightness + && reparcol == other.reparcol && contrast == other.contrast && chroma == other.chroma && labgridALow == other.labgridALow @@ -4351,6 +4361,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && strexp == other.strexp && angexp == other.angexp && excurve == other.excurve + && norm == other.norm && inversex == other.inversex && enaExpMask == other.enaExpMask && enaExpMaskaft == other.enaExpMaskaft @@ -4370,6 +4381,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && expMethod == other.expMethod && exnoiseMethod == other.exnoiseMethod && laplacexp == other.laplacexp + && reparexp == other.reparexp && balanexp == other.balanexp && linear == other.linear && gamm == other.gamm @@ -4416,6 +4428,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && slomaskSH == other.slomaskSH && lapmaskSH == other.lapmaskSH && detailSH == other.detailSH + && reparsh == other.reparsh && LmaskSHcurve == other.LmaskSHcurve && fatamountSH == other.fatamountSH && fatanchorSH == other.fatanchorSH @@ -4518,6 +4531,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && nlrad == other.nlrad && nlgam == other.nlgam && sensiden == other.sensiden + && reparden == other.reparden && detailthr == other.detailthr && locwavcurveden == other.locwavcurveden && locwavcurvehue == other.locwavcurvehue @@ -4549,6 +4563,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && gamma == other.gamma && estop == other.estop && scaltm == other.scaltm + && repartm == other.repartm && rewei == other.rewei && satur == other.satur && sensitm == other.sensitm @@ -4670,6 +4685,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && edgw == other.edgw && basew == other.basew && sensilc == other.sensilc + && reparw == other.reparw && fftwlc == other.fftwlc && blurlc == other.blurlc && wavblur == other.wavblur @@ -4747,9 +4763,11 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && targetGray == other.targetGray && catad == other.catad && saturl == other.saturl + && chroml == other.chroml && lightl == other.lightl && lightq == other.lightq && contl == other.contl + && contthres == other.contthres && contq == other.contq && colorfl == other.colorfl && LcurveL == other.LcurveL @@ -5915,6 +5933,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || spot_edited->complexcolor, "Locallab", "Complexcolor_" + index_str, spot.complexcolor, keyFile); saveToKeyfile(!pedited || spot_edited->curvactiv, "Locallab", "Curvactiv_" + index_str, spot.curvactiv, keyFile); saveToKeyfile(!pedited || spot_edited->lightness, "Locallab", "Lightness_" + index_str, spot.lightness, keyFile); + saveToKeyfile(!pedited || spot_edited->reparcol, "Locallab", "Reparcol_" + index_str, spot.reparcol, keyFile); saveToKeyfile(!pedited || spot_edited->contrast, "Locallab", "Contrast_" + index_str, spot.contrast, keyFile); saveToKeyfile(!pedited || spot_edited->chroma, "Locallab", "Chroma_" + index_str, spot.chroma, keyFile); saveToKeyfile(!pedited || spot_edited->labgridALow, "Locallab", "labgridALow_" + index_str, spot.labgridALow, keyFile); @@ -5995,6 +6014,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || spot_edited->strexp, "Locallab", "Strexp_" + index_str, spot.strexp, keyFile); saveToKeyfile(!pedited || spot_edited->angexp, "Locallab", "Angexp_" + index_str, spot.angexp, keyFile); saveToKeyfile(!pedited || spot_edited->excurve, "Locallab", "ExCurve_" + index_str, spot.excurve, keyFile); + saveToKeyfile(!pedited || spot_edited->norm, "Locallab", "Norm_" + index_str, spot.norm, keyFile); saveToKeyfile(!pedited || spot_edited->inversex, "Locallab", "Inversex_" + index_str, spot.inversex, keyFile); saveToKeyfile(!pedited || spot_edited->enaExpMask, "Locallab", "EnaExpMask_" + index_str, spot.enaExpMask, keyFile); saveToKeyfile(!pedited || spot_edited->enaExpMaskaft, "Locallab", "EnaExpMaskaft_" + index_str, spot.enaExpMaskaft, keyFile); @@ -6014,6 +6034,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || spot_edited->expMethod, "Locallab", "ExpMethod_" + index_str, spot.expMethod, keyFile); saveToKeyfile(!pedited || spot_edited->exnoiseMethod, "Locallab", "ExnoiseMethod_" + index_str, spot.exnoiseMethod, keyFile); saveToKeyfile(!pedited || spot_edited->laplacexp, "Locallab", "Laplacexp_" + index_str, spot.laplacexp, keyFile); + saveToKeyfile(!pedited || spot_edited->reparexp, "Locallab", "Reparexp_" + index_str, spot.reparexp, keyFile); saveToKeyfile(!pedited || spot_edited->balanexp, "Locallab", "Balanexp_" + index_str, spot.balanexp, keyFile); saveToKeyfile(!pedited || spot_edited->linear, "Locallab", "Linearexp_" + index_str, spot.linear, keyFile); saveToKeyfile(!pedited || spot_edited->gamm, "Locallab", "Gamm_" + index_str, spot.gamm, keyFile); @@ -6056,6 +6077,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || spot_edited->gammaskSH, "Locallab", "GammaskSH_" + index_str, spot.gammaskSH, keyFile); saveToKeyfile(!pedited || spot_edited->slomaskSH, "Locallab", "SlomaskSH_" + index_str, spot.slomaskSH, keyFile); saveToKeyfile(!pedited || spot_edited->detailSH, "Locallab", "DetailSH_" + index_str, spot.detailSH, keyFile); + saveToKeyfile(!pedited || spot_edited->reparsh, "Locallab", "Reparsh_" + index_str, spot.reparsh, keyFile); saveToKeyfile(!pedited || spot_edited->LmaskSHcurve, "Locallab", "LmaskSHCurve_" + index_str, spot.LmaskSHcurve, keyFile); saveToKeyfile(!pedited || spot_edited->fatamountSH, "Locallab", "FatamountSH_" + index_str, spot.fatamountSH, keyFile); saveToKeyfile(!pedited || spot_edited->fatanchorSH, "Locallab", "FatanchorSH_" + index_str, spot.fatanchorSH, keyFile); @@ -6161,6 +6183,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || spot_edited->nlrad, "Locallab", "Nlrad_" + index_str, spot.nlrad, keyFile); saveToKeyfile(!pedited || spot_edited->nlgam, "Locallab", "Nlgam_" + index_str, spot.nlgam, keyFile); saveToKeyfile(!pedited || spot_edited->sensiden, "Locallab", "Sensiden_" + index_str, spot.sensiden, keyFile); + saveToKeyfile(!pedited || spot_edited->reparden, "Locallab", "Reparden_" + index_str, spot.reparden, keyFile); saveToKeyfile(!pedited || spot_edited->detailthr, "Locallab", "Detailthr_" + index_str, spot.detailthr, keyFile); saveToKeyfile(!pedited || spot_edited->locwavcurveden, "Locallab", "LocwavCurveden_" + index_str, spot.locwavcurveden, keyFile); saveToKeyfile(!pedited || spot_edited->locwavcurvehue, "Locallab", "LocwavCurvehue_" + index_str, spot.locwavcurvehue, keyFile); @@ -6193,6 +6216,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || spot_edited->gamma, "Locallab", "Gamma_" + index_str, spot.gamma, keyFile); saveToKeyfile(!pedited || spot_edited->estop, "Locallab", "Estop_" + index_str, spot.estop, keyFile); saveToKeyfile(!pedited || spot_edited->scaltm, "Locallab", "Scaltm_" + index_str, spot.scaltm, keyFile); + saveToKeyfile(!pedited || spot_edited->repartm, "Locallab", "Repartm_" + index_str, spot.repartm, keyFile); saveToKeyfile(!pedited || spot_edited->rewei, "Locallab", "Rewei_" + index_str, spot.rewei, keyFile); saveToKeyfile(!pedited || spot_edited->satur, "Locallab", "Satur_" + index_str, spot.satur, keyFile); saveToKeyfile(!pedited || spot_edited->sensitm, "Locallab", "Sensitm_" + index_str, spot.sensitm, keyFile); @@ -6317,6 +6341,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || spot_edited->edgw, "Locallab", "Edgw_" + index_str, spot.edgw, keyFile); saveToKeyfile(!pedited || spot_edited->basew, "Locallab", "Basew_" + index_str, spot.basew, keyFile); saveToKeyfile(!pedited || spot_edited->sensilc, "Locallab", "Sensilc_" + index_str, spot.sensilc, keyFile); + saveToKeyfile(!pedited || spot_edited->reparw, "Locallab", "Reparw_" + index_str, spot.reparw, keyFile); saveToKeyfile(!pedited || spot_edited->fftwlc, "Locallab", "Fftwlc_" + index_str, spot.fftwlc, keyFile); saveToKeyfile(!pedited || spot_edited->blurlc, "Locallab", "Blurlc_" + index_str, spot.blurlc, keyFile); saveToKeyfile(!pedited || spot_edited->wavblur, "Locallab", "Wavblur_" + index_str, spot.wavblur, keyFile); @@ -6392,10 +6417,12 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || spot_edited->targetGray, "Locallab", "TargetGray_" + index_str, spot.targetGray, keyFile); saveToKeyfile(!pedited || spot_edited->catad, "Locallab", "Catad_" + index_str, spot.catad, keyFile); saveToKeyfile(!pedited || spot_edited->saturl, "Locallab", "Saturl_" + index_str, spot.saturl, keyFile); + saveToKeyfile(!pedited || spot_edited->saturl, "Locallab", "Chroml_" + index_str, spot.chroml, keyFile); saveToKeyfile(!pedited || spot_edited->LcurveL, "Locallab", "LCurveL_" + index_str, spot.LcurveL, keyFile); saveToKeyfile(!pedited || spot_edited->lightl, "Locallab", "Lightl_" + index_str, spot.lightl, keyFile); saveToKeyfile(!pedited || spot_edited->lightq, "Locallab", "Brightq_" + index_str, spot.lightq, keyFile); saveToKeyfile(!pedited || spot_edited->contl, "Locallab", "Contl_" + index_str, spot.contl, keyFile); + saveToKeyfile(!pedited || spot_edited->contthres, "Locallab", "Contthres_" + index_str, spot.contthres, keyFile); saveToKeyfile(!pedited || spot_edited->contq, "Locallab", "Contq_" + index_str, spot.contq, keyFile); saveToKeyfile(!pedited || spot_edited->colorfl, "Locallab", "Colorfl_" + index_str, spot.colorfl, keyFile); saveToKeyfile(!pedited || spot_edited->Autogray, "Locallab", "Autogray_" + index_str, spot.Autogray, keyFile); @@ -7756,6 +7783,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) 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", "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); @@ -7849,6 +7877,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) 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); @@ -7868,6 +7897,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) 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); @@ -7915,6 +7945,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) 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", "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); @@ -8039,6 +8070,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) 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); @@ -8083,6 +8115,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) 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); @@ -8216,6 +8249,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) 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); @@ -8308,9 +8342,11 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) 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); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 7c9db4e67..b99fb6067 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1031,6 +1031,7 @@ struct LocallabParams { int complexcolor; bool curvactiv; int lightness; + double reparcol; int contrast; int chroma; double labgridALow; @@ -1110,6 +1111,7 @@ struct LocallabParams { double strexp; double angexp; std::vector excurve; + bool norm; bool inversex; bool enaExpMask; bool enaExpMaskaft; @@ -1129,6 +1131,7 @@ struct LocallabParams { Glib::ustring expMethod; // std, pde Glib::ustring exnoiseMethod; // none, med, medhi double laplacexp; + double reparexp; double balanexp; double linear; double gamm; @@ -1167,6 +1170,7 @@ struct LocallabParams { double slomaskSH; double lapmaskSH; int detailSH; + double reparsh; std::vector LmaskSHcurve; double fatamountSH; double fatanchorSH; @@ -1269,6 +1273,7 @@ struct LocallabParams { int nlrad; double nlgam; int sensiden; + double reparden; int detailthr; std::vector locwavcurveden; std::vector locwavcurvehue; @@ -1300,6 +1305,7 @@ struct LocallabParams { double gamma; double estop; double scaltm; + double repartm; int rewei; double satur; int sensitm; @@ -1421,6 +1427,7 @@ struct LocallabParams { double edgw; double basew; int sensilc; + double reparw; bool fftwlc; bool blurlc; bool wavblur; @@ -1490,9 +1497,11 @@ struct LocallabParams { double targetGray; double catad; double saturl; + double chroml; double lightl; double lightq; double contl; + double contthres; double contq; double colorfl; std::vector LcurveL; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index 8d91bdcd7..225cef180 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -76,13 +76,13 @@ int refreshmap[rtengine::NUMOFEVENTS] = { 0, // free entry RGBCURVE | M_AUTOEXP, // EvDCPToneCurve, ALLNORAW, // EvDCPIlluminant, - RETINEX, // EvSHEnabled, - AUTOEXP, // EvSHHighlights, - AUTOEXP, // EvSHShadows, - AUTOEXP, // EvSHHLTonalW, - AUTOEXP, // EvSHSHTonalW, + LUMINANCECURVE, // EvSHEnabled, + LUMINANCECURVE, // EvSHHighlights, + LUMINANCECURVE, // EvSHShadows, + LUMINANCECURVE, // EvSHHLTonalW, + LUMINANCECURVE, // EvSHSHTonalW, AUTOEXP, // EvSHLContrast, - RETINEX, // EvSHRadius, + LUMINANCECURVE, // EvSHRadius, ALLNORAW, // EvCTRotate, ALLNORAW, // EvCTHFlip, ALLNORAW, // EvCTVFlip, @@ -1067,7 +1067,16 @@ int refreshmap[rtengine::NUMOFEVENTS] = { AUTOEXP, // Evlocallabnlgam AUTOEXP, // Evlocallabdivgr AUTOEXP, // EvLocallabSpotavoidrad - AUTOEXP // EvLocallabSpotavoidmun + AUTOEXP, // EvLocallabSpotavoidmun + AUTOEXP, // Evlocallabcontthres + AUTOEXP, // Evlocallabnorm + AUTOEXP, // Evlocallabreparw + AUTOEXP, // Evlocallabreparcol + AUTOEXP, // Evlocallabreparden + AUTOEXP, // Evlocallabreparsh + AUTOEXP, // Evlocallabreparexp + AUTOEXP, // Evlocallabrepartm + AUTOEXP // Evlocallabchroml }; diff --git a/rtengine/rtthumbnail.cc b/rtengine/rtthumbnail.cc index b724992ff..1cc45aef6 100644 --- a/rtengine/rtthumbnail.cc +++ b/rtengine/rtthumbnail.cc @@ -1439,11 +1439,22 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, eSensorT params.labCurve.lccurve, curve1, curve2, satcurve, lhskcurve, 16); - ipf.chromiLuminanceCurve (nullptr, 1, labView, labView, curve1, curve2, satcurve, lhskcurve, clcurve, lumacurve, utili, autili, butili, ccutili, cclutili, clcutili, dummy, dummy); + if (params.colorToning.enabled && params.colorToning.method == "LabGrid") { + ipf.colorToningLabGrid(labView, 0,labView->W , 0, labView->H, false); + } + + ipf.shadowsHighlights(labView, params.sh.enabled, params.sh.lab,params.sh.highlights ,params.sh.shadows, params.sh.radius, 16, params.sh.htonalwidth, params.sh.stonalwidth); + + if (params.localContrast.enabled) { + // Alberto's local contrast + ipf.localContrast(labView, labView->L, params.localContrast, false, 16); + } + ipf.chromiLuminanceCurve (nullptr, 1, labView, labView, curve1, curve2, satcurve, lhskcurve, clcurve, lumacurve, utili, autili, butili, ccutili, cclutili, clcutili, dummy, dummy); ipf.vibrance (labView, params.vibrance, params.toneCurve.hrenabled, params.icm.workingProfile); ipf.labColorCorrectionRegions(labView); + if ((params.colorappearance.enabled && !params.colorappearance.tonecie) || !params.colorappearance.enabled) { ipf.EPDToneMap (labView, 5, 6); } diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index b001e0949..8f8ca8ff3 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -956,6 +956,8 @@ private: const std::unique_ptr reservView(new LabImage(*labView, true)); const std::unique_ptr lastorigView(new LabImage(*labView, true)); + std::unique_ptr savenormtmView; + std::unique_ptr savenormretiView; LocretigainCurve locRETgainCurve; LocretitransCurve locRETtransCurve; LocLHCurve loclhCurve; @@ -1040,6 +1042,7 @@ private: } for (size_t sp = 0; sp < params.locallab.spots.size(); sp++) { + // Set local curves of current spot to LUT locRETgainCurve.Set(params.locallab.spots.at(sp).localTgaincurve); locRETtransCurve.Set(params.locallab.spots.at(sp).localTtranscurve); @@ -1127,6 +1130,11 @@ private: double huere, chromare, lumare, huerefblu, chromarefblu, lumarefblu, sobelre; int lastsav; float avge; + float meantme; + float stdtme; + float meanretie; + float stdretie; + 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 { @@ -1145,7 +1153,7 @@ private: float Tmax; // No Locallab mask is shown in exported picture - ipf.Lab_Local(2, sp, shbuffer, labView, labView, reservView.get(), lastorigView.get(), 0, 0, fw, fh, 1, locRETgainCurve, locRETtransCurve, + ipf.Lab_Local(2, sp, shbuffer, labView, labView, reservView.get(), savenormtmView.get(), savenormretiView.get(), lastorigView.get(), 0, 0, fw, fh, 1, locRETgainCurve, locRETtransCurve, lllocalcurve, locallutili, cllocalcurve, localclutili, lclocalcurve, locallcutili, @@ -1187,7 +1195,9 @@ private: loclmasCurve_wav,lmasutili_wav, LHutili, HHutili, CHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); + minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax, + meantme, stdtme, meanretie, stdretie +); if (sp + 1u < params.locallab.spots.size()) { // do not copy for last spot as it is not needed anymore @@ -1352,6 +1362,18 @@ private: CurveFactory::complexsgnCurve(autili, butili, ccutili, cclutili, params.labCurve.acurve, params.labCurve.bcurve, params.labCurve.cccurve, params.labCurve.lccurve, curve1, curve2, satcurve, lhskcurve, 1); + + if (params.colorToning.enabled && params.colorToning.method == "LabGrid") { + ipf.colorToningLabGrid(labView, 0,labView->W , 0, labView->H, false); + } + + ipf.shadowsHighlights(labView, params.sh.enabled, params.sh.lab,params.sh.highlights ,params.sh.shadows, params.sh.radius, 1, params.sh.htonalwidth, params.sh.stonalwidth); + + if (params.localContrast.enabled) { + // Alberto's local contrast + ipf.localContrast(labView, labView->L, params.localContrast, false, 1);//scale); + } + ipf.chromiLuminanceCurve(nullptr, 1, labView, labView, curve1, curve2, satcurve, lhskcurve, clcurve, lumacurve, utili, autili, butili, ccutili, cclutili, clcutili, dummy, dummy); if ((params.colorappearance.enabled && !params.colorappearance.tonecie) || (!params.colorappearance.enabled)) { diff --git a/rtengine/sleef.h b/rtengine/sleef.h index fc23cbad9..8611e2fc7 100644 --- a/rtengine/sleef.h +++ b/rtengine/sleef.h @@ -3,6 +3,11 @@ // this code was taken from http://shibatch.sourceforge.net/ // Many thanks to the author of original version: Naoki Shibata // +// Copyright Naoki Shibata and contributors 2010 - 2021. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file sleef_LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// // This version contains modifications made by Ingo Weyrich // //////////////////////////////////////////////////////////////// diff --git a/rtengine/sleefsseavx.h b/rtengine/sleefsseavx.h index c10f4a0c2..374823316 100644 --- a/rtengine/sleefsseavx.h +++ b/rtengine/sleefsseavx.h @@ -3,6 +3,11 @@ // this code was taken from http://shibatch.sourceforge.net/ // Many thanks to the author of original version: Naoki Shibata // +// Copyright Naoki Shibata and contributors 2010 - 2021. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file sleef_LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// // This version contains modifications made by Ingo Weyrich // //////////////////////////////////////////////////////////////// diff --git a/rtgui/bayerrawexposure.cc b/rtgui/bayerrawexposure.cc index bb3c3a48a..157abc2cf 100644 --- a/rtgui/bayerrawexposure.cc +++ b/rtgui/bayerrawexposure.cc @@ -137,8 +137,8 @@ void BayerRAWExposure::adjusterChanged(Adjuster* a, double newval) if(!PextwoGreen->getLastActive()) { listener->panelChanged (EvPreProcessExpBlackthree, value ); } else { - listener->panelChanged (EvPreProcessExpBlackthree, value ); PexBlack0->setValue (PexBlack3->getValue()); + listener->panelChanged (EvPreProcessExpBlackthree, value ); } } } diff --git a/rtgui/colortoning.cc b/rtgui/colortoning.cc index d3c485baa..51ca3a4bc 100644 --- a/rtgui/colortoning.cc +++ b/rtgui/colortoning.cc @@ -346,7 +346,8 @@ ColorToning::ColorToning () : FoldableToolPanel(this, "colortoning", M("TP_COLOR //------------------------------------------------------------------------ // LAB grid auto m = ProcEventMapper::getInstance(); - EvColorToningLabGridValue = m->newEvent(RGBCURVE, "HISTORY_MSG_COLORTONING_LABGRID_VALUE"); +// EvColorToningLabGridValue = m->newEvent(RGBCURVE, "HISTORY_MSG_COLORTONING_LABGRID_VALUE"); + EvColorToningLabGridValue = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_COLORTONING_LABGRID_VALUE"); labgrid = Gtk::manage(new LabGrid(EvColorToningLabGridValue, M("TP_COLORTONING_LABGRID_VALUES"))); pack_start(*labgrid, Gtk::PACK_EXPAND_WIDGET, 4); //------------------------------------------------------------------------ diff --git a/rtgui/controlspotpanel.cc b/rtgui/controlspotpanel.cc index 6289ed1ae..bdf723992 100644 --- a/rtgui/controlspotpanel.cc +++ b/rtgui/controlspotpanel.cc @@ -1021,6 +1021,7 @@ void ControlSpotPanel::spotMethodChanged() } } else if (spotMethod_->get_active_row_number() == 2) { // Full image case excluFrame->hide(); + shape_->set_active(0); locX_->setValue(3000.); row[spots_.locX] = locX_->getIntValue(); diff --git a/rtgui/curveeditorgroup.cc b/rtgui/curveeditorgroup.cc index 5c120f7e4..d099e1a99 100644 --- a/rtgui/curveeditorgroup.cc +++ b/rtgui/curveeditorgroup.cc @@ -29,12 +29,17 @@ #include "options.h" #include "pathutils.h" -CurveEditorGroup::CurveEditorGroup (Glib::ustring& curveDir, Glib::ustring groupLabel) : curveDir(curveDir), line(0), curve_reset(nullptr), +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) { // We set the label to the one provided as parameter, even if it's an empty string - curveGroupLabel = Gtk::manage (new Gtk::Label (groupLabel + ":", Gtk::ALIGN_START)); + if(blank == 0) { + curveGroupLabel = Gtk::manage (new Gtk::Label (groupLabel + ":", Gtk::ALIGN_START)); + } 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()); } diff --git a/rtgui/curveeditorgroup.h b/rtgui/curveeditorgroup.h index 0f7c01a32..55d438b2d 100644 --- a/rtgui/curveeditorgroup.h +++ b/rtgui/curveeditorgroup.h @@ -71,7 +71,7 @@ public: * dialogs. */ - explicit CurveEditorGroup(Glib::ustring& curveDir, Glib::ustring groupLabel = ""); + explicit CurveEditorGroup(Glib::ustring& curveDir, Glib::ustring groupLabel = "", int blank = 0); ~CurveEditorGroup() override; void newLine(); void curveListComplete(); diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index 7553a7353..7f2352b5a 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -637,6 +637,8 @@ EditorPanel::EditorPanel (FilePanel* filePanel) vboxright = new Gtk::Paned (Gtk::ORIENTATION_VERTICAL); vsubboxright = new Gtk::Box (Gtk::ORIENTATION_VERTICAL, 0); +// int rightsize = options.fontSize * 44; +// vsubboxright->set_size_request (rightsize, rightsize - 50); vsubboxright->set_size_request (300, 250); vsubboxright->pack_start (*ppframe, Gtk::PACK_SHRINK, 2); @@ -1755,7 +1757,7 @@ void EditorPanel::procParamsChanged (Thumbnail* thm, int whoChangedIt) PartialProfile pp (true); pp.set (true); * (pp.pparams) = openThm->getProcParams(); - pp.pedited->locallab.spots.resize(pp.pparams->locallab.spots.size(), new LocallabParamsEdited::LocallabSpotEdited(true)); + pp.pedited->locallab.spots.resize(pp.pparams->locallab.spots.size(), LocallabParamsEdited::LocallabSpotEdited(true)); tpc->profileChange (&pp, rtengine::EvProfileChangeNotification, M ("PROGRESSDLG_PROFILECHANGEDINBROWSER")); pp.deleteInstance(); } diff --git a/rtgui/filebrowser.cc b/rtgui/filebrowser.cc index 0d2451b59..c3b4a6353 100644 --- a/rtgui/filebrowser.cc +++ b/rtgui/filebrowser.cc @@ -1431,7 +1431,7 @@ void FileBrowser::applyPartialMenuItemActivated (ProfileStoreLabel *label) rtengine::procparams::PartialProfile dstProfile(true); *dstProfile.pparams = (static_cast(selected[i]))->thumbnail->getProcParams (); dstProfile.set(true); - dstProfile.pedited->locallab.spots.resize(dstProfile.pparams->locallab.spots.size(), new LocallabParamsEdited::LocallabSpotEdited(true)); + dstProfile.pedited->locallab.spots.resize(dstProfile.pparams->locallab.spots.size(), LocallabParamsEdited::LocallabSpotEdited(true)); partialPasteDlg.applyPaste (dstProfile.pparams, dstProfile.pedited, srcProfiles->pparams, srcProfiles->pedited); (static_cast(selected[i]))->thumbnail->setProcParams (*dstProfile.pparams, dstProfile.pedited, FILEBROWSER); dstProfile.deleteInstance(); diff --git a/rtgui/history.cc b/rtgui/history.cc index dfc74af24..4d6940e9b 100644 --- a/rtgui/history.cc +++ b/rtgui/history.cc @@ -180,7 +180,7 @@ void History::historySelectionChanged () if (row && tpc) { ProcParams pparams = row[historyColumns.params]; ParamsEdited pe (true); - pe.locallab.spots.resize(pparams.locallab.spots.size(), new LocallabParamsEdited::LocallabSpotEdited(true)); + pe.locallab.spots.resize(pparams.locallab.spots.size(), LocallabParamsEdited::LocallabSpotEdited(true)); PartialProfile pp (&pparams, &pe); ParamsEdited paramsEdited = row[historyColumns.paramsEdited]; @@ -215,7 +215,7 @@ void History::bookmarkSelectionChanged () if (row && tpc) { ProcParams pparams = row[bookmarkColumns.params]; ParamsEdited pe (true); - pe.locallab.spots.resize(pparams.locallab.spots.size(), new LocallabParamsEdited::LocallabSpotEdited(true)); + pe.locallab.spots.resize(pparams.locallab.spots.size(), LocallabParamsEdited::LocallabSpotEdited(true)); PartialProfile pp (&pparams, &pe); ParamsEdited paramsEdited = row[bookmarkColumns.paramsEdited]; tpc->profileChange (&pp, EvBookmarkSelected, row[bookmarkColumns.text], ¶msEdited); diff --git a/rtgui/localcontrast.cc b/rtgui/localcontrast.cc index d91642b6c..6b668a1eb 100644 --- a/rtgui/localcontrast.cc +++ b/rtgui/localcontrast.cc @@ -32,11 +32,17 @@ using namespace rtengine::procparams; LocalContrast::LocalContrast(): FoldableToolPanel(this, "localcontrast", M("TP_LOCALCONTRAST_LABEL"), false, true) { auto m = ProcEventMapper::getInstance(); - EvLocalContrastEnabled = m->newEvent(RGBCURVE, "HISTORY_MSG_LOCALCONTRAST_ENABLED"); +/* EvLocalContrastEnabled = m->newEvent(RGBCURVE, "HISTORY_MSG_LOCALCONTRAST_ENABLED"); EvLocalContrastRadius = m->newEvent(RGBCURVE, "HISTORY_MSG_LOCALCONTRAST_RADIUS"); EvLocalContrastAmount = m->newEvent(RGBCURVE, "HISTORY_MSG_LOCALCONTRAST_AMOUNT"); EvLocalContrastDarkness = m->newEvent(RGBCURVE, "HISTORY_MSG_LOCALCONTRAST_DARKNESS"); EvLocalContrastLightness = m->newEvent(RGBCURVE, "HISTORY_MSG_LOCALCONTRAST_LIGHTNESS"); +*/ + EvLocalContrastEnabled = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCALCONTRAST_ENABLED"); + EvLocalContrastRadius = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCALCONTRAST_RADIUS"); + EvLocalContrastAmount = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCALCONTRAST_AMOUNT"); + EvLocalContrastDarkness = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCALCONTRAST_DARKNESS"); + EvLocalContrastLightness = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCALCONTRAST_LIGHTNESS"); radius = Gtk::manage(new Adjuster(M("TP_LOCALCONTRAST_RADIUS"), 20., 200., 1., 80.)); amount = Gtk::manage(new Adjuster(M("TP_LOCALCONTRAST_AMOUNT"), 0., 1., 0.01, 0.2)); diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index e1eca81c5..6f59d3b0f 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -740,6 +740,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited } else { 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)); // Calculate spot size and center position according to preview area if (provider && !batchMode) { @@ -752,17 +753,27 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited newSpot->centerX = rtengine::LIM(int(int((double)prX - (double)imW / 2.) * 2000. / (double)imW), -1000, 1000); newSpot->centerY = rtengine::LIM(int(int((double)prY - (double)imH / 2.) * 2000. / (double)imH), -1000, 1000); // Ellipse/rectangle size computation + /* newSpot->loc.at(0) = rtengine::LIM(int(((double)prW / 2. - 5.) * 2000. / (double)imW), 2, newSpot->loc.at(0)); newSpot->loc.at(1) = rtengine::LIM(int(((double)prW / 2. - 5.) * 2000. / (double)imW), 2, newSpot->loc.at(1)); newSpot->loc.at(2) = rtengine::LIM(int(((double)prH / 2. - 5.) * 2000. / (double)imH), 2, newSpot->loc.at(2)); newSpot->loc.at(3) = rtengine::LIM(int(((double)prH / 2. - 5.) * 2000. / (double)imH), 2, newSpot->loc.at(3)); + */ } } - 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->centerX = newSpot->centerX; r->centerY = newSpot->centerY; diff --git a/rtgui/locallabtools.cc b/rtgui/locallabtools.cc index d7581c938..6f8ccea7a 100644 --- a/rtgui/locallabtools.cc +++ b/rtgui/locallabtools.cc @@ -132,28 +132,29 @@ LocallabTool::LocallabTool(Gtk::Box* content, Glib::ustring toolName, Glib::ustr complexity(Gtk::manage(new MyComboBoxText())) { // Create expander title bar + Gtk::Box *titVBox; + titVBox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); + titVBox->set_spacing(2); + Gtk::Box* const titleBox = Gtk::manage(new Gtk::Box()); Gtk::Label* const titleLabel = Gtk::manage(new Gtk::Label()); 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")); removeEvBox->add(*removeImage); - titleBox->pack_end(*removeEvBox, Gtk::PACK_SHRINK, 4); - + titleBox->pack_end(*removeEvBox, Gtk::PACK_SHRINK, 1); if (needMode) { complexity->append(M("TP_LOCALLAB_MODE_EXPERT")); complexity->append(M("TP_LOCALLAB_MODE_NORMAL")); complexity->append(M("TP_LOCALLAB_MODE_SIMPLE")); complexity->set_active(2); - complexity->setPreferredWidth(100, -1); complexityConn = complexity->signal_changed().connect(sigc::mem_fun(*this, &LocallabTool::complexityModeChanged)); - titleBox->pack_end(*complexity, Gtk::PACK_SHRINK, 2); } Gtk::Separator* const separator = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_VERTICAL)); @@ -164,8 +165,10 @@ LocallabTool::LocallabTool(Gtk::Box* content, Glib::ustring toolName, Glib::ustr titleImage->set_tooltip_text(M("TP_GENERAL_11SCALE_TOOLTIP")); titleBox->pack_end(*titleImage, Gtk::PACK_SHRINK, 0); } + titVBox->pack_start(*titleBox, Gtk::PACK_SHRINK, 1); + titVBox->pack_start(*complexity, Gtk::PACK_SHRINK, 1); - exp = Gtk::manage(new MyExpander(true, titleBox)); + exp = Gtk::manage(new MyExpander(true, titVBox)); exp->signal_button_release_event().connect_notify(sigc::mem_fun(this, &LocallabTool::foldThemAll)); enaExpConn = exp->signal_enabled_toggled().connect(sigc::mem_fun(*this, &LocallabTool::enabledChanged)); @@ -413,6 +416,7 @@ LocallabColor::LocallabColor(): // Color & Light specific widgets lumFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LUMFRA")))), + reparcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGREPART"), 1.0, 100.0, 1., 100.0))), lightness(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LIGHTNESS"), -100, 500, 1, 0))), contrast(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CONTRAST"), -100, 100, 1, 0))), chroma(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMA"), -100, 150, 1, 0))), @@ -448,11 +452,11 @@ LocallabColor::LocallabColor(): clshape(static_cast(clCurveEditorG->addCurve(CT_Diagonal, "C(L)"))), lcshape(static_cast(clCurveEditorG->addCurve(CT_Diagonal, "L(C)"))), HCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_HLH"))), - LHshape(static_cast(HCurveEditorG->addCurve(CT_Flat, "L(H)", nullptr, false, true))), + LHshape(static_cast(HCurveEditorG->addCurve(CT_Flat, "L(h)", nullptr, false, true))), H3CurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_HLH"))), - CHshape(static_cast(H3CurveEditorG->addCurve(CT_Flat, "C(H)", nullptr, false, true))), + CHshape(static_cast(H3CurveEditorG->addCurve(CT_Flat, "C(h)", nullptr, false, true))), H2CurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_HLH"))), - HHshape(static_cast(H2CurveEditorG->addCurve(CT_Flat, "H(H)", nullptr, false, true))), + HHshape(static_cast(H2CurveEditorG->addCurve(CT_Flat, "h(h)", nullptr, false, true))), rgbCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_RGB"))), toneMethod(Gtk::manage(new MyComboBoxText())), rgbshape(static_cast(rgbCurveEditorG->addCurve(CT_Diagonal, "", toneMethod))), @@ -472,10 +476,11 @@ LocallabColor::LocallabColor(): showmaskcolMethod(Gtk::manage(new MyComboBoxText())), showmaskcolMethodinv(Gtk::manage(new MyComboBoxText())), enaColorMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), - maskCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASKCOL"))), - CCmaskshape(static_cast(maskCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))), - LLmaskshape(static_cast(maskCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))), - HHmaskshape(static_cast(maskCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))), +// maskCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASKCOL"))), + maskCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir,"", 1)), + CCmaskshape(static_cast(maskCurveEditorG->addCurve(CT_Flat, "C", nullptr, false, false))), + LLmaskshape(static_cast(maskCurveEditorG->addCurve(CT_Flat, "L", nullptr, false, false))), + HHmaskshape(static_cast(maskCurveEditorG->addCurve(CT_Flat, "LC(h)", nullptr, false, true))), struFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LABSTRUM")))), strumaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUMASKCOL"), 0., 200., 0.1, 0.))), toolcol(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_TOOLCOL")))), @@ -485,14 +490,16 @@ LocallabColor::LocallabColor(): blurcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURCOL"), 0.2, 100., 0.5, 0.2))), blendmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), toolcolFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_TOOLMASK")))), + toolcolFrame2(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_TOOLMASK_2")))), radmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))), lapmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))), chromaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))), gammaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.25, 4.0, 0.01, 1.))), slomaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOMASKCOL"), 0.0, 15.0, 0.1, 0.))), shadmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHAMASKCOL"), 0, 100, 1, 0))), - maskHCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASKH"))), - HHhmaskshape(static_cast(maskHCurveEditorG->addCurve(CT_Flat, "H(H)", nullptr, false, true))), + // maskHCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASKH"))), + maskHCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, "")), + HHhmaskshape(static_cast(maskHCurveEditorG->addCurve(CT_Flat, "h(h)", nullptr, false, true))), mask2CurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))), Lmaskshape(static_cast(mask2CurveEditorG->addCurve(CT_Diagonal, "L(L)"))), mask2CurveEditorGwav(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVMASK"))), @@ -519,6 +526,8 @@ LocallabColor::LocallabColor(): lightness->setAdjusterListener(this); + reparcol->setAdjusterListener(this); + contrast->setAdjusterListener(this); chroma->setAdjusterListener(this); @@ -781,6 +790,7 @@ LocallabColor::LocallabColor(): csThresholdcol->setAdjusterListener(this); // Add Color & Light specific widgets to GUI + pack_start(*reparcol); ToolParamBlock* const lumBox = Gtk::manage(new ToolParamBlock()); lumBox->pack_start(*lightness); lumBox->pack_start(*contrast); @@ -879,6 +889,7 @@ LocallabColor::LocallabColor(): maskcolBox->pack_start(*blendmaskcol, Gtk::PACK_SHRINK, 0); // Gtk::Frame* const toolcolFrame = Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_TOOLMASK"))); toolcolFrame->set_label_align(0.025, 0.5); + toolcolFrame2->set_label_align(0.025, 0.5); ToolParamBlock* const toolcolBox = Gtk::manage(new ToolParamBlock()); toolcolBox->pack_start(*radmaskcol, Gtk::PACK_SHRINK, 0); toolcolBox->pack_start(*lapmaskcol, Gtk::PACK_SHRINK, 0); @@ -888,8 +899,11 @@ LocallabColor::LocallabColor(): toolcolBox->pack_start(*shadmaskcol, Gtk::PACK_SHRINK, 0); toolcolBox->pack_start(*maskHCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor toolcolBox->pack_start(*mask2CurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor - toolcolBox->pack_start(*mask2CurveEditorGwav, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor - toolcolBox->pack_start(*csThresholdcol, Gtk::PACK_SHRINK, 0); + ToolParamBlock* const toolcolBox2 = Gtk::manage(new ToolParamBlock()); + toolcolBox2->pack_start(*mask2CurveEditorGwav, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor + toolcolBox2->pack_start(*csThresholdcol, Gtk::PACK_SHRINK, 0); + toolcolFrame2->add(*toolcolBox2); + toolcolBox->pack_start(*toolcolFrame2); toolcolFrame->add(*toolcolBox); maskcolBox->pack_start(*toolcolFrame); mergecolFrame->add(*maskcolBox); @@ -947,6 +961,7 @@ void LocallabColor::updateAdviceTooltips(const bool showTooltips) if (showTooltips) { lumFrame->set_tooltip_text(M("TP_LOCALLAB_EXPCOLOR_TOOLTIP")); lightness->set_tooltip_text(M("TP_LOCALLAB_LIGHTN_TOOLTIP")); + reparcol->set_tooltip_text(M("TP_LOCALLAB_REPARCOL_TOOLTIP")); gridMethod->set_tooltip_text(M("TP_LOCALLAB_GRIDMETH_TOOLTIP")); strengthgrid->set_tooltip_text(M("TP_LOCALLAB_STRENGRID_TOOLTIP")); blurcolde->set_tooltip_text(M("TP_LOCALLAB_BLURCOLDE_TOOLTIP")); @@ -998,6 +1013,7 @@ void LocallabColor::updateAdviceTooltips(const bool showTooltips) } else { lumFrame->set_tooltip_text(""); lightness->set_tooltip_text(""); + reparcol->set_tooltip_text(""); gridMethod->set_tooltip_text(""); strengthgrid->set_tooltip_text(""); blurcolde->set_tooltip_text(""); @@ -1114,6 +1130,7 @@ void LocallabColor::read(const rtengine::procparams::ProcParams* pp, const Param complexity->set_active(spot.complexcolor); lightness->setValue(spot.lightness); + reparcol->setValue(spot.reparcol); contrast->setValue(spot.contrast); chroma->setValue(spot.chroma); curvactiv->set_active(spot.curvactiv); @@ -1288,6 +1305,7 @@ void LocallabColor::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pe spot.complexcolor = complexity->get_active_row_number(); spot.lightness = lightness->getIntValue(); + spot.reparcol = reparcol->getValue(); spot.contrast = contrast->getIntValue(); spot.chroma = chroma->getIntValue(); spot.curvactiv = curvactiv->get_active(); @@ -1451,6 +1469,7 @@ void LocallabColor::setDefaults(const rtengine::procparams::ProcParams* defParam // Set default value for adjuster, labgrid and threshold adjuster widgets lightness->setDefault((double)defSpot.lightness); + reparcol->setDefault(defSpot.reparcol); contrast->setDefault((double)defSpot.contrast); chroma->setDefault((double)defSpot.chroma); labgrid->setDefault(defSpot.labgridALow / LocallabParams::LABGRIDL_CORR_MAX, @@ -1505,6 +1524,13 @@ void LocallabColor::adjusterChanged(Adjuster* a, double newval) } } + if (a == reparcol) { + if (listener) { + listener->panelChanged(Evlocallabreparcol, + reparcol->getTextValue() + " (" + escapeHtmlChars(spotName) + ")"); + } + } + if (a == contrast) { if (listener) { listener->panelChanged(Evlocallabcontrast, @@ -2041,6 +2067,7 @@ void LocallabColor::updateGUIToMode(const modeType new_type) maskHCurveEditorG->hide(); mask2CurveEditorGwav->hide(); csThresholdcol->hide(); + toolcolFrame2->hide(); // Specific Simple mode widgets are shown in Normal mode softradiuscol->show(); if (enaColorMask->get_active()) { @@ -2113,6 +2140,7 @@ void LocallabColor::updateGUIToMode(const modeType new_type) maskHCurveEditorG->show(); mask2CurveEditorGwav->show(); csThresholdcol->show(); + toolcolFrame2->show(); } } @@ -2364,6 +2392,7 @@ void LocallabColor::updateColorGUI1() showmaskcolMethodinv->show(); contcol->hide(); blurcol->hide(); + reparcol->hide(); } else { gridFrame->show(); @@ -2395,6 +2424,7 @@ void LocallabColor::updateColorGUI1() showmaskcolMethodConninv.block(false); contcol->show(); blurcol->show(); + reparcol->show(); } } @@ -2476,6 +2506,7 @@ LocallabExposure::LocallabExposure(): // pdeFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_PDEFRA")))), exppde(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_PDEFRA")))), laplacexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPLACEXP"), 0.0, 100.0, 0.1, 0.))), + reparexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGREPART"), 1.0, 100.0, 1., 100.0))), linear(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LINEAR"), 0.01, 1., 0.01, 0.05))), balanexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BALANEXP"), 0.5, 1.5, 0.01, 1.0))), gamm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMM"), 0.2, 1.3, 0.01, 0.4))), @@ -2485,8 +2516,9 @@ 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.))), - fatlevel(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATLEVEL"), 0.25, 2.5, 0.05, 1.))), - fatanchor(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATANCHORA"), 0.1, 3.0, 0.05, 1.))), + 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"))))), 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))), blurexpde(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURDE"), 2, 100, 1, 5))), @@ -2517,10 +2549,11 @@ LocallabExposure::LocallabExposure(): showmaskexpMethodinv(Gtk::manage(new MyComboBoxText())), enaExpMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), enaExpMaskaft(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASKAFT")))), - maskexpCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), - CCmaskexpshape(static_cast(maskexpCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))), - LLmaskexpshape(static_cast(maskexpCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))), - HHmaskexpshape(static_cast(maskexpCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))), + // maskexpCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), + maskexpCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, "", 1)), + CCmaskexpshape(static_cast(maskexpCurveEditorG->addCurve(CT_Flat, "C", nullptr, false, false))), + LLmaskexpshape(static_cast(maskexpCurveEditorG->addCurve(CT_Flat, "L", nullptr, false, false))), + HHmaskexpshape(static_cast(maskexpCurveEditorG->addCurve(CT_Flat, "LC(h)", nullptr, false, true))), blendmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), radmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))), lapmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))), @@ -2548,6 +2581,7 @@ LocallabExposure::LocallabExposure(): setExpandAlignProperties(expfat, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); laplacexp->setAdjusterListener(this); + reparexp->setAdjusterListener(this); linear->setAdjusterListener(this); @@ -2615,6 +2649,7 @@ LocallabExposure::LocallabExposure(): higthrese->setAdjusterListener(this); decaye->setAdjusterListener(this); setExpandAlignProperties(exprecove, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); + normConn = norm->signal_toggled().connect(sigc::mem_fun(*this, &LocallabExposure::normChanged)); inversexConn = inversex->signal_toggled().connect(sigc::mem_fun(*this, &LocallabExposure::inversexChanged)); inversex->set_tooltip_text(M("TP_LOCALLAB_INVERS_TOOLTIP")); @@ -2686,7 +2721,8 @@ LocallabExposure::LocallabExposure(): mask2expCurveEditorG->curveListComplete(); // Add Color & Light specific widgets to GUI -// pack_start(*expMethod); + pack_start(*sensiex); + pack_start(*reparexp); ToolParamBlock* const pdeBox = Gtk::manage(new ToolParamBlock()); pdeBox->pack_start(*laplacexp); pdeBox->pack_start(*linear); @@ -2704,14 +2740,14 @@ LocallabExposure::LocallabExposure(): ToolParamBlock* const fatBox = Gtk::manage(new ToolParamBlock()); fatBox->pack_start(*fatamount); fatBox->pack_start(*fatdetail); - fatBox->pack_start(*fatlevel); +// fatBox->pack_start(*norm); +// fatBox->pack_start(*fatlevel); fatBox->pack_start(*fatanchor); // fatFrame->add(*fatBox); expfat->add(*fatBox, false); // pack_start(*fatFrame); pack_start(*expfat); pack_start(*expcomp); - pack_start(*sensiex); pack_start(*structexp); pack_start(*blurexpde); ToolParamBlock* const toolBox = Gtk::manage(new ToolParamBlock()); @@ -2806,6 +2842,7 @@ void LocallabExposure::updateAdviceTooltips(const bool showTooltips) higthrese->set_tooltip_text(M("TP_LOCALLAB_MASKHIGTHRESE_TOOLTIP")); blurexpde->set_tooltip_text(M("TP_LOCALLAB_BLURCOLDE_TOOLTIP")); laplacexp->set_tooltip_text(M("TP_LOCALLAB_EXPLAP_TOOLTIP")); + reparexp->set_tooltip_text(M("TP_LOCALLAB_REPAREXP_TOOLTIP")); linear->set_tooltip_text(M("TP_LOCALLAB_EXPLAPLIN_TOOLTIP")); balanexp->set_tooltip_text(M("TP_LOCALLAB_EXPLAPBAL_TOOLTIP")); gamm->set_tooltip_text(M("TP_LOCALLAB_EXPLAPGAMM_TOOLTIP")); @@ -2840,6 +2877,7 @@ void LocallabExposure::updateAdviceTooltips(const bool showTooltips) blurexpde->set_tooltip_text(""); exprecove->set_tooltip_markup(""); laplacexp->set_tooltip_text(""); + reparexp->set_tooltip_text(""); linear->set_tooltip_text(""); balanexp->set_tooltip_text(""); gamm->set_tooltip_text(""); @@ -2885,6 +2923,7 @@ void LocallabExposure::disableListener() expMethodConn.block(true); exnoiseMethodConn.block(true); inversexConn.block(true); + normConn.block(true); showmaskexpMethodConn.block(true); showmaskexpMethodConninv.block(true); enaExpMaskConn.block(true); @@ -2898,6 +2937,7 @@ void LocallabExposure::enableListener() expMethodConn.block(false); exnoiseMethodConn.block(false); inversexConn.block(false); + normConn.block(false); showmaskexpMethodConn.block(false); showmaskexpMethodConninv.block(false); enaExpMaskConn.block(false); @@ -2928,6 +2968,7 @@ void LocallabExposure::read(const rtengine::procparams::ProcParams* pp, const Pa } */ laplacexp->setValue(spot.laplacexp); + reparexp->setValue(spot.reparexp); linear->setValue(spot.linear); balanexp->setValue(spot.balanexp); gamm->setValue(spot.gamm); @@ -2949,6 +2990,8 @@ void LocallabExposure::read(const rtengine::procparams::ProcParams* pp, const Pa fatdetail->setValue(spot.fatdetail); fatlevel->setValue(spot.fatlevel); fatanchor->setValue(spot.fatanchor); + // fatlevel->setValue(1.); + // fatanchor->setValue(1.); sensiex->setValue(spot.sensiex); structexp->setValue(spot.structexp); blurexpde->setValue(spot.blurexpde); @@ -2963,6 +3006,7 @@ void LocallabExposure::read(const rtengine::procparams::ProcParams* pp, const Pa strexp->setValue(spot.strexp); angexp->setValue(spot.angexp); softradiusexp->setValue(spot.softradiusexp); + norm->set_active(spot.norm); inversex->set_active(spot.inversex); enaExpMask->set_active(spot.enaExpMask); enaExpMaskaft->set_active(spot.enaExpMaskaft); @@ -3016,6 +3060,7 @@ void LocallabExposure::write(rtengine::procparams::ProcParams* pp, ParamsEdited* } */ spot.laplacexp = laplacexp->getValue(); + spot.reparexp = reparexp->getValue(); spot.linear = linear->getValue(); spot.balanexp = balanexp->getValue(); spot.gamm = gamm->getValue(); @@ -3051,6 +3096,7 @@ void LocallabExposure::write(rtengine::procparams::ProcParams* pp, ParamsEdited* spot.angexp = angexp->getValue(); spot.softradiusexp = softradiusexp->getValue(); spot.inversex = inversex->get_active(); + spot.norm = norm->get_active(); spot.enaExpMask = enaExpMask->get_active(); spot.enaExpMaskaft = enaExpMaskaft->get_active(); spot.CCmaskexpcurve = CCmaskexpshape->getCurve(); @@ -3079,6 +3125,7 @@ void LocallabExposure::setDefaults(const rtengine::procparams::ProcParams* defPa // Set default values for adjuster widgets laplacexp->setDefault(defSpot.laplacexp); + reparexp->setDefault(defSpot.reparexp); linear->setDefault(defSpot.linear); balanexp->setDefault(defSpot.balanexp); gamm->setDefault(defSpot.gamm); @@ -3131,6 +3178,13 @@ void LocallabExposure::adjusterChanged(Adjuster* a, double newval) } } + if (a == reparexp) { + if (listener) { + listener->panelChanged(Evlocallabreparexp, + reparexp->getTextValue() + " (" + escapeHtmlChars(spotName) + ")"); + } + } + if (a == linear) { if (listener) { listener->panelChanged(Evlocallablinear, @@ -3428,6 +3482,8 @@ void LocallabExposure::convertParamToNormal() strmaskexp->setValue(defSpot.strmaskexp); angmaskexp->setValue(defSpot.angmaskexp); decaye->setValue(defSpot.decaye); +// norm->set_active(defSpot.enaExpMask); + fatlevel->setValue(defSpot.fatlevel); // Enable all listeners enableListener(); @@ -3439,7 +3495,9 @@ void LocallabExposure::convertParamToSimple() // Disable all listeners disableListener(); - + fatlevel->setValue(defSpot.fatlevel); + fatanchor->setValue(defSpot.fatanchor); + norm->set_active(false); // Set hidden specific GUI widgets in Simple mode to default spot values strexp->setValue(defSpot.strexp); angexp->setValue(defSpot.angexp); @@ -3476,6 +3534,9 @@ void LocallabExposure::updateGUIToMode(const modeType new_type) maskunusablee->hide(); decaye->hide(); expmaskexp->hide(); + norm->hide(); + fatlevel->hide(); + fatanchor->hide(); break; @@ -3496,6 +3557,9 @@ void LocallabExposure::updateGUIToMode(const modeType new_type) maskusablee->hide(); maskunusablee->show(); } + norm->show(); + fatlevel->hide(); + fatanchor->show(); // Specific Simple mode widgets are shown in Normal mode if (!inversex->get_active()) { // Keep widget hidden when invers is toggled @@ -3516,6 +3580,9 @@ void LocallabExposure::updateGUIToMode(const modeType new_type) } blurexpde->show(); + norm->show(); + fatlevel->show(); + fatanchor->show(); if (!inversex->get_active()) { // Keep widget hidden when invers is toggled expgradexp->show(); @@ -3580,6 +3647,23 @@ void LocallabExposure::exnoiseMethodChanged() } } +void LocallabExposure::normChanged() +{ + + if (isLocActivated && exp->getEnabled()) { + if (listener) { + if (norm->get_active()) { + listener->panelChanged(Evlocallabnorm, + M("GENERAL_ENABLED") + " (" + escapeHtmlChars(spotName) + ")"); + } else { + listener->panelChanged(Evlocallabnorm, + M("GENERAL_DISABLED") + " (" + escapeHtmlChars(spotName) + ")"); + } + } + } +} + + void LocallabExposure::inversexChanged() { const bool maskPreviewActivated = isMaskViewActive(); @@ -3719,6 +3803,7 @@ void LocallabExposure::updateExposureGUI3() expMethod->hide(); expcomp->setLabel(M("TP_LOCALLAB_EXPCOMPINV")); exprecove->hide(); + reparexp->hide(); // Manage specific case where expMethod is different from 0 if (expMethod->get_active_row_number() > 0) { @@ -3747,6 +3832,7 @@ void LocallabExposure::updateExposureGUI3() expgradexp->show(); exprecove->show(); } + reparexp->show(); showmaskexpMethodinv->hide(); // Reset hidden mask combobox @@ -3763,6 +3849,7 @@ LocallabShadow::LocallabShadow(): // Shadow highlight specific widgets shMethod(Gtk::manage(new MyComboBoxText())), + reparsh(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGREPART"), 1.0, 100.0, 1., 100.0))), multipliersh([]() -> std::array { std::array res = {}; @@ -3788,7 +3875,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))), + 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")))), @@ -3808,10 +3895,11 @@ LocallabShadow::LocallabShadow(): showmaskSHMethod(Gtk::manage(new MyComboBoxText())), showmaskSHMethodinv(Gtk::manage(new MyComboBoxText())), enaSHMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), - maskSHCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), - CCmaskSHshape(static_cast(maskSHCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))), - LLmaskSHshape(static_cast(maskSHCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))), - HHmaskSHshape(static_cast(maskSHCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))), +// maskSHCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), + maskSHCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, "", 1)), + CCmaskSHshape(static_cast(maskSHCurveEditorG->addCurve(CT_Flat, "C", nullptr, false, false))), + LLmaskSHshape(static_cast(maskSHCurveEditorG->addCurve(CT_Flat, "L", nullptr, false, false))), + HHmaskSHshape(static_cast(maskSHCurveEditorG->addCurve(CT_Flat, "LC(h)", nullptr, false, true))), blendmaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), radmaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))), lapmaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))), @@ -3839,6 +3927,7 @@ LocallabShadow::LocallabShadow(): } detailSH->setAdjusterListener(this); + reparsh->setAdjusterListener(this); highlights->setAdjusterListener(this); @@ -3939,6 +4028,7 @@ LocallabShadow::LocallabShadow(): fatanchorSH->setAdjusterListener(this); // Add Shadow highlight specific widgets to GUI + pack_start(*reparsh); pack_start(*shMethod); for (const auto multiplier : multipliersh) { @@ -3951,7 +4041,7 @@ LocallabShadow::LocallabShadow(): pack_start(*shadows); pack_start(*s_tonalwidth); pack_start(*sh_radius); - // pack_start(*sensihs); + // 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); @@ -4035,6 +4125,7 @@ void LocallabShadow::updateAdviceTooltips(const bool showTooltips) } gamSH->set_tooltip_text(M("TP_LOCALLAB_SHTRC_TOOLTIP")); + reparsh->set_tooltip_text(M("TP_LOCALLAB_REPARSH_TOOLTIP")); sloSH->set_tooltip_text(M("TP_LOCALLAB_SHTRC_TOOLTIP")); strSH->set_tooltip_text(M("TP_LOCALLAB_GRADGEN_TOOLTIP")); exprecovs->set_tooltip_markup(M("TP_LOCALLAB_MASKRESH_TOOLTIP")); @@ -4075,6 +4166,7 @@ void LocallabShadow::updateAdviceTooltips(const bool showTooltips) multiplier->set_tooltip_text(""); } gamSH->set_tooltip_text(""); + reparsh->set_tooltip_text(""); sloSH->set_tooltip_text(""); strSH->set_tooltip_text(""); blurSHde->set_tooltip_text(""); @@ -4165,6 +4257,7 @@ void LocallabShadow::read(const rtengine::procparams::ProcParams* pp, const Para decays->setValue((double)spot.decays); detailSH->setValue((double)spot.detailSH); + reparsh->setValue(spot.reparsh); highlights->setValue((double)spot.highlights); h_tonalwidth->setValue((double)spot.h_tonalwidth); shadows->setValue(spot.shadows); @@ -4229,6 +4322,7 @@ void LocallabShadow::write(rtengine::procparams::ProcParams* pp, ParamsEdited* p } spot.detailSH = detailSH->getIntValue(); + spot.reparsh = reparsh->getValue(); spot.highlights = highlights->getIntValue(); spot.h_tonalwidth = h_tonalwidth->getIntValue(); spot.shadows = shadows->getIntValue(); @@ -4276,6 +4370,7 @@ void LocallabShadow::setDefaults(const rtengine::procparams::ProcParams* defPara } detailSH->setDefault((double)defSpot.detailSH); + reparsh->setDefault(defSpot.reparsh); highlights->setDefault((double)defSpot.highlights); h_tonalwidth->setDefault((double)defSpot.h_tonalwidth); shadows->setDefault((double)defSpot.shadows); @@ -4326,6 +4421,13 @@ void LocallabShadow::adjusterChanged(Adjuster* a, double newval) } } + if (a == reparsh) { + if (listener) { + listener->panelChanged(Evlocallabreparsh, + reparsh->getTextValue() + " (" + escapeHtmlChars(spotName) + ")"); + } + } + if (a == highlights) { if (listener) { listener->panelChanged(Evlocallabhighlights, @@ -4802,11 +4904,13 @@ void LocallabShadow::updateShadowGUI1() showmaskSHMethodConn.block(false); showmaskSHMethodinv->show(); exprecovs->hide(); + reparsh->hide(); } else { if (mode == Expert || mode == Normal) { // Keep widget hidden in Simple mode expgradsh->show(); exprecovs->show(); } + reparsh->show(); showmaskSHMethod->show(); showmaskSHMethodinv->hide(); @@ -4864,7 +4968,7 @@ LocallabVibrance::LocallabVibrance(): 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))), + 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")))), @@ -4882,10 +4986,11 @@ LocallabVibrance::LocallabVibrance(): expmaskvib(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWVI")))), showmaskvibMethod(Gtk::manage(new MyComboBoxText())), enavibMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), - maskvibCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), - CCmaskvibshape(static_cast(maskvibCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))), - LLmaskvibshape(static_cast(maskvibCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))), - HHmaskvibshape(static_cast(maskvibCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))), + // maskvibCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), + maskvibCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, "", 1)), + CCmaskvibshape(static_cast(maskvibCurveEditorG->addCurve(CT_Flat, "C", nullptr, false, false))), + LLmaskvibshape(static_cast(maskvibCurveEditorG->addCurve(CT_Flat, "L", nullptr, false, false))), + HHmaskvibshape(static_cast(maskvibCurveEditorG->addCurve(CT_Flat, "LC(h)", nullptr, false, true))), blendmaskvib(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), radmaskvib(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))), lapmaskvib(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))), @@ -5015,7 +5120,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); + // 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); @@ -6227,8 +6332,8 @@ LocallabBlur::LocallabBlur(): epsbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_EPSBL"), -10, 10, 1, 0))), expdenoise2(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI2_EXP")))), recothres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKRECOTHRES"), 1., 2., 0.01, 1.))), - lowthres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRLOW"), 1., 80., 0.5, 12.))), - higthres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHR"), 20., 99., 0.5, 85.))), + lowthres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRLOW2"), 1., 80., 0.5, 12.))), + higthres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHR2"), 20., 99., 0.5, 85.))), sensibn(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 40))), blurMethod(Gtk::manage(new MyComboBoxText())), invbl(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVBL")))), @@ -6247,12 +6352,12 @@ LocallabBlur::LocallabBlur(): maskunusable3(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUNUSABLE")))), usemask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_USEMASK")))), lnoiselow(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLNOISELOW"), 0.7, 2., 0.01, 1.))), - levelthr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHR"), 20., 99., 0.5, 85.))), - levelthrlow(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRLOW"), 1., 80., 0.5, 12.))), + levelthr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHR2"), 20., 99., 0.5, 85.))), + levelthrlow(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRLOW2"), 1., 80., 0.5, 12.))), 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.))), + 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"))))), LocalcurveEditorwavhue(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_WAVELET_DENOISEHUE"))), @@ -6265,10 +6370,10 @@ LocallabBlur::LocallabBlur(): 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"))))), 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_MASKLCTHRLOW"), 1., 80., 0.5, 12.))), + lowthresd(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRLOW2"), 1., 80., 0.5, 12.))), midthresd(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRMID"), 0., 100., 0.5, 0.))), midthresdch(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRMIDCH"), 0., 100., 0.5, 0.))), - higthresd(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHR"), 20., 99., 0.5, 85.))), + higthresd(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHR2"), 20., 99., 0.5, 85.))), decayd(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKDDECAY"), 0.5, 4., 0.1, 2.))), invmaskd(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVMASK")))), invmask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVMASK")))), @@ -6280,18 +6385,21 @@ LocallabBlur::LocallabBlur(): nlgam(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NLGAM"), 2., 5., 0.1, 3.))), bilateral(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BILATERAL"), 0, 100, 1, 0))), sensiden(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 60))), + reparden(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGREPART"), 1.0, 100.0, 1., 100.0))), neutral(Gtk::manage (new Gtk::Button (M ("TP_RETINEX_NEUTRAL")))), expmaskbl(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWPLUS")))), showmaskblMethod(Gtk::manage(new MyComboBoxText())), showmaskblMethodtyp(Gtk::manage(new MyComboBoxText())), enablMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), - maskblCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), - CCmaskblshape(static_cast(maskblCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))), - LLmaskblshape(static_cast(maskblCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))), - HHmaskblshape(static_cast(maskblCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))), +// maskblCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), + maskblCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, "", 1)), + CCmaskblshape(static_cast(maskblCurveEditorG->addCurve(CT_Flat, "C", nullptr, false, false))), + LLmaskblshape(static_cast(maskblCurveEditorG->addCurve(CT_Flat, "L", nullptr, false, false))), + HHmaskblshape(static_cast(maskblCurveEditorG->addCurve(CT_Flat, "LC(h)", nullptr, false, true))), strumaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUMASKCOL"), 0., 200., 0.1, 0.))), toolbl(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_TOOLCOL")))), toolblFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_TOOLMASK")))), + toolblFrame2(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_TOOLMASK_2")))), blendmaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), radmaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))), lapmaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))), @@ -6463,6 +6571,7 @@ LocallabBlur::LocallabBlur(): nlgam->setAdjusterListener(this); sensiden->setAdjusterListener(this); + reparden->setAdjusterListener(this); setExpandAlignProperties (neutral, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); @@ -6593,7 +6702,7 @@ LocallabBlur::LocallabBlur(): // wavBox->pack_start(*noiselumf0); // wavBox->pack_start(*noiselumf); // wavBox->pack_start(*noiselumf2); - // wavBox->pack_start(*noiselumc); + // wavBox->pack_start(*noiselumc);//unused here, but used for normalize_mean_dt wavBox->pack_start(*noiselumdetail); wavBox->pack_start(*noiselequal); wavBox->pack_start(*LocalcurveEditorwavhue, Gtk::PACK_SHRINK, 4); @@ -6611,7 +6720,8 @@ LocallabBlur::LocallabBlur(): detailFrame->add(*detailBox); wavBox->pack_start(*detailFrame); denoisebox->pack_start(*sensiden); - + denoisebox->pack_start(*reparden); + ToolParamBlock* const nlbox = Gtk::manage(new ToolParamBlock()); nlbox->pack_start(*nlstr); nlbox->pack_start(*nldet); @@ -6656,6 +6766,7 @@ LocallabBlur::LocallabBlur(): maskblBox->pack_start(*separatorstrubl, Gtk::PACK_SHRINK, 2); maskblBox->pack_start(*blendmaskbl, Gtk::PACK_SHRINK, 0); toolblFrame->set_label_align(0.025, 0.5); + toolblFrame2->set_label_align(0.025, 0.5); ToolParamBlock* const toolblBox = Gtk::manage(new ToolParamBlock()); toolblBox->pack_start(*radmaskbl, Gtk::PACK_SHRINK, 0); toolblBox->pack_start(*lapmaskbl, Gtk::PACK_SHRINK, 0); @@ -6665,8 +6776,11 @@ LocallabBlur::LocallabBlur(): toolblBox->pack_start(*shadmaskblsha, Gtk::PACK_SHRINK, 0); toolblBox->pack_start(*shadmaskbl, Gtk::PACK_SHRINK, 0); toolblBox->pack_start(*mask2blCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor - toolblBox->pack_start(*mask2blCurveEditorGwav, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor - toolblBox->pack_start(*csThresholdblur, Gtk::PACK_SHRINK, 0); + ToolParamBlock* const toolblBox2 = Gtk::manage(new ToolParamBlock()); + toolblBox2->pack_start(*mask2blCurveEditorGwav, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor + toolblBox2->pack_start(*csThresholdblur, Gtk::PACK_SHRINK, 0); + toolblFrame2->add(*toolblBox2); + toolblBox->pack_start(*toolblFrame2); toolblFrame->add(*toolblBox); maskblBox->pack_start(*toolblFrame); expmaskbl->add(*maskblBox, false); @@ -6707,6 +6821,7 @@ void LocallabBlur::updateAdviceTooltips(const bool showTooltips) strength->set_tooltip_text(M("TP_LOCALLAB_NOISE_TOOLTIP")); grainFrame->set_tooltip_text(M("TP_LOCALLAB_GRAIN_TOOLTIP")); sensibn->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP")); + reparden->set_tooltip_text(M("TP_LOCALLAB_REPARDEN_TOOLTIP")); medMethod->set_tooltip_text(M("TP_LOCALLAB_MEDIAN_TOOLTIP")); itera->set_tooltip_text(M("TP_LOCALLAB_MEDIANITER_TOOLTIP")); fftwbl->set_tooltip_text(M("TP_LOCALLAB_FFTMASK_TOOLTIP")); @@ -6775,6 +6890,7 @@ void LocallabBlur::updateAdviceTooltips(const bool showTooltips) strength->set_tooltip_text(""); grainFrame->set_tooltip_text(""); sensibn->set_tooltip_text(""); + reparden->set_tooltip_text(""); medMethod->set_tooltip_text(""); itera->set_tooltip_text(""); fftwbl->set_tooltip_text(""); @@ -6804,7 +6920,6 @@ void LocallabBlur::updateAdviceTooltips(const bool showTooltips) nlpat->set_tooltip_text(""); nlrad->set_tooltip_text(""); nlgam->set_tooltip_text(""); - sensibn->set_tooltip_text(""); blurMethod->set_tooltip_markup(""); expdenoise->set_tooltip_markup(""); wavshapeden->setTooltip(""); @@ -6989,6 +7104,7 @@ void LocallabBlur::read(const rtengine::procparams::ProcParams* pp, const Params higthres->setValue((double)spot.higthres); epsbl->setValue((double)spot.epsbl); sensibn->setValue((double)spot.sensibn); + reparden->setValue(spot.reparden); recothresd->setValue((double)spot.recothresd); lowthresd->setValue((double)spot.lowthresd); midthresd->setValue((double)spot.midthresd); @@ -7135,6 +7251,7 @@ void LocallabBlur::write(rtengine::procparams::ProcParams* pp, ParamsEdited* ped spot.higthres = higthres->getValue(); spot.epsbl = epsbl->getIntValue(); spot.sensibn = sensibn->getIntValue(); + spot.reparden = reparden->getValue(); spot.recothresd = recothresd->getValue(); spot.lowthresd = lowthresd->getValue(); spot.midthresd = midthresd->getValue(); @@ -7244,6 +7361,7 @@ void LocallabBlur::setDefaults(const rtengine::procparams::ProcParams* defParams higthres->setDefault((double)defSpot.higthres); epsbl->setDefault((double)defSpot.epsbl); sensibn->setDefault((double)defSpot.sensibn); + reparden->setDefault(defSpot.reparden); recothresd->setDefault((double)defSpot.recothresd); lowthresd->setDefault((double)defSpot.lowthresd); midthresd->setDefault((double)defSpot.midthresd); @@ -7593,6 +7711,13 @@ void LocallabBlur::adjusterChanged(Adjuster* a, double newval) } } + if (a == reparden) { + if (listener) { + listener->panelChanged(Evlocallabreparden, + reparden->getTextValue() + " (" + escapeHtmlChars(spotName) + ")"); + } + } + if (a == strumaskbl) { if (listener) { listener->panelChanged(Evlocallabstrumaskbl, @@ -7858,6 +7983,7 @@ void LocallabBlur::updateGUIToMode(const modeType new_type) shadmaskblsha->hide(); mask2blCurveEditorGwav->hide(); csThresholdblur->hide(); + toolblFrame2->hide(); // Specific Simple mode widgets are shown in Normal mode expmaskbl->show(); expdenoise1->hide(); @@ -7945,6 +8071,7 @@ void LocallabBlur::updateGUIToMode(const modeType new_type) shadmaskblsha->show(); mask2blCurveEditorGwav->show(); csThresholdblur->show(); + toolblFrame2->show(); nlpat->show(); nlrad->show(); nlgam->show(); diff --git a/rtgui/locallabtools.h b/rtgui/locallabtools.h index 1e3a1c6fa..2acafa826 100644 --- a/rtgui/locallabtools.h +++ b/rtgui/locallabtools.h @@ -177,6 +177,7 @@ class LocallabColor: private: // Color & Light specific widgets Gtk::Frame* const lumFrame; + Adjuster* const reparcol; Adjuster* const lightness; Adjuster* const contrast; Adjuster* const chroma; @@ -249,6 +250,7 @@ private: Adjuster* const blurcol; Adjuster* const blendmaskcol; Gtk::Frame* const toolcolFrame; + Gtk::Frame* const toolcolFrame2; Adjuster* const radmaskcol; Adjuster* const lapmaskcol; Adjuster* const chromaskcol; @@ -330,6 +332,7 @@ private: // Gtk::Frame* const pdeFrame; MyExpander* const exppde; Adjuster* const laplacexp; + Adjuster* const reparexp; Adjuster* const linear; Adjuster* const balanexp; Adjuster* const gamm; @@ -339,6 +342,7 @@ private: MyExpander* const expfat; Adjuster* const fatamount; Adjuster* const fatdetail; + Gtk::CheckButton* const norm; Adjuster* const fatlevel; Adjuster* const fatanchor; Adjuster* const sensiex; @@ -388,7 +392,7 @@ private: CurveEditorGroup* const mask2expCurveEditorG; DiagonalCurveEditor* const Lmaskexpshape; - sigc::connection expMethodConn, exnoiseMethodConn, inversexConn, showmaskexpMethodConn, showmaskexpMethodConninv, enaExpMaskConn, enaExpMaskaftConn; + sigc::connection expMethodConn, exnoiseMethodConn, inversexConn, normConn, showmaskexpMethodConn, showmaskexpMethodConninv, enaExpMaskConn, enaExpMaskaftConn; public: LocallabExposure(); @@ -420,6 +424,7 @@ private: void expMethodChanged(); void exnoiseMethodChanged(); void inversexChanged(); + void normChanged(); void showmaskexpMethodChanged(); void showmaskexpMethodChangedinv(); void enaExpMaskChanged(); @@ -439,6 +444,7 @@ class LocallabShadow: private: // Shadow highlight specific widgets MyComboBoxText* const shMethod; + Adjuster* const reparsh; const std::array multipliersh; Adjuster* const detailSH; Adjuster* const highlights; @@ -742,6 +748,7 @@ private: Adjuster* const nlgam; Adjuster* const bilateral; Adjuster* const sensiden; + Adjuster* const reparden; Gtk::Button* neutral; MyExpander* const expmaskbl; MyComboBoxText* const showmaskblMethod; @@ -754,6 +761,7 @@ private: Adjuster* const strumaskbl; Gtk::CheckButton* const toolbl; Gtk::Frame* const toolblFrame; + Gtk::Frame* const toolblFrame2; Adjuster* const blendmaskbl; Adjuster* const radmaskbl; Adjuster* const lapmaskbl; @@ -831,6 +839,7 @@ class LocallabTone: { private: // Tone Mapping specific widgets + Adjuster* const repartm; Adjuster* const amount; Adjuster* const stren; Gtk::CheckButton* const equiltm; @@ -1079,6 +1088,7 @@ private: Adjuster* const residhi; Adjuster* const residhithr; Adjuster* const sensilc; + Adjuster* const reparw; Gtk::Frame* const clariFrame; Adjuster* const clarilres; Adjuster* const claricres; @@ -1317,8 +1327,10 @@ private: Adjuster* const lightq; Adjuster* const contl; Adjuster* const contq; + Adjuster* const contthres; Adjuster* const colorfl; Adjuster* const saturl; + Adjuster* const chroml; MyExpander* const expL; CurveEditorGroup* const CurveEditorL; DiagonalCurveEditor* const LshapeL; diff --git a/rtgui/locallabtools2.cc b/rtgui/locallabtools2.cc index 228b7da0a..0518cc4b6 100644 --- a/rtgui/locallabtools2.cc +++ b/rtgui/locallabtools2.cc @@ -118,6 +118,7 @@ LocallabTone::LocallabTone(): LocallabTool(this, M("TP_LOCALLAB_TONE_TOOLNAME"), M("TP_LOCALLAB_TM"), true), // Tone mapping specific widgets + repartm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGREPART"), 1.0, 100.0, 1., 100.0))), amount(Gtk::manage(new Adjuster(M("TP_LOCALLAB_AMOUNT"), 50., 100.0, 0.5, 95.))), stren(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STREN"), -0.5, 2.0, 0.01, 0.5))), equiltm(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_EQUIL")))), @@ -126,7 +127,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.))), + 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")))), @@ -139,10 +140,11 @@ LocallabTone::LocallabTone(): showmasktmMethod(Gtk::manage(new MyComboBoxText())), enatmMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), enatmMaskaft(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_AFTER_MASK")))), - masktmCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), - CCmasktmshape(static_cast(masktmCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))), - LLmasktmshape(static_cast(masktmCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))), - HHmasktmshape(static_cast(masktmCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))), + // masktmCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), + masktmCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, "", 1)), + CCmasktmshape(static_cast(masktmCurveEditorG->addCurve(CT_Flat, "C", nullptr, false, false))), + LLmasktmshape(static_cast(masktmCurveEditorG->addCurve(CT_Flat, "L", nullptr, false, false))), + HHmasktmshape(static_cast(masktmCurveEditorG->addCurve(CT_Flat, "LC(h)", nullptr, false, true))), blendmasktm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), lapmasktm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))), radmasktm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))), @@ -159,6 +161,8 @@ LocallabTone::LocallabTone(): // Parameter Tone Mapping specific widgets amount->setAdjusterListener(this); + repartm->setAdjusterListener(this); + stren->setAdjusterListener(this); equiltmConn = equiltm->signal_toggled().connect(sigc::mem_fun(*this, &LocallabTone::equiltmChanged)); @@ -234,10 +238,13 @@ LocallabTone::LocallabTone(): Lmasktmshape->setLeftBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}}); mask2tmCurveEditorG->curveListComplete(); + Gtk::Separator* const separatortm = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL)); // Add Tone Mapping specific widgets to GUI // pack_start(*amount); // To use if we change transit_shapedetect parameters pack_start(*sensitm); + pack_start(*repartm); + pack_start(*separatortm); pack_start(*stren); pack_start(*equiltm); pack_start(*gamma); @@ -245,7 +252,7 @@ LocallabTone::LocallabTone(): pack_start(*estop); pack_start(*scaltm); pack_start(*rewei); - // pack_start(*softradiustm); // Always bad with TM ?? + // 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); @@ -303,6 +310,7 @@ void LocallabTone::updateAdviceTooltips(const bool showTooltips) exp->set_tooltip_text(M("TP_LOCALLAB_TONEMAP_TOOLTIP")); exprecovt->set_tooltip_markup(M("TP_LOCALLAB_MASKRESTM_TOOLTIP")); equiltm->set_tooltip_text(M("TP_LOCALLAB_EQUILTM_TOOLTIP")); + repartm->set_tooltip_text(M("TP_LOCALLAB_REPARTM_TOOLTIP")); gamma->set_tooltip_text(M("TP_LOCALLAB_TONEMAPGAM_TOOLTIP")); estop->set_tooltip_text(M("TP_LOCALLAB_TONEMAPESTOP_TOOLTIP")); scaltm->set_tooltip_text(M("TP_LOCALLAB_TONEMASCALE_TOOLTIP")); @@ -328,6 +336,7 @@ void LocallabTone::updateAdviceTooltips(const bool showTooltips) } else { exp->set_tooltip_text(""); equiltm->set_tooltip_text(""); + repartm->set_tooltip_text(""); gamma->set_tooltip_text(""); estop->set_tooltip_text(""); scaltm->set_tooltip_text(""); @@ -400,6 +409,7 @@ void LocallabTone::read(const rtengine::procparams::ProcParams* pp, const Params amount->setValue(spot.amount); stren->setValue(spot.stren); + repartm->setValue(spot.repartm); equiltm->set_active(spot.equiltm); gamma->setValue(spot.gamma); satur->setValue(spot.satur); @@ -448,6 +458,7 @@ void LocallabTone::write(rtengine::procparams::ProcParams* pp, ParamsEdited* ped spot.amount = amount->getValue(); spot.stren = stren->getValue(); + spot.repartm = repartm->getValue(); spot.equiltm = equiltm->get_active(); spot.gamma = gamma->getValue(); spot.satur = satur->getValue(); @@ -491,6 +502,7 @@ void LocallabTone::setDefaults(const rtengine::procparams::ProcParams* defParams satur->setDefault(defSpot.satur); estop->setDefault(defSpot.estop); scaltm->setDefault(defSpot.scaltm); + repartm->setDefault(defSpot.repartm); rewei->setDefault((double)defSpot.rewei); softradiustm->setDefault(defSpot.softradiustm); sensitm->setDefault((double)defSpot.sensitm); @@ -526,6 +538,8 @@ void LocallabTone::adjusterChanged(Adjuster* a, double newval) listener->panelChanged(Evlocallabestop, estop->getTextValue() + spName); } else if (a == scaltm) { listener->panelChanged(Evlocallabscaltm, scaltm->getTextValue() + spName); + } else if (a == repartm) { + listener->panelChanged(Evlocallabrepartm, repartm->getTextValue() + spName); } else if (a == rewei) { listener->panelChanged(Evlocallabrewei, rewei->getTextValue() + spName); } else if (a == softradiustm) { @@ -809,17 +823,18 @@ LocallabRetinex::LocallabRetinex(): maskusabler(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUSABLE")))), maskunusabler(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUNUSABLE")))), recothresr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKRECOTHRES"), 1., 2., 0.01, 1.))), - lowthresr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRLOW"), 1., 80., 0.5, 12.))), - higthresr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHR"), 20., 99., 0.5, 85.))), + lowthresr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRLOW2"), 1., 80., 0.5, 12.))), + higthresr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHR2"), 20., 99., 0.5, 85.))), decayr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKDDECAY"), 0.5, 4., 0.1, 2.))), expmaskreti(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWR")))), showmaskretiMethod(Gtk::manage(new MyComboBoxText())), enaretiMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), enaretiMasktmap(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_TM_MASK")))), - maskretiCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), - CCmaskretishape(static_cast(maskretiCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))), - LLmaskretishape(static_cast(maskretiCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))), - HHmaskretishape(static_cast(maskretiCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))), + // maskretiCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), + maskretiCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, "", 1)), + CCmaskretishape(static_cast(maskretiCurveEditorG->addCurve(CT_Flat, "C", nullptr, false, false))), + LLmaskretishape(static_cast(maskretiCurveEditorG->addCurve(CT_Flat, "L", nullptr, false, false))), + HHmaskretishape(static_cast(maskretiCurveEditorG->addCurve(CT_Flat, "LC(h)", nullptr, false, true))), blendmaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), radmaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 10.))), lapmaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))), @@ -993,7 +1008,7 @@ LocallabRetinex::LocallabRetinex(): retiBox->pack_start(*limd); retiBox->pack_start(*offs); ToolParamBlock* const toolretiBox = Gtk::manage(new ToolParamBlock()); - toolretiBox->pack_start(*chrrt); + // toolretiBox->pack_start(*chrrt); toolretiBox->pack_start(*darkness); toolretiBox->pack_start(*lightnessreti); toolretiBox->pack_start(*cliptm); @@ -1249,7 +1264,8 @@ void LocallabRetinex::read(const rtengine::procparams::ProcParams* pp, const Par scalereti->setValue(spot.scalereti); limd->setValue(spot.limd); offs->setValue(spot.offs); - chrrt->setValue(spot.chrrt); + chrrt->setValue(0.); + // chrrt->setValue(spot.chrrt); darkness->setValue(spot.darkness); lightnessreti->setValue(spot.lightnessreti); cliptm->setValue(spot.cliptm); @@ -2330,6 +2346,7 @@ LocallabContrast::LocallabContrast(): residhi(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RESIDHI"), -100., 100., 1., 0.))), residhithr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RESIDHITHR"), 0., 100., 1., 70.))), sensilc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 60))), + reparw(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGREPART"), 1.0, 100.0, 1., 100.0))), clariFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CLARIFRA")))), clarilres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CLARILRES"), -20., 100., 0.5, 0.))), claricres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CLARICRES"), -20., 100., 0.5, 0.))), @@ -2395,10 +2412,11 @@ LocallabContrast::LocallabContrast(): expmasklc(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWLC")))), showmasklcMethod(Gtk::manage(new MyComboBoxText())), enalcMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), - masklcCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), - CCmasklcshape(static_cast(masklcCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))), - LLmasklcshape(static_cast(masklcCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))), - HHmasklcshape(static_cast(masklcCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))), +// masklcCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), + masklcCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, "", 1)), + CCmasklcshape(static_cast(masklcCurveEditorG->addCurve(CT_Flat, "C", nullptr, false, false))), + LLmasklcshape(static_cast(masklcCurveEditorG->addCurve(CT_Flat, "L", nullptr, false, false))), + HHmasklcshape(static_cast(masklcCurveEditorG->addCurve(CT_Flat, "LC(h)", nullptr, false, true))), blendmasklc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), radmasklc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))), chromasklc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))), @@ -2461,6 +2479,8 @@ LocallabContrast::LocallabContrast(): sensilc->setAdjusterListener(this); + reparw->setAdjusterListener(this); + clariFrame->set_label_align(0.025, 0.5); clarilres->setAdjusterListener(this); @@ -2685,6 +2705,7 @@ LocallabContrast::LocallabContrast(): // Add Local contrast specific widgets to GUI pack_start(*sensilc); + pack_start(*reparw); pack_start(*localcontMethod); pack_start(*lcradius); pack_start(*lcamount); @@ -2941,6 +2962,7 @@ void LocallabContrast::updateAdviceTooltips(const bool showTooltips) masklcCurveEditorG->set_tooltip_markup(M("TP_LOCALLAB_MASKCURVE_TOOLTIP")); chromasklc->set_tooltip_text(M("TP_LOCALLAB_CHROMASK_TOOLTIP")); sensilc->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP")); + reparw->set_tooltip_text(M("TP_LOCALLAB_REPARW_TOOLTIP")); decayw->set_tooltip_text(M("TP_LOCALLAB_MASKDECAY_TOOLTIP")); lowthresw->set_tooltip_text(M("TP_LOCALLAB_MASKLOWTHRESWAV_TOOLTIP")); higthresw->set_tooltip_text(M("TP_LOCALLAB_MASKHIGTHRESWAV_TOOLTIP")); @@ -2973,6 +2995,7 @@ void LocallabContrast::updateAdviceTooltips(const bool showTooltips) masklcCurveEditorG->set_tooltip_markup(""); chromasklc->set_tooltip_text(""); sensilc->set_tooltip_text(""); + reparw->set_tooltip_text(""); wavshape->setTooltip(""); clarilres->set_tooltip_text(""); @@ -3109,6 +3132,7 @@ void LocallabContrast::read(const rtengine::procparams::ProcParams* pp, const Pa residhi->setValue(spot.residhi); residhithr->setValue(spot.residhithr); sensilc->setValue((double)spot.sensilc); + reparw->setValue(spot.reparw); clarilres->setValue(spot.clarilres); claricres->setValue(spot.claricres); clarisoft->setValue(spot.clarisoft); @@ -3230,6 +3254,7 @@ void LocallabContrast::write(rtengine::procparams::ProcParams* pp, ParamsEdited* spot.residhi = residhi->getValue(); spot.residhithr = residhithr->getValue(); spot.sensilc = sensilc->getIntValue(); + spot.reparw = reparw->getValue(); spot.clarilres = clarilres->getValue(); spot.claricres = claricres->getValue(); spot.clarisoft = clarisoft->getValue(); @@ -3330,6 +3355,7 @@ void LocallabContrast::setDefaults(const rtengine::procparams::ProcParams* defPa residhi->setDefault(defSpot.residhi); residhithr->setDefault(defSpot.residhithr); sensilc->setDefault((double)defSpot.sensilc); + reparw->setDefault(defSpot.reparw); clarilres->setDefault(defSpot.clarilres); claricres->setDefault(defSpot.claricres); clarisoft->setDefault(defSpot.clarisoft); @@ -3464,6 +3490,13 @@ void LocallabContrast::adjusterChanged(Adjuster* a, double newval) } } + if (a == reparw) { + if (listener) { + listener->panelChanged(Evlocallabreparw, + reparw->getTextValue() + " (" + escapeHtmlChars(spotName) + ")"); + } + } + if (a == clarilres) { if (listener) { listener->panelChanged(Evlocallabclarilres, @@ -4342,10 +4375,11 @@ LocallabCBDL::LocallabCBDL(): expmaskcb(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWCB")))), showmaskcbMethod(Gtk::manage(new MyComboBoxText())), enacbMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), - maskcbCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), - CCmaskcbshape(static_cast(maskcbCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))), - LLmaskcbshape(static_cast(maskcbCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))), - HHmaskcbshape(static_cast(maskcbCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))), + // maskcbCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), + maskcbCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, "", 1)), + CCmaskcbshape(static_cast(maskcbCurveEditorG->addCurve(CT_Flat, "C", nullptr, false, false))), + LLmaskcbshape(static_cast(maskcbCurveEditorG->addCurve(CT_Flat, "L", nullptr, false, false))), + HHmaskcbshape(static_cast(maskcbCurveEditorG->addCurve(CT_Flat, "LC(h)", nullptr, false, true))), blendmaskcb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), radmaskcb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))), lapmaskcb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))), @@ -4445,7 +4479,7 @@ LocallabCBDL::LocallabCBDL(): // Add CBDL specific widgets to GUI ToolParamBlock* const levBox = Gtk::manage(new ToolParamBlock()); Gtk::Box* buttonBox = Gtk::manage(new Gtk::Box()); - buttonBox->set_spacing(10); + buttonBox->set_spacing(2); buttonBox->set_homogeneous(true); buttonBox->pack_start(*lumacontrastMinusButton); buttonBox->pack_start(*lumaneutralButton); @@ -5125,8 +5159,10 @@ LocallabLog::LocallabLog(): 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.))), contq(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGCONQL"), -100., 100., 0.5, 0.))), + contthres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGCONTHRES"), -1., 1., 0.01, 0.))), colorfl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGCOLORFL"), -100., 100., 0.5, 0.))), saturl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SATURV"), -100., 100., 0.5, 0.))), + chroml(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROML"), -100., 100., 0.5, 0.))), expL(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_LOGEXP")))), CurveEditorL(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_LOGCONTQ"))), LshapeL(static_cast(CurveEditorL->addCurve(CT_Diagonal, "Q(Q)"))), @@ -5149,10 +5185,11 @@ LocallabLog::LocallabLog(): expmaskL(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWC")))), showmaskLMethod(Gtk::manage(new MyComboBoxText())), enaLMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), - maskCurveEditorL(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASKCOL"))), - CCmaskshapeL(static_cast(maskCurveEditorL->addCurve(CT_Flat, "C(C)", nullptr, false, false))), - LLmaskshapeL(static_cast(maskCurveEditorL->addCurve(CT_Flat, "L(L)", nullptr, false, false))), - HHmaskshapeL(static_cast(maskCurveEditorL->addCurve(CT_Flat, "LC(H)", nullptr, false, true))), + // maskCurveEditorL(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASKCOL"))), + maskCurveEditorL(new CurveEditorGroup(options.lastlocalCurvesDir, "", 1)), + CCmaskshapeL(static_cast(maskCurveEditorL->addCurve(CT_Flat, "C", nullptr, false, false))), + LLmaskshapeL(static_cast(maskCurveEditorL->addCurve(CT_Flat, "L", nullptr, false, false))), + HHmaskshapeL(static_cast(maskCurveEditorL->addCurve(CT_Flat, "LC(h)", nullptr, false, true))), blendmaskL(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), radmaskL(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))), chromaskL(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))), @@ -5195,10 +5232,13 @@ LocallabLog::LocallabLog(): saturl->setAdjusterListener(this); + chroml->setAdjusterListener(this); + lightl->setAdjusterListener(this); lightq->setAdjusterListener(this); contl->setAdjusterListener(this); + contthres->setAdjusterListener(this); contq->setAdjusterListener(this); colorfl->setAdjusterListener(this); @@ -5235,7 +5275,7 @@ LocallabLog::LocallabLog(): surHBox->pack_start (*surLabel, Gtk::PACK_SHRINK); sursour->append (M ("TP_COLORAPP_SURROUND_AVER")); sursour->append (M ("TP_COLORAPP_SURROUND_DIM")); -// sursour->append (M ("TP_COLORAPP_SURROUND_DARK")); + sursour->append (M ("TP_COLORAPP_SURROUND_DARK")); sursour->set_active (0); surHBox->pack_start (*sursour); sursourconn = sursour->signal_changed().connect ( sigc::mem_fun (*this, &LocallabLog::sursourChanged) ); @@ -5323,11 +5363,15 @@ LocallabLog::LocallabLog(): ToolParamBlock* const logP1Box = Gtk::manage(new ToolParamBlock()); logP1Box->pack_start(*detail); logP1Box->pack_start(*contl); + logP1Box->pack_start(*contthres); logP1Box->pack_start(*saturl); + Gtk::Separator* const separatorchro = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL)); ToolParamBlock* const logP11Box = Gtk::manage(new ToolParamBlock()); logP11Box->pack_start(*lightl); logP11Box->pack_start(*lightq); logP11Box->pack_start(*contq); + logP11Box->pack_start(*separatorchro); + logP11Box->pack_start(*chroml); logP11Box->pack_start(*colorfl); expL->add(*logP11Box, false); logP1Box->pack_start(*expL, false, false); @@ -5420,10 +5464,12 @@ void LocallabLog::updateAdviceTooltips(const bool showTooltips) anglog->set_tooltip_text(M("TP_LOCALLAB_GRADANG_TOOLTIP")); contl->set_tooltip_text(M("TP_LOCALLAB_LOGCONTL_TOOLTIP")); 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")); 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")); catad->set_tooltip_text(M("TP_LOCALLAB_LOGCATAD_TOOLTIP")); sensilog->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP")); @@ -5470,8 +5516,10 @@ void LocallabLog::updateAdviceTooltips(const bool showTooltips) lightl->set_tooltip_text(""); lightq->set_tooltip_text(""); contq->set_tooltip_text(""); + contthres->set_tooltip_text(""); colorfl->set_tooltip_text(""); saturl->set_tooltip_text(""); + chroml->set_tooltip_text(""); catad->set_tooltip_text(""); expmaskL->set_tooltip_markup(""); CCmaskshapeL->setTooltip(""); @@ -5567,6 +5615,8 @@ void LocallabLog::read(const rtengine::procparams::ProcParams* pp, const ParamsE sursour->set_active (0); } else if (spot.sursour == "Dim") { sursour->set_active (1); + } else if (spot.sursour == "Dark") { + sursour->set_active (2); } @@ -5591,9 +5641,11 @@ void LocallabLog::read(const rtengine::procparams::ProcParams* pp, const ParamsE sourceabs->setValue(spot.sourceabs); catad->setValue(spot.catad); saturl->setValue(spot.saturl); + chroml->setValue(spot.chroml); lightl->setValue(spot.lightl); lightq->setValue(spot.lightq); contl->setValue(spot.contl); + contthres->setValue(spot.contthres); contq->setValue(spot.contq); colorfl->setValue(spot.colorfl); LshapeL->setCurve(spot.LcurveL); @@ -5653,9 +5705,11 @@ void LocallabLog::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedi spot.targetGray = targetGray->getValue(); spot.catad = catad->getValue(); spot.saturl = saturl->getValue(); + spot.chroml = chroml->getValue(); spot.lightl = lightl->getValue(); spot.lightq = lightq->getValue(); spot.contl = contl->getValue(); + spot.contthres = contthres->getValue(); spot.contq = contq->getValue(); spot.colorfl = colorfl->getValue(); spot.LcurveL = LshapeL->getCurve(); @@ -5682,6 +5736,8 @@ void LocallabLog::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedi spot.sursour = "Average"; } else if (sursour->get_active_row_number() == 1) { spot.sursour = "Dim"; + } else if (sursour->get_active_row_number() == 2) { + spot.sursour = "Dark"; } if (surround->get_active_row_number() == 0) { @@ -5736,7 +5792,9 @@ void LocallabLog::updateGUIToMode(const modeType new_type) sourceabs->hide(); targabs->hide(); saturl->hide(); + chroml->hide(); contl->hide(); + contthres->hide(); lightl->hide(); lightq->hide(); contq->hide(); @@ -5762,9 +5820,11 @@ void LocallabLog::updateGUIToMode(const modeType new_type) targabs->show(); catad->show(); saturl->show(); + chroml->show(); lightl->show(); lightq->show(); contl->show(); + contthres->show(); contq->show(); colorfl->show(); surrHBox->show(); @@ -5794,9 +5854,11 @@ void LocallabLog::updateGUIToMode(const modeType new_type) targabs->show(); catad->show(); saturl->show(); + chroml->show(); lightl->show(); lightq->show(); contl->show(); + contthres->show(); contq->show(); colorfl->show(); surrHBox->show(); @@ -5829,6 +5891,7 @@ void LocallabLog::convertParamToSimple() disableListener(); ciecam->set_active(false); contq->setValue(defSpot.contq); + contthres->setValue(defSpot.contthres); colorfl->setValue(defSpot.colorfl); lightl->setValue(defSpot.lightl); lightq->setValue(defSpot.lightq); @@ -5938,9 +6001,11 @@ void LocallabLog::setDefaults(const rtengine::procparams::ProcParams* defParams, targetGray->setDefault(defSpot.targetGray); catad->setDefault(defSpot.catad); saturl->setDefault(defSpot.saturl); + chroml->setDefault(defSpot.chroml); lightl->setDefault(defSpot.lightl); lightq->setDefault(defSpot.lightq); contl->setDefault(defSpot.contl); + contthres->setDefault(defSpot.contthres); contq->setDefault(defSpot.contq); colorfl->setDefault(defSpot.colorfl); detail->setDefault(defSpot.detail); @@ -6028,6 +6093,13 @@ void LocallabLog::adjusterChanged(Adjuster* a, double newval) } } + if (a == chroml) { + if (listener) { + listener->panelChanged(Evlocallabchroml, + chroml->getTextValue() + " (" + escapeHtmlChars(spotName) + ")"); + } + } + if (a == lightl) { if (listener) { listener->panelChanged(Evlocallablightl, @@ -6050,6 +6122,13 @@ void LocallabLog::adjusterChanged(Adjuster* a, double newval) } } + if (a == contthres) { + if (listener) { + listener->panelChanged(Evlocallabcontthres, + contthres->getTextValue() + " (" + escapeHtmlChars(spotName) + ")"); + } + } + if (a == contq) { if (listener) { listener->panelChanged(Evlocallabcontq, @@ -6388,10 +6467,11 @@ LocallabMask::LocallabMask(): softradiusmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), 0.0, 100.0, 0.5, 1.))), showmask_Method(Gtk::manage(new MyComboBoxText())), enamask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), - mask_CurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASKCOL"))), - CCmask_shape(static_cast(mask_CurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))), - LLmask_shape(static_cast(mask_CurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))), - HHmask_shape(static_cast(mask_CurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))), +// mask_CurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASKCOL"))), + mask_CurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, "", 1)), + CCmask_shape(static_cast(mask_CurveEditorG->addCurve(CT_Flat, "C", nullptr, false, false))), + LLmask_shape(static_cast(mask_CurveEditorG->addCurve(CT_Flat, "L", nullptr, false, false))), + HHmask_shape(static_cast(mask_CurveEditorG->addCurve(CT_Flat, "LC(h)", nullptr, false, true))), struFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LABSTRUM")))), strumaskmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUMASKCOL"), 0., 200., 0.1, 0.))), toolmask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_TOOLCOL")))), @@ -6407,7 +6487,7 @@ LocallabMask::LocallabMask(): slopmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOMASKCOL"), 0.0, 15.0, 0.1, 0.))), shadmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHAMASKCOL"), 0, 100, 1, 0))), mask_HCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASKH"))), - HHhmask_shape(static_cast(mask_HCurveEditorG->addCurve(CT_Flat, "H(H)", nullptr, false, true))), + HHhmask_shape(static_cast(mask_HCurveEditorG->addCurve(CT_Flat, "h(h)", nullptr, false, true))), mask2CurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))), Lmask_shape(static_cast(mask2CurveEditorG->addCurve(CT_Diagonal, "L(L)"))), mask2CurveEditorGwav(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVMASK"))), diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 8aeb45a13..395a14ead 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -708,7 +708,7 @@ void ParamsEdited::initFrom(const std::vector& // Resize LocallabSpotEdited according to src[0] locallab.spots.clear(); - locallab.spots.resize(p.locallab.spots.size(), new LocallabParamsEdited::LocallabSpotEdited(true)); + locallab.spots.resize(p.locallab.spots.size(), LocallabParamsEdited::LocallabSpotEdited(true)); // Variable used to determined if Locallab spots number is equal and so spots can be combined bool isSpotNumberEqual = true; @@ -1182,6 +1182,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).strexp = locallab.spots.at(j).strexp && pSpot.strexp == otherSpot.strexp; locallab.spots.at(j).angexp = locallab.spots.at(j).angexp && pSpot.angexp == otherSpot.angexp; locallab.spots.at(j).excurve = locallab.spots.at(j).excurve && pSpot.excurve == otherSpot.excurve; + locallab.spots.at(j).norm = locallab.spots.at(j).norm && pSpot.norm == otherSpot.norm; locallab.spots.at(j).inversex = locallab.spots.at(j).inversex && pSpot.inversex == otherSpot.inversex; locallab.spots.at(j).enaExpMask = locallab.spots.at(j).enaExpMask && pSpot.enaExpMask == otherSpot.enaExpMask; locallab.spots.at(j).enaExpMaskaft = locallab.spots.at(j).enaExpMaskaft && pSpot.enaExpMaskaft == otherSpot.enaExpMaskaft; @@ -1201,6 +1202,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).expMethod = locallab.spots.at(j).expMethod && pSpot.expMethod == otherSpot.expMethod; locallab.spots.at(j).exnoiseMethod = locallab.spots.at(j).exnoiseMethod && pSpot.exnoiseMethod == otherSpot.exnoiseMethod; locallab.spots.at(j).laplacexp = locallab.spots.at(j).laplacexp && pSpot.laplacexp == otherSpot.laplacexp; + locallab.spots.at(j).reparexp = locallab.spots.at(j).reparexp && pSpot.reparexp == otherSpot.reparexp; locallab.spots.at(j).balanexp = locallab.spots.at(j).balanexp && pSpot.balanexp == otherSpot.balanexp; locallab.spots.at(j).linear = locallab.spots.at(j).linear && pSpot.linear == otherSpot.linear; locallab.spots.at(j).gamm = locallab.spots.at(j).gamm && pSpot.gamm == otherSpot.gamm; @@ -1243,6 +1245,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).slomaskSH = locallab.spots.at(j).slomaskSH && pSpot.slomaskSH == otherSpot.slomaskSH; locallab.spots.at(j).lapmaskSH = locallab.spots.at(j).lapmaskSH && pSpot.lapmaskSH == otherSpot.lapmaskSH; locallab.spots.at(j).detailSH = locallab.spots.at(j).detailSH && pSpot.detailSH == otherSpot.detailSH; + locallab.spots.at(j).reparsh = locallab.spots.at(j).reparsh && pSpot.reparsh == otherSpot.reparsh; locallab.spots.at(j).LmaskSHcurve = locallab.spots.at(j).LmaskSHcurve && pSpot.LmaskSHcurve == otherSpot.LmaskSHcurve; locallab.spots.at(j).fatamountSH = locallab.spots.at(j).fatamountSH && pSpot.fatamountSH == otherSpot.fatamountSH; locallab.spots.at(j).fatanchorSH = locallab.spots.at(j).fatanchorSH && pSpot.fatanchorSH == otherSpot.fatanchorSH; @@ -1345,6 +1348,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).nlrad = locallab.spots.at(j).nlrad && pSpot.nlrad == otherSpot.nlrad; locallab.spots.at(j).nlgam = locallab.spots.at(j).nlgam && pSpot.nlgam == otherSpot.nlgam; locallab.spots.at(j).sensiden = locallab.spots.at(j).sensiden && pSpot.sensiden == otherSpot.sensiden; + locallab.spots.at(j).reparden = locallab.spots.at(j).reparden && pSpot.reparden == otherSpot.reparden; locallab.spots.at(j).detailthr = locallab.spots.at(j).detailthr && pSpot.detailthr == otherSpot.detailthr; locallab.spots.at(j).locwavcurveden = locallab.spots.at(j).locwavcurveden && pSpot.locwavcurveden == otherSpot.locwavcurveden; locallab.spots.at(j).locwavcurvehue = locallab.spots.at(j).locwavcurvehue && pSpot.locwavcurvehue == otherSpot.locwavcurvehue; @@ -1376,6 +1380,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).gamma = locallab.spots.at(j).gamma && pSpot.gamma == otherSpot.gamma; locallab.spots.at(j).estop = locallab.spots.at(j).estop && pSpot.estop == otherSpot.estop; locallab.spots.at(j).scaltm = locallab.spots.at(j).scaltm && pSpot.scaltm == otherSpot.scaltm; + locallab.spots.at(j).repartm = locallab.spots.at(j).repartm && pSpot.repartm == otherSpot.repartm; locallab.spots.at(j).rewei = locallab.spots.at(j).rewei && pSpot.rewei == otherSpot.rewei; locallab.spots.at(j).satur = locallab.spots.at(j).satur && pSpot.satur == otherSpot.satur; locallab.spots.at(j).sensitm = locallab.spots.at(j).sensitm && pSpot.sensitm == otherSpot.sensitm; @@ -1497,6 +1502,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).edgw = locallab.spots.at(j).edgw && pSpot.edgw == otherSpot.edgw; locallab.spots.at(j).basew = locallab.spots.at(j).basew && pSpot.basew == otherSpot.basew; locallab.spots.at(j).sensilc = locallab.spots.at(j).sensilc && pSpot.sensilc == otherSpot.sensilc; + locallab.spots.at(j).reparw = locallab.spots.at(j).reparw && pSpot.reparw == otherSpot.reparw; locallab.spots.at(j).fftwlc = locallab.spots.at(j).fftwlc && pSpot.fftwlc == otherSpot.fftwlc; locallab.spots.at(j).blurlc = locallab.spots.at(j).blurlc && pSpot.blurlc == otherSpot.blurlc; locallab.spots.at(j).wavblur = locallab.spots.at(j).wavblur && pSpot.wavblur == otherSpot.wavblur; @@ -1570,9 +1576,11 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).targetGray = locallab.spots.at(j).targetGray && pSpot.targetGray == otherSpot.targetGray; locallab.spots.at(j).catad = locallab.spots.at(j).catad && pSpot.catad == otherSpot.catad; locallab.spots.at(j).saturl = locallab.spots.at(j).saturl && pSpot.saturl == otherSpot.saturl; + locallab.spots.at(j).chroml = locallab.spots.at(j).chroml && pSpot.chroml == otherSpot.chroml; locallab.spots.at(j).lightl = locallab.spots.at(j).lightl && pSpot.lightl == otherSpot.lightl; locallab.spots.at(j).lightq = locallab.spots.at(j).lightq && pSpot.lightq == otherSpot.lightq; locallab.spots.at(j).contl = locallab.spots.at(j).contl && pSpot.contl == otherSpot.contl; + locallab.spots.at(j).contthres = locallab.spots.at(j).contthres && pSpot.contthres == otherSpot.contthres; locallab.spots.at(j).contq = locallab.spots.at(j).contq && pSpot.contq == otherSpot.contq; locallab.spots.at(j).colorfl = locallab.spots.at(j).colorfl && pSpot.colorfl == otherSpot.colorfl; locallab.spots.at(j).LcurveL = locallab.spots.at(j).LcurveL && pSpot.LcurveL == otherSpot.LcurveL; @@ -1638,7 +1646,7 @@ void ParamsEdited::initFrom(const std::vector& if (!isSpotNumberEqual) { // All LocallabSpotEdited are set to false because cannot be combined locallab.spots.clear(); - locallab.spots.resize(p.locallab.spots.size(), new LocallabParamsEdited::LocallabSpotEdited(false)); + locallab.spots.resize(p.locallab.spots.size(), LocallabParamsEdited::LocallabSpotEdited(false)); } pcvignette.enabled = pcvignette.enabled && p.pcvignette.enabled == other.pcvignette.enabled; @@ -3402,6 +3410,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).lightness = mods.locallab.spots.at(i).lightness; } + if (locallab.spots.at(i).reparcol) { + toEdit.locallab.spots.at(i).reparcol = mods.locallab.spots.at(i).reparcol; + } + if (locallab.spots.at(i).contrast) { toEdit.locallab.spots.at(i).contrast = mods.locallab.spots.at(i).contrast; } @@ -3715,6 +3727,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).excurve = mods.locallab.spots.at(i).excurve; } + if (locallab.spots.at(i).norm) { + toEdit.locallab.spots.at(i).norm = mods.locallab.spots.at(i).norm; + } + if (locallab.spots.at(i).inversex) { toEdit.locallab.spots.at(i).inversex = mods.locallab.spots.at(i).inversex; } @@ -3791,8 +3807,12 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).laplacexp = mods.locallab.spots.at(i).laplacexp; } - if (locallab.spots.at(i).balanexp) { - toEdit.locallab.spots.at(i).balanexp = mods.locallab.spots.at(i).balanexp; + if (locallab.spots.at(i).laplacexp) { + toEdit.locallab.spots.at(i).laplacexp = mods.locallab.spots.at(i).laplacexp; + } + + if (locallab.spots.at(i).reparexp) { + toEdit.locallab.spots.at(i).reparexp = mods.locallab.spots.at(i).reparexp; } if (locallab.spots.at(i).linear) { @@ -3942,6 +3962,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).detailSH = mods.locallab.spots.at(i).detailSH; } + if (locallab.spots.at(i).reparsh) { + toEdit.locallab.spots.at(i).reparsh = mods.locallab.spots.at(i).reparsh; + } + if (locallab.spots.at(i).LmaskSHcurve) { toEdit.locallab.spots.at(i).LmaskSHcurve = mods.locallab.spots.at(i).LmaskSHcurve; } @@ -4341,6 +4365,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).sensiden = mods.locallab.spots.at(i).sensiden; } + if (locallab.spots.at(i).reparden) { + toEdit.locallab.spots.at(i).reparden = mods.locallab.spots.at(i).reparden; + } + if (locallab.spots.at(i).detailthr) { toEdit.locallab.spots.at(i).detailthr = mods.locallab.spots.at(i).detailthr; } @@ -4463,6 +4491,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).scaltm = mods.locallab.spots.at(i).scaltm; } + if (locallab.spots.at(i).repartm) { + toEdit.locallab.spots.at(i).repartm = mods.locallab.spots.at(i).repartm; + } + if (locallab.spots.at(i).rewei) { toEdit.locallab.spots.at(i).rewei = mods.locallab.spots.at(i).rewei; } @@ -4939,6 +4971,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).sensilc = mods.locallab.spots.at(i).sensilc; } + if (locallab.spots.at(i).reparw) { + toEdit.locallab.spots.at(i).reparw = mods.locallab.spots.at(i).reparw; + } + if (locallab.spots.at(i).fftwlc) { toEdit.locallab.spots.at(i).fftwlc = mods.locallab.spots.at(i).fftwlc; } @@ -5211,6 +5247,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).saturl = mods.locallab.spots.at(i).saturl; } + if (locallab.spots.at(i).chroml) { + toEdit.locallab.spots.at(i).chroml = mods.locallab.spots.at(i).chroml; + } + if (locallab.spots.at(i).lightl) { toEdit.locallab.spots.at(i).lightl = mods.locallab.spots.at(i).lightl; } @@ -5223,6 +5263,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).contl = mods.locallab.spots.at(i).contl; } + if (locallab.spots.at(i).contthres) { + toEdit.locallab.spots.at(i).contthres = mods.locallab.spots.at(i).contthres; + } + if (locallab.spots.at(i).contq) { toEdit.locallab.spots.at(i).contq = mods.locallab.spots.at(i).contq; } @@ -6704,6 +6748,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : complexcolor(v), curvactiv(v), lightness(v), + reparcol(v), contrast(v), chroma(v), labgridALow(v), @@ -6783,6 +6828,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : strexp(v), angexp(v), excurve(v), + norm(v), inversex(v), enaExpMask(v), enaExpMaskaft(v), @@ -6802,6 +6848,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : expMethod(v), exnoiseMethod(v), laplacexp(v), + reparexp(v), balanexp(v), linear(v), gamm(v), @@ -6840,6 +6887,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : slomaskSH(v), lapmaskSH(v), detailSH(v), + reparsh(v), LmaskSHcurve(v), fatamountSH(v), fatanchorSH(v), @@ -6942,6 +6990,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : nlrad(v), nlgam(v), sensiden(v), + reparden(v), detailthr(v), locwavcurveden(v), locwavcurvehue(v), @@ -6973,6 +7022,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : gamma(v), estop(v), scaltm(v), + repartm(v), rewei(v), satur(v), sensitm(v), @@ -7094,6 +7144,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : edgw(v), basew(v), sensilc(v), + reparw(v), fftwlc(v), blurlc(v), wavblur(v), @@ -7163,9 +7214,11 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : targetGray(v), catad(v), saturl(v), + chroml(v), lightl(v), lightq(v), contl(v), + contthres(v), contq(v), colorfl(v), LcurveL(v), @@ -7274,6 +7327,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) complexcolor = v; curvactiv = v; lightness = v; + reparcol = v; contrast = v; chroma = v; labgridALow = v; @@ -7353,6 +7407,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) strexp = v; angexp = v; excurve = v; + norm = v; inversex = v; enaExpMask = v; enaExpMaskaft = v; @@ -7372,6 +7427,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) expMethod = v; exnoiseMethod = v; laplacexp = v; + reparexp = v; balanexp = v; linear = v; gamm = v; @@ -7414,6 +7470,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) slomaskSH = v; lapmaskSH = v; detailSH = v; + reparsh = v; LmaskSHcurve = v; fatamountSH = v; fatanchorSH = v; @@ -7516,6 +7573,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) nlrad = v; nlgam = v; sensiden = v; + reparden = v; detailthr = v; locwavcurveden = v; showmaskblMethodtyp = v; @@ -7546,6 +7604,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) gamma = v; estop = v; scaltm = v; + repartm = v; rewei = v; satur = v; sensitm = v; @@ -7667,6 +7726,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) edgw = v; basew = v; sensilc = v; + reparw = v; fftwlc = v; blurlc = v; wavblur = v; @@ -7740,9 +7800,11 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) targetGray = v; catad = v; saturl = v; + chroml = v; lightl = v; lightq = v; contl = v; + contthres = v; contq = v; colorfl = v; LcurveL = v; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 21431d619..ae969db11 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -438,6 +438,7 @@ public: bool complexcolor; bool curvactiv; bool lightness; + bool reparcol; bool contrast; bool chroma; bool labgridALow; @@ -517,6 +518,7 @@ public: bool strexp; bool angexp; bool excurve; + bool norm; bool inversex; bool enaExpMask; bool enaExpMaskaft; @@ -536,6 +538,7 @@ public: bool expMethod; bool exnoiseMethod; bool laplacexp; + bool reparexp; bool balanexp; bool linear; bool gamm; @@ -574,6 +577,7 @@ public: bool slomaskSH; bool lapmaskSH; bool detailSH; + bool reparsh; bool LmaskSHcurve; bool fatamountSH; bool fatanchorSH; @@ -676,6 +680,7 @@ public: bool nlrad; bool nlgam; bool sensiden; + bool reparden; bool detailthr; bool locwavcurveden; bool locwavcurvehue; @@ -707,6 +712,7 @@ public: bool gamma; bool estop; bool scaltm; + bool repartm; bool rewei; bool satur; bool sensitm; @@ -828,6 +834,7 @@ public: bool edgw; bool basew; bool sensilc; + bool reparw; bool fftwlc; bool blurlc; bool wavblur; @@ -897,9 +904,11 @@ public: bool targetGray; bool catad; bool saturl; + bool chroml; bool lightl; bool lightq; bool contl; + bool contthres; bool contq; bool colorfl; bool LcurveL; diff --git a/rtgui/profilepanel.cc b/rtgui/profilepanel.cc index a13c6421d..05e5bbab1 100644 --- a/rtgui/profilepanel.cc +++ b/rtgui/profilepanel.cc @@ -573,7 +573,7 @@ void ProfilePanel::paste_clicked (GdkEventButton* event) // Setting LocallabSpotEdited number coherent with spots number in lastsaved->pparams custom->pedited->locallab.spots.clear(); - custom->pedited->locallab.spots.resize(custom->pparams->locallab.spots.size(), new LocallabParamsEdited::LocallabSpotEdited(false)); + custom->pedited->locallab.spots.resize(custom->pparams->locallab.spots.size(), LocallabParamsEdited::LocallabSpotEdited(false)); } else { const ProfileStoreEntry* entry = profiles->getSelectedEntry(); @@ -583,7 +583,7 @@ void ProfilePanel::paste_clicked (GdkEventButton* event) // Setting LocallabSpotEdited number coherent with spots number in partProfile->pparams custom->pedited->locallab.spots.clear(); - custom->pedited->locallab.spots.resize(custom->pparams->locallab.spots.size(), new LocallabParamsEdited::LocallabSpotEdited(false)); + custom->pedited->locallab.spots.resize(custom->pparams->locallab.spots.size(), LocallabParamsEdited::LocallabSpotEdited(false)); } } @@ -601,7 +601,7 @@ void ProfilePanel::paste_clicked (GdkEventButton* event) // Setting LocallabSpotEdited number coherent with spots number in lastsaved->pparams custom->pedited->locallab.spots.clear(); - custom->pedited->locallab.spots.resize(custom->pparams->locallab.spots.size(), new LocallabParamsEdited::LocallabSpotEdited(true)); + custom->pedited->locallab.spots.resize(custom->pparams->locallab.spots.size(), LocallabParamsEdited::LocallabSpotEdited(true)); } else { const ProfileStoreEntry* entry = profiles->getSelectedEntry(); @@ -611,7 +611,7 @@ void ProfilePanel::paste_clicked (GdkEventButton* event) // Setting LocallabSpotEdited number coherent with spots number in partProfile->pparams custom->pedited->locallab.spots.clear(); - custom->pedited->locallab.spots.resize(custom->pparams->locallab.spots.size(), new LocallabParamsEdited::LocallabSpotEdited(true)); + custom->pedited->locallab.spots.resize(custom->pparams->locallab.spots.size(), LocallabParamsEdited::LocallabSpotEdited(true)); } } } @@ -658,7 +658,7 @@ void ProfilePanel::paste_clicked (GdkEventButton* event) } else { // Setting LocallabSpotEdited number coherent with spots number in custom->pparams custom->pedited->locallab.spots.clear(); - custom->pedited->locallab.spots.resize(custom->pparams->locallab.spots.size(), new LocallabParamsEdited::LocallabSpotEdited(true)); + custom->pedited->locallab.spots.resize(custom->pparams->locallab.spots.size(), LocallabParamsEdited::LocallabSpotEdited(true)); } } } else { @@ -682,14 +682,14 @@ void ProfilePanel::paste_clicked (GdkEventButton* event) // Setting LocallabSpotEdited number coherent with spots number in custom->pparams custom->pedited->locallab.spots.clear(); - custom->pedited->locallab.spots.resize(custom->pparams->locallab.spots.size(), new LocallabParamsEdited::LocallabSpotEdited(true)); + custom->pedited->locallab.spots.resize(custom->pparams->locallab.spots.size(), LocallabParamsEdited::LocallabSpotEdited(true)); } else { // custom.pparams = clipboard.pparams non filtered *custom->pparams = pp; // Setting LocallabSpotEdited number coherent with spots number in custom->pparams custom->pedited->locallab.spots.clear(); - custom->pedited->locallab.spots.resize(custom->pparams->locallab.spots.size(), new LocallabParamsEdited::LocallabSpotEdited(true)); + custom->pedited->locallab.spots.resize(custom->pparams->locallab.spots.size(), LocallabParamsEdited::LocallabSpotEdited(true)); } } @@ -739,7 +739,7 @@ void ProfilePanel::selection_changed () ParamsEdited pe(true); // Setting LocallabSpotEdited number coherent with spots number in s->pparams - pe.locallab.spots.resize(s->pparams->locallab.spots.size(), new LocallabParamsEdited::LocallabSpotEdited(true)); + pe.locallab.spots.resize(s->pparams->locallab.spots.size(), LocallabParamsEdited::LocallabSpotEdited(true)); PartialProfile s2(s->pparams, &pe, false); changeTo (&s2, pse->label + "+"); @@ -782,7 +782,7 @@ void ProfilePanel::procParamsChanged( // Setting LocallabSpotEdited number coherent with spots number in p custom->pedited->locallab.spots.clear(); - custom->pedited->locallab.spots.resize(p->locallab.spots.size(), new LocallabParamsEdited::LocallabSpotEdited(true)); + custom->pedited->locallab.spots.resize(p->locallab.spots.size(), LocallabParamsEdited::LocallabSpotEdited(true)); } void ProfilePanel::clearParamChanges() @@ -819,7 +819,7 @@ void ProfilePanel::initProfile (const Glib::ustring& profileFullPath, ProcParams if (lastSaved) { ParamsEdited* pe = new ParamsEdited(true); // Setting LocallabSpotEdited number coherent with lastSaved->locallab spots number (initialized at true such as pe) - pe->locallab.spots.resize(lastSaved->locallab.spots.size(), new LocallabParamsEdited::LocallabSpotEdited(true)); + pe->locallab.spots.resize(lastSaved->locallab.spots.size(), LocallabParamsEdited::LocallabSpotEdited(true)); // copying the provided last saved profile to ProfilePanel::lastsaved lastsaved = new PartialProfile(lastSaved, pe); } diff --git a/rtgui/shadowshighlights.cc b/rtgui/shadowshighlights.cc index f6ab4811a..a168527d6 100644 --- a/rtgui/shadowshighlights.cc +++ b/rtgui/shadowshighlights.cc @@ -28,7 +28,7 @@ using namespace rtengine::procparams; ShadowsHighlights::ShadowsHighlights () : FoldableToolPanel(this, "shadowshighlights", M("TP_SHADOWSHLIGHTS_LABEL"), false, true) { auto m = ProcEventMapper::getInstance(); - EvSHColorspace = m->newEvent(RGBCURVE, "HISTORY_MSG_SH_COLORSPACE"); + EvSHColorspace = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_SH_COLORSPACE"); Gtk::Box* hb = Gtk::manage (new Gtk::Box ()); hb->pack_start(*Gtk::manage(new Gtk::Label(M("TP_DIRPYRDENOISE_MAIN_COLORSPACE") + ": ")), Gtk::PACK_SHRINK); diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc index ac964b023..ef3ccad7f 100644 --- a/rtgui/toolpanelcoord.cc +++ b/rtgui/toolpanelcoord.cc @@ -353,6 +353,7 @@ void ToolPanelCoordinator::imageTypeChanged(bool isRaw, bool isBayer, bool isXtr rawPanelSW->set_sensitive(true); sensorxtrans->FoldableToolPanel::hide(); xtransprocess->FoldableToolPanel::hide(); + bayerrawexposure->FoldableToolPanel::show(); xtransrawexposure->FoldableToolPanel::hide(); sensorbayer->FoldableToolPanel::show(); bayerprocess->FoldableToolPanel::show(); @@ -374,6 +375,7 @@ void ToolPanelCoordinator::imageTypeChanged(bool isRaw, bool isBayer, bool isXtr sensorxtrans->FoldableToolPanel::show(); xtransprocess->FoldableToolPanel::show(); xtransrawexposure->FoldableToolPanel::show(); + bayerrawexposure->FoldableToolPanel::hide(); sensorbayer->FoldableToolPanel::hide(); bayerprocess->FoldableToolPanel::hide(); bayerpreprocess->FoldableToolPanel::hide();