diff --git a/rawtherapee.astylerc b/rawtherapee.astylerc
new file mode 100644
index 000000000..3d49d821f
--- /dev/null
+++ b/rawtherapee.astylerc
@@ -0,0 +1,8 @@
+style=1tbs
+indent=spaces=4
+indent-switches
+break-blocks
+pad-oper
+convert-tabs
+pad-header
+unpad-paren
diff --git a/rtdata/languages/Catala b/rtdata/languages/Catala
index 8f928ebc7..cea44d9fb 100644
--- a/rtdata/languages/Catala
+++ b/rtdata/languages/Catala
@@ -1379,6 +1379,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-w
!MAIN_TAB_INSPECT; Inspect
!MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: Middle grey\nShortcut: 9
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!MONITOR_PROFILE_SYSTEM;System default
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
diff --git a/rtdata/languages/Chinese (Simplified) b/rtdata/languages/Chinese (Simplified)
index b4404728f..dd9a5b49e 100644
--- a/rtdata/languages/Chinese (Simplified)
+++ b/rtdata/languages/Chinese (Simplified)
@@ -1491,6 +1491,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!MAIN_TOOLTIP_PREVIEWFOCUSMASK;Preview the Focus Mask.\nShortcut: Shift-f\n\nMore accurate on images with shallow depth of field, low noise and at higher zoom levels.\n\nTo improve detection accuracy for noisy images evaluate at smaller zoom, about 10-30%.
!MAIN_TOOLTIP_PREVIEWG;Preview the Green channel.\nShortcut: g
!MAIN_TOOLTIP_PREVIEWL;Preview the Luminosity.\nShortcut: v\n\n0.299*R + 0.587*G + 0.114*B
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!MONITOR_PROFILE_SYSTEM;System default
!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.
diff --git a/rtdata/languages/Chinese (Traditional) b/rtdata/languages/Chinese (Traditional)
index cdb0bc822..38cd85fa5 100644
--- a/rtdata/languages/Chinese (Traditional)
+++ b/rtdata/languages/Chinese (Traditional)
@@ -1069,6 +1069,7 @@ TP_WBALANCE_TEMPERATURE;色溫
!MAIN_TOOLTIP_PREVIEWG;Preview the Green channel.\nShortcut: g
!MAIN_TOOLTIP_PREVIEWL;Preview the Luminosity.\nShortcut: v\n\n0.299*R + 0.587*G + 0.114*B
!MAIN_TOOLTIP_PREVIEWR;Preview the Red channel.\nShortcut: r
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!MAIN_TOOLTIP_SHOWHIDELP1;Show/Hide the left panel.\nShortcut: l
!MAIN_TOOLTIP_SHOWHIDERP1;Show/Hide the right panel.\nShortcut: Alt-l
!MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
diff --git a/rtdata/languages/Czech b/rtdata/languages/Czech
index 4b88d089c..945dcde4c 100644
--- a/rtdata/languages/Czech
+++ b/rtdata/languages/Czech
@@ -2239,6 +2239,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: -
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold
!HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - Anchor
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!PARTIALPASTE_TM_FATTAL;Dynamic Range Compression
!SAMPLEFORMAT_32;24-bit floating-point
!SAMPLEFORMAT_64;32-bit floating-point
diff --git a/rtdata/languages/Dansk b/rtdata/languages/Dansk
index 48871b32a..8b1b455fc 100644
--- a/rtdata/languages/Dansk
+++ b/rtdata/languages/Dansk
@@ -1065,6 +1065,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!MAIN_TOOLTIP_PREVIEWG;Preview the Green channel.\nShortcut: g
!MAIN_TOOLTIP_PREVIEWL;Preview the Luminosity.\nShortcut: v\n\n0.299*R + 0.587*G + 0.114*B
!MAIN_TOOLTIP_PREVIEWR;Preview the Red channel.\nShortcut: r
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!MAIN_TOOLTIP_SHOWHIDELP1;Show/Hide the left panel.\nShortcut: l
!MAIN_TOOLTIP_SHOWHIDERP1;Show/Hide the right panel.\nShortcut: Alt-l
!MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch
index d696da4dd..2cf024d12 100644
--- a/rtdata/languages/Deutsch
+++ b/rtdata/languages/Deutsch
@@ -36,7 +36,7 @@
#35 2017-02-18 AWB bias (TooWaBoo) RT 5.0 r1
#36 2017-02-23 Korrekturen (TooWaBoo) RT 5.0 r1
#37 2017-03-06 Dynamisches Profil (TooWaBoo) RT 5.0 r1
-#38 2017-03-26 Pixel Shift (TooWaBoo) RT 5.0 r1
+#38 2017-03-26 Pixel-Shift (TooWaBoo) RT 5.0 r1
#39 06.04.2017 Fast Export (TooWaBoo) RT 5.0 r1
#40 30.04.2017 Erweiterung/Korrekturen (TooWaBoo) RT 5.0 r1
#41 03.05.2017 Erweiterung/Korrekturen (TooWaBoo) RT 5.0 r1
@@ -58,6 +58,11 @@
#57 17.05.2018 Erweiterung (TooWaBoo) RT 5.4
#58 19.05.2018 Erweiterung (TooWaBoo) RT 5.4
#59 29.05.2018 Erweiterung (TooWaBoo) RT 5.4
+#60 14.06.2018 Erweiterung (TooWaBoo) RT 5.4
+#61 14.06.2018 Korrektur (TooWaBoo) RT 5.4
+#62 22.06.2018 Korrektur (TooWaBoo) RT 5.4
+#63 24.06.2018 DCB/RCD+VNG4 (TooWaBoo) RT 5.4
+#64 24.06.2018 Erweiterung/Korrektur (TooWaBoo) RT 5.4
ABOUT_TAB_BUILD;Version
ABOUT_TAB_CREDITS;Danksagungen
@@ -601,7 +606,7 @@ HISTORY_MSG_293;(Filmsimulation)
HISTORY_MSG_294;(Filmsimulation)\nIntensität
HISTORY_MSG_295;(Filmsimulation) - Film
HISTORY_MSG_296;(Rauschreduzierung)\nLuminanzkurve
-HISTORY_MSG_297;(Rauschreduzierung)\nQualität
+HISTORY_MSG_297;(Rauschreduzierung)\nModus
HISTORY_MSG_298;(Vorverarbeitung)\nDead-Pixel-Filter
HISTORY_MSG_299;(Rauschreduzierung)\nChrominanzkurve
HISTORY_MSG_300;-
@@ -750,20 +755,20 @@ HISTORY_MSG_442;(Retinex) - Einstellungen\nTransmission - Skalierung
HISTORY_MSG_443;(Farbmanagement)\nAusgabeprofil\nSchwarzpunkt-Kompensation
HISTORY_MSG_444;(Weißabgleich)\nAWB-Temperatur-Korrektur
HISTORY_MSG_445;(Sensor-Matrix)\nFarbinterpolation\nUnterbild
-HISTORY_MSG_449;(Sensor-Matrix)\nFarbinterpolation\nISO-Anpassung
-HISTORY_MSG_452;(Sensor-Matrix)\nFarbinterpolation\nBewegungsmaske\nanzeigen
-HISTORY_MSG_453;(Sensor-Matrix)\nFarbinterpolation\nNur Maske anzeigen
-HISTORY_MSG_457;(Sensor-Matrix)\nFarbinterpolation\nBewegung im Rot/Blau-\nKanal erkennen
-HISTORY_MSG_462;(Sensor-Matrix)\nFarbinterpolation\nBewegung im Grün-\nKanal erkennen
-HISTORY_MSG_464;(Sensor-Matrix)\nFarbinterpolation\nUnschärfebewegungsmaske
-HISTORY_MSG_465;(Sensor-Matrix)\nFarbinterpolation\nUnschärferadius
-HISTORY_MSG_468;(Sensor-Matrix)\nFarbinterpolation\nLücken in der Bewegungs-\nmaske erkennen
-HISTORY_MSG_469;(Sensor-Matrix)\nFarbinterpolation\nMedian
-HISTORY_MSG_471;(Sensor-Matrix)\nFarbinterpolation\nBewegungskorrektur
-HISTORY_MSG_472;(Sensor-Matrix)\nFarbinterpolation\nWeicher Übergang
-HISTORY_MSG_473;(Sensor-Matrix)\nFarbinterpolation\nLMMSE für Bewegungs-\nteile verwenden
-HISTORY_MSG_474;(Sensor-Matrix)\nFarbinterpolation\nFrame-Helligkeit angleichen
-HISTORY_MSG_475;(Sensor-Matrix)\nFarbinterpolation)\nAusgleich pro Kanal
+HISTORY_MSG_449;(Sensor-Matrix)\nFarbinterpolation - PS\nISO-Anpassung
+HISTORY_MSG_452;(Sensor-Matrix)\nFarbinterpolation - PS\nBewegungsmaske\nanzeigen
+HISTORY_MSG_453;(Sensor-Matrix)\nFarbinterpolation - PS\nNur Maske anzeigen
+HISTORY_MSG_457;(Sensor-Matrix)\nFarbinterpolation - PS\nBewegung im Rot/Blau-\nKanal erkennen
+HISTORY_MSG_462;(Sensor-Matrix)\nFarbinterpolation - PS\nBewegung im Grün-\nKanal erkennen
+HISTORY_MSG_464;(Sensor-Matrix)\nFarbinterpolation - PS\nUnschärfebewegungsmaske
+HISTORY_MSG_465;(Sensor-Matrix)\nFarbinterpolation - PS\nUnschärferadius
+HISTORY_MSG_468;(Sensor-Matrix)\nFarbinterpolation - PS\nLücken in der Bewegungs-\nmaske erkennen
+HISTORY_MSG_469;(Sensor-Matrix)\nFarbinterpolation - PS\nMedian
+HISTORY_MSG_471;(Sensor-Matrix)\nFarbinterpolation - PS\nBewegungskorrektur
+HISTORY_MSG_472;(Sensor-Matrix)\nFarbinterpolation - PS\nWeicher Übergang
+HISTORY_MSG_473;(Sensor-Matrix)\nFarbinterpolation - PS\nLMMSE für Bewegungs-\nteile verwenden
+HISTORY_MSG_474;(Sensor-Matrix)\nFarbinterpolation - PS\nFrame-Helligkeit angleichen
+HISTORY_MSG_475;(Sensor-Matrix)\nFarbinterpolation - PS\nAusgleich pro Kanal
HISTORY_MSG_476;(CIECAM02)\nBetrachtungsbed.\nFarbtemperatur
HISTORY_MSG_477;(CIECAM02)\nBetrachtungsbed.\nTönung
HISTORY_MSG_478;(CIECAM02)\nBetrachtungsbed.\nYb% (Ø Luminanz)
@@ -784,6 +789,7 @@ HISTORY_MSG_492;(RGB-Kurven)
HISTORY_MSG_493;(L*a*b*)
HISTORY_MSG_CLAMPOOG;(Belichtung) - Farben\nauf Farbraum beschränken
HISTORY_MSG_COLORTONING_LABGRID_VALUE;(Farbanpassungen)\nL*a*b* - Farbkorrektur
+HISTORY_MSG_DUALDEMOSAIC_CONTRAST;(Sensor-Matrix)\nFarbinterpolation\nKontrastschwelle
HISTORY_MSG_HISTMATCHING;(Belichtung)\nAuto-Tonwertkurve
HISTORY_MSG_LOCALCONTRAST_AMOUNT;(Lokaler Kontrast)\nIntensität
HISTORY_MSG_LOCALCONTRAST_DARKNESS;(Lokaler Kontrast)\nDunkle Bereiche
@@ -792,6 +798,7 @@ HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;(Lokaler Kontrast)\nHelle Bereiche
HISTORY_MSG_LOCALCONTRAST_RADIUS;(Lokaler Kontrast)\nRadius
HISTORY_MSG_METADATA_MODE;(Metadaten)\nKopiermodus
HISTORY_MSG_MICROCONTRAST_CONTRAST;(Mikrokontrast)\nKontrastschwelle
+HISTORY_MSG_PIXELSHIFT_DEMOSAIC;(Sensor-Matrix)\nFarbinterpolation - PS\nBewegungsmethode
HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;(Sensor-Matrix)\nVorverarbeitung\nRichtung
HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;(Sensor-Matrix)\nVorverarbeitung\nPDAF-Zeilenfilter
HISTORY_MSG_PRSHARPEN_CONTRAST;(Skalieren) - Schärfen\nKontrastschwelle
@@ -1000,7 +1007,7 @@ PARTIALPASTE_RAW_DMETHOD;Farbinterpolation: Methode
PARTIALPASTE_RAW_FALSECOLOR;Farbinterpolation: Falschfarbenreduzierung
PARTIALPASTE_RAW_IMAGENUM;Farbinterpolation: Unterbild
PARTIALPASTE_RAW_LMMSEITERATIONS;Farbinterpolation: LMMSE-Verbesserungsstufen
-PARTIALPASTE_RAW_PIXELSHIFT;Farbinterpolation: Pixel Shift
+PARTIALPASTE_RAW_PIXELSHIFT;Farbinterpolation: Pixel-Shift
PARTIALPASTE_RESIZE;Skalieren
PARTIALPASTE_RETINEX;Retinex (Bildschleier entfernen)
PARTIALPASTE_RGBCURVES;RGB-Kurven
@@ -1278,7 +1285,7 @@ QINFO_FRAMECOUNT;%2 Frames
QINFO_HDR;HDR / %2 Frame(s)
QINFO_ISO;ISO
QINFO_NOEXIF;Keine Exif-Daten vorhanden.
-QINFO_PIXELSHIFT;Pixel Shift / %2 Frame(s)
+QINFO_PIXELSHIFT;Pixel-Shift / %2 Frame(s)
SAMPLEFORMAT_0;Unbekanntes Datenformat
SAMPLEFORMAT_1;8 Bit ohne Vorzeichen
SAMPLEFORMAT_2;16 Bit ohne Vorzeichen
@@ -1314,7 +1321,7 @@ THRESHOLDSELECTOR_HINT;Umschalt-Taste halten, um individuelle\nKontrollpu
THRESHOLDSELECTOR_T;Oben
THRESHOLDSELECTOR_TL;Oben-Links
THRESHOLDSELECTOR_TR;Oben-Rechts
-TOOLBAR_TOOLTIP_COLORPICKER;Farbwähler\n\nWenn eingeschaltet:\n- Mit der linken Maustaste können Sie einen Farbwähler setzen.\n- Zum Verschieben, linke Maustaste festhalten.\n- Umschalttaste + Rechts-Klick entfernt alle Farbwähler.\n- Rechts-Klick auf den Farbwählerbutton blendet die Farbwähler ein/aus\n- Rechts-Klick in einen freien Bereich schaltet auf das Hand-Werkzeug zurück.
+TOOLBAR_TOOLTIP_COLORPICKER;Farbwähler\n\nWenn eingeschaltet:\n- Mit der linken Maustaste können Sie einen Farbwähler setzen.\n- Zum Verschieben, linke Maustaste festhalten.\n- Umschalttaste + Rechts-Klick entfernt alle Farbwähler.\n- Rechts-Klick auf den Farbwählerbutton blendet die Farbwähler ein/aus\n- Rechts-Klick in einen freien Bereich schaltet auf das Hand-Werkzeug zurück.
TOOLBAR_TOOLTIP_CROP;Ausschnitt wählen\nTaste: c\n\nZum Verschieben des Ausschnitts,\nUmschalttaste festhalten.
TOOLBAR_TOOLTIP_HAND;Hand-Werkzeug\nTaste: h
TOOLBAR_TOOLTIP_STRAIGHTEN;Ausrichten / Drehen\nTaste: s\n\nRichtet das Bild entlang einer Leitlinie aus.
@@ -1568,9 +1575,9 @@ TP_DIRPYRDENOISE_MAIN_COLORSPACE_RGB;RGB
TP_DIRPYRDENOISE_MAIN_COLORSPACE_TOOLTIP;Für RAW-Bilder kann entweder die RGB-\noder L*a*b*-Methode verwendet werden.\n\nFür andere Bilder wird unabhängig von der\nAuswahl immer die L*a*b*-Methode verwendet.
TP_DIRPYRDENOISE_MAIN_GAMMA;Gamma
TP_DIRPYRDENOISE_MAIN_GAMMA_TOOLTIP;Mit Gamma kann die Intensität der\nRauschreduzierung über den Farbbereich\nvariiert werden. Bei kleinen Werten sind\nnur dunkle Farbtöne betroffen, bei\ngrößeren Werten wird der Effekt auf\nhellere Töne ausgeweitet.
-TP_DIRPYRDENOISE_MAIN_MODE;Qualität
-TP_DIRPYRDENOISE_MAIN_MODE_AGGRESSIVE;Hoch
-TP_DIRPYRDENOISE_MAIN_MODE_CONSERVATIVE;Standard
+TP_DIRPYRDENOISE_MAIN_MODE;Modus
+TP_DIRPYRDENOISE_MAIN_MODE_AGGRESSIVE;Aggressiv
+TP_DIRPYRDENOISE_MAIN_MODE_CONSERVATIVE;Konservativ
TP_DIRPYRDENOISE_MAIN_MODE_TOOLTIP;Einstellung der Qualität der Rauschreduzierung.\nDie Einstellung “Hoch“ verbessert die Rausch-\nreduzierung auf Kosten der Verarbeitungszeit.
TP_DIRPYRDENOISE_MEDIAN_METHOD;Methode
TP_DIRPYRDENOISE_MEDIAN_METHOD_CHROMINANCE;Nur Farbe
@@ -1827,15 +1834,18 @@ TP_RAWEXPOS_RGB;Rot, Grün, Blau
TP_RAWEXPOS_TWOGREEN;Grün-Werte automatisch angleichen
TP_RAW_1PASSMEDIUM;1-Pass (Medium)
TP_RAW_3PASSBEST;3-Pass (Beste)
+TP_RAW_4PASS;4-Pass
TP_RAW_AHD;AHD
TP_RAW_AMAZE;AMaZE
+TP_RAW_AMAZEVNG4;AMaZE + VNG4
TP_RAW_DCB;DCB
TP_RAW_DCBENHANCE;DCB-Verbesserung
TP_RAW_DCBITERATIONS;Anzahl der DCB-Iterationen
TP_RAW_DMETHOD;Methode
TP_RAW_DMETHOD_PROGRESSBAR;%1 verarbeitet
TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Demosaikoptimierung
-TP_RAW_DMETHOD_TOOLTIP;IGV und LMMSE sind speziel für High-ISO-Aufnahmen um die\nRauschreduzierung zu unterstützen ohne zu Maze-Mustern,\nPosterisierung oder einem ausgewaschenen Look zu führen.\n\nPixel Shift ist für “Pentax Pixel Shift“-Dateien. Für "Nicht-Pixel-\nShift"-Dateien wird automatisch AMaZE verwendet.
+TP_RAW_DMETHOD_TOOLTIP;IGV und LMMSE sind speziel für High-ISO-Aufnahmen um die\nRauschreduzierung zu unterstützen ohne zu Maze-Mustern,\nPosterisierung oder einem ausgewaschenen Look zu führen.\n\nPixel-Shift ist für “Pentax Pixel-Shift“-Dateien. Für "Nicht-Pixel-\nShift"-Dateien wird automatisch AMaZE verwendet.
+TP_RAW_DUALDEMOSAICCONTRAST;Kontrastschwelle
TP_RAW_EAHD;EAHD
TP_RAW_FALSECOLOR;Falschfarbenreduzierung
TP_RAW_FAST;Schnell
@@ -1844,16 +1854,17 @@ TP_RAW_HD_TOOLTIP;Je niedriger der Wert, umso empfindlicher reagiert\ndie “Hot
TP_RAW_HPHD;HPHD
TP_RAW_IGV;IGV
TP_RAW_IMAGENUM;Unterbild
-TP_RAW_IMAGENUM_TOOLTIP;Einige RAW-Formate enthalten mehrere Unterbilder (Pentax Pixel Shift,\nPentax 3-in-1 HDR, Canon Dual Pixel).\n\n> Auswahl des zu verwendenden Unterbildes (nicht bei Pixel Shift).\n\n> Legt das Unterbild für die Bewegungsbereiche bei Pixel Shift fest.
+TP_RAW_IMAGENUM_TOOLTIP;Einige RAW-Formate enthalten mehrere Unterbilder (Pentax Pixel-Shift,\nPentax 3-in-1 HDR, Canon Dual Pixel).\n\n> Auswahl des zu verwendenden Unterbildes (nicht bei Pixel-Shift).\n\n> Legt das Unterbild für die Bewegungsbereiche bei Pixel-Shift fest.
TP_RAW_LABEL;Farbinterpolation
TP_RAW_LMMSE;LMMSE
TP_RAW_LMMSEITERATIONS;LMMSE-Verbesserungsstufen
TP_RAW_LMMSE_TOOLTIP;Fügt Gamma (Stufe 1), Median (Stufe 2-4)\nund Optimierung (Stufe 5-6) zur Minimierung\nvon Artefakten hinzu und verbessert das\nSignalrauschverhältnis.
TP_RAW_MONO;Mono
TP_RAW_NONE;Keine
-TP_RAW_PIXELSHIFT;Pixel Shift
+TP_RAW_PIXELSHIFT;Pixel-Shift
TP_RAW_PIXELSHIFTADAPTIVE;Adaptive Erkennung
TP_RAW_PIXELSHIFTBLUR;Unschärfebewegungsmaske
+TP_RAW_PIXELSHIFTDMETHOD;Bewegungsmethode
TP_RAW_PIXELSHIFTEPERISO;Empfindlichkeit
TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;Der Standardwert 0 wird für die Basis-ISO empfohlen.\nHöhere Werte erhöhen die Empfindlichkeit der Bewegungserkennung.\nVerändern Sie den Wert in kleinen Schritten und beobachten Sie die\nBewegungsmaske. Erhöhen Sie die Empfindlichkeit für unterbelichtete\noder High-ISO-Bilder.
TP_RAW_PIXELSHIFTEQUALBRIGHT;Frame-Helligkeit angleichen
@@ -2293,9 +2304,7 @@ ZOOMPANEL_ZOOMOUT;Herauszoomen\nTaste: -
! Untranslated keys follow; remove the ! prefix after an entry is translated.
!!!!!!!!!!!!!!!!!!!!!!!!!
-!HISTORY_MSG_DUALDEMOSAIC_CONTRAST;AMaZE+VNG4 - Contrast threshold
-!HISTORY_MSG_PIXELSHIFT_DEMOSAIC;PS - Demosaic method for motion
-!TP_RAW_4PASS;4-Pass
-!TP_RAW_AMAZEVNG4;AMaZE+VNG4
-!TP_RAW_DUALDEMOSAICCONTRAST;Contrast threshold
-!TP_RAW_PIXELSHIFTDMETHOD;Demosaic method for motion
+MAIN_TOOLTIP_PREVIEWSHARPMASK;Schärfungs-Kontroll-Maske ein-/ausschalten\n\nFunktioniert nur bei aktivierter Schärfung\nund Zoom >= 100%.
+TP_RAW_DCBVNG4;DCB + VNG4
+TP_RAW_RCDVNG4;RCD + VNG4
+TP_RAW_2PASS;2-Pass
diff --git a/rtdata/languages/English (UK) b/rtdata/languages/English (UK)
index 9ba753ef5..c1ed51727 100644
--- a/rtdata/languages/English (UK)
+++ b/rtdata/languages/English (UK)
@@ -942,6 +942,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!MAIN_TOOLTIP_PREVIEWG;Preview the Green channel.\nShortcut: g
!MAIN_TOOLTIP_PREVIEWL;Preview the Luminosity.\nShortcut: v\n\n0.299*R + 0.587*G + 0.114*B
!MAIN_TOOLTIP_PREVIEWR;Preview the Red channel.\nShortcut: r
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!MAIN_TOOLTIP_QINFO;Quick info on the image.\nShortcut: i
!MAIN_TOOLTIP_SHOWHIDELP1;Show/Hide the left panel.\nShortcut: l
!MAIN_TOOLTIP_SHOWHIDERP1;Show/Hide the right panel.\nShortcut: Alt-l
diff --git a/rtdata/languages/English (US) b/rtdata/languages/English (US)
index 88254c317..f744b33b6 100644
--- a/rtdata/languages/English (US)
+++ b/rtdata/languages/English (US)
@@ -861,6 +861,7 @@
!MAIN_TOOLTIP_PREVIEWG;Preview the Green channel.\nShortcut: g
!MAIN_TOOLTIP_PREVIEWL;Preview the Luminosity.\nShortcut: v\n\n0.299*R + 0.587*G + 0.114*B
!MAIN_TOOLTIP_PREVIEWR;Preview the Red channel.\nShortcut: r
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!MAIN_TOOLTIP_QINFO;Quick info on the image.\nShortcut: i
!MAIN_TOOLTIP_SHOWHIDELP1;Show/Hide the left panel.\nShortcut: l
!MAIN_TOOLTIP_SHOWHIDERP1;Show/Hide the right panel.\nShortcut: Alt-l
diff --git a/rtdata/languages/Espanol b/rtdata/languages/Espanol
index 5f4866261..025672983 100644
--- a/rtdata/languages/Espanol
+++ b/rtdata/languages/Espanol
@@ -1757,6 +1757,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-w
!MAIN_TAB_INSPECT; Inspect
!MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: Middle grey\nShortcut: 9
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!MONITOR_PROFILE_SYSTEM;System default
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
diff --git a/rtdata/languages/Euskara b/rtdata/languages/Euskara
index 59a73eee7..3226a9811 100644
--- a/rtdata/languages/Euskara
+++ b/rtdata/languages/Euskara
@@ -1066,6 +1066,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!MAIN_TOOLTIP_PREVIEWG;Preview the Green channel.\nShortcut: g
!MAIN_TOOLTIP_PREVIEWL;Preview the Luminosity.\nShortcut: v\n\n0.299*R + 0.587*G + 0.114*B
!MAIN_TOOLTIP_PREVIEWR;Preview the Red channel.\nShortcut: r
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!MAIN_TOOLTIP_SHOWHIDELP1;Show/Hide the left panel.\nShortcut: l
!MAIN_TOOLTIP_SHOWHIDERP1;Show/Hide the right panel.\nShortcut: Alt-l
!MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais
index d947efb1a..724a78337 100644
--- a/rtdata/languages/Francais
+++ b/rtdata/languages/Francais
@@ -2216,6 +2216,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: -
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold
!HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - Anchor
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!PARTIALPASTE_TM_FATTAL;Dynamic Range Compression
!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview
!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show
diff --git a/rtdata/languages/Greek b/rtdata/languages/Greek
index 8d9cd5815..476d96ec7 100644
--- a/rtdata/languages/Greek
+++ b/rtdata/languages/Greek
@@ -1065,6 +1065,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!MAIN_TOOLTIP_PREVIEWG;Preview the Green channel.\nShortcut: g
!MAIN_TOOLTIP_PREVIEWL;Preview the Luminosity.\nShortcut: v\n\n0.299*R + 0.587*G + 0.114*B
!MAIN_TOOLTIP_PREVIEWR;Preview the Red channel.\nShortcut: r
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!MAIN_TOOLTIP_SHOWHIDELP1;Show/Hide the left panel.\nShortcut: l
!MAIN_TOOLTIP_SHOWHIDERP1;Show/Hide the right panel.\nShortcut: Alt-l
!MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
diff --git a/rtdata/languages/Hebrew b/rtdata/languages/Hebrew
index 223d2e45c..a59f913fe 100644
--- a/rtdata/languages/Hebrew
+++ b/rtdata/languages/Hebrew
@@ -1066,6 +1066,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!MAIN_TOOLTIP_PREVIEWG;Preview the Green channel.\nShortcut: g
!MAIN_TOOLTIP_PREVIEWL;Preview the Luminosity.\nShortcut: v\n\n0.299*R + 0.587*G + 0.114*B
!MAIN_TOOLTIP_PREVIEWR;Preview the Red channel.\nShortcut: r
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!MAIN_TOOLTIP_SHOWHIDELP1;Show/Hide the left panel.\nShortcut: l
!MAIN_TOOLTIP_SHOWHIDERP1;Show/Hide the right panel.\nShortcut: Alt-l
!MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
diff --git a/rtdata/languages/Italiano b/rtdata/languages/Italiano
index 9a7db12e9..1508e28ef 100644
--- a/rtdata/languages/Italiano
+++ b/rtdata/languages/Italiano
@@ -1633,6 +1633,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-w
!MAIN_TAB_INSPECT; Inspect
!MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: Middle grey\nShortcut: 9
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!MONITOR_PROFILE_SYSTEM;System default
!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.
diff --git a/rtdata/languages/Japanese b/rtdata/languages/Japanese
index 540b59521..02062cc6c 100644
--- a/rtdata/languages/Japanese
+++ b/rtdata/languages/Japanese
@@ -758,6 +758,7 @@ HISTORY_MSG_492;RGBカーブ
HISTORY_MSG_493;L*a*b*調整
HISTORY_MSG_CLAMPOOG;色域外の色を切り取る
HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - カラー補正
+HISTORY_MSG_DUALDEMOSAIC_CONTRAST;AMaZE+VNG4 - コントラストのしきい値
HISTORY_MSG_HISTMATCHING;トーンカーブの自動調節
HISTORY_MSG_LOCALCONTRAST_AMOUNT;ローカルコントラスト - 量
HISTORY_MSG_LOCALCONTRAST_DARKNESS;ローカルコントラスト - 暗い部分
@@ -766,6 +767,7 @@ HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;ローカルコントラスト - 明るい
HISTORY_MSG_LOCALCONTRAST_RADIUS;ローカルコントラスト - 半径
HISTORY_MSG_METADATA_MODE;メタデータ コピーモード
HISTORY_MSG_MICROCONTRAST_CONTRAST;マイクロコントラスト - コントラストのしきい値
+HISTORY_MSG_PIXELSHIFT_DEMOSAIC;PS - 振れに対するデモザイクの方式
HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;ラインノイズフィルタの方向
HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAFラインフィルタ
HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - コントラストのしきい値
@@ -876,7 +878,6 @@ MAIN_TAB_RAW;raw
MAIN_TAB_RAW_TOOLTIP;ショートカット: Alt-r
MAIN_TAB_TRANSFORM;変形
MAIN_TAB_TRANSFORM_TOOLTIP;ショートカット: Alt-t
-MAIN_TAB_WAVELET;ウェーブレット
MAIN_TAB_WAVELET_TOOLTIP;ショートカット: Alt-w
MAIN_TOOLTIP_BACKCOLOR0;プレビューの背景色を指定します: テーマに基づく\nショートカット: 9
MAIN_TOOLTIP_BACKCOLOR1;プレビューの背景色を指定します: 黒\nショートカットt: 9
@@ -986,7 +987,6 @@ PARTIALPASTE_SHARPENMICRO;マイクロコントラスト
PARTIALPASTE_TM_FATTAL;ダイナミックレンジ圧縮
PARTIALPASTE_VIBRANCE;自然な彩度
PARTIALPASTE_VIGNETTING;周辺光量補正
-PARTIALPASTE_WAVELETGROUP;ウェーブレット処理
PARTIALPASTE_WHITEBALANCE;ホワイトバランス
PREFERENCES_ADD;追加
PREFERENCES_APPLNEXTSTARTUP;要再起動
@@ -1011,10 +1011,6 @@ PREFERENCES_CACHECLEARTHUMBS;サムネイルのクリア
PREFERENCES_CACHEMAXENTRIES;キャッシュエントリーの最大数
PREFERENCES_CACHEOPTS;cache オプション
PREFERENCES_CACHETHUMBHEIGHT;サムネイル縦の最大値
-PREFERENCES_CIEART;CIECAM02 最適化
-PREFERENCES_CIEART_FRAME;CIECAM02-特定の設定
-PREFERENCES_CIEART_LABEL;倍精度の代わりに単精度浮動小数点を使用
-PREFERENCES_CIEART_TOOLTIP;有効にした場合、 CIECAM02は倍精度浮動小数点形式の代わりに単精度で実行されます。これは品質を少し犠牲にし、速度を少し増加させます
PREFERENCES_CLIPPINGIND;クリッピング領域の表示
PREFERENCES_CLUTSCACHE;HaldCLUT cache
PREFERENCES_CLUTSCACHE_LABEL;cacheに置けるHaldCLUTの最大数
@@ -1265,7 +1261,6 @@ SAVEDLG_AUTOSUFFIX;ファイルが存在する場合、自動的に末尾に文
SAVEDLG_FILEFORMAT;ファイル形式
SAVEDLG_FORCEFORMATOPTS;強制保存オプション
SAVEDLG_JPEGQUAL;JPEG 品質
-SAVEDLG_PNGCOMPR;PNG 圧縮
SAVEDLG_PUTTOQUEUE;キュー処理に追加
SAVEDLG_PUTTOQUEUEHEAD;キュー処理の最初に追加
SAVEDLG_PUTTOQUEUETAIL;キュー処理の最後に追加
@@ -1507,12 +1502,6 @@ TP_DARKFRAME_LABEL;ダークフレーム
TP_DEFRINGE_LABEL;フリンジ低減
TP_DEFRINGE_RADIUS;半径
TP_DEFRINGE_THRESHOLD;しきい値
-TP_DIRPYRDENOISE_3X3;3×3
-TP_DIRPYRDENOISE_3X3_SOFT;3×3 ソフト
-TP_DIRPYRDENOISE_5X5;5×5
-TP_DIRPYRDENOISE_5X5_SOFT;5×5 ソフト
-TP_DIRPYRDENOISE_7X7;7×7
-TP_DIRPYRDENOISE_9X9;9×9
TP_DIRPYRDENOISE_CHROMINANCE_AMZ;自動(多分割方式)
TP_DIRPYRDENOISE_CHROMINANCE_AUTOGLOBAL;自動(分割方式)
TP_DIRPYRDENOISE_CHROMINANCE_AUTOGLOBAL_TOOLTIP;色ノイズ低減の効果を確認して下さい\n注意:設定値の計算はあくまで平均的なもので、かなり主観的でです
@@ -1543,7 +1532,6 @@ TP_DIRPYRDENOISE_LUMINANCE_FRAME;輝度ノイズ
TP_DIRPYRDENOISE_LUMINANCE_SMOOTHING;輝度
TP_DIRPYRDENOISE_MAIN_COLORSPACE;色空間
TP_DIRPYRDENOISE_MAIN_COLORSPACE_LAB;L*a*b*
-TP_DIRPYRDENOISE_MAIN_COLORSPACE_LABEL;ノイズ低減
TP_DIRPYRDENOISE_MAIN_COLORSPACE_RGB;RGB
TP_DIRPYRDENOISE_MAIN_COLORSPACE_TOOLTIP;raw画像は、RGBまたはL*a*b*方式のいずれかを使用することができます。\n\nraw以外の画像は、選択にかかわらずL*a*b*方式が採用されます
TP_DIRPYRDENOISE_MAIN_GAMMA;ガンマ
@@ -1807,8 +1795,10 @@ TP_RAWEXPOS_RGB;レッド、グリーン、ブルー
TP_RAWEXPOS_TWOGREEN;2つのグリーンを連動
TP_RAW_1PASSMEDIUM;1-パス (ミディアム)
TP_RAW_3PASSBEST;3-Pass (最良)
+TP_RAW_4PASS;4-パス
TP_RAW_AHD;AHD
TP_RAW_AMAZE;AMaZE
+TP_RAW_AMAZEVNG4;AMaZE+VNG4
TP_RAW_DCB;DCB
TP_RAW_DCBENHANCE;DCB 拡張処理
TP_RAW_DCBITERATIONS;DCB 反復の数
@@ -1816,6 +1806,7 @@ TP_RAW_DMETHOD;方式
TP_RAW_DMETHOD_PROGRESSBAR;%1 デモザイク中...
TP_RAW_DMETHOD_PROGRESSBAR_REFINE;デモザイク・リファイン中...
TP_RAW_DMETHOD_TOOLTIP;注: IGVとLMMSEは高ISO画像に適しています
+TP_RAW_DUALDEMOSAICCONTRAST;コントラストのしきい値
TP_RAW_EAHD;EAHD
TP_RAW_FALSECOLOR;偽色抑制処理の回数
TP_RAW_FAST;Fast
@@ -1833,6 +1824,7 @@ TP_RAW_MONO;Mono
TP_RAW_NONE;なし (センサーのパターンを表示)
TP_RAW_PIXELSHIFT;ピクセルシフト
TP_RAW_PIXELSHIFTBLUR;振れマスクのぼかし
+TP_RAW_PIXELSHIFTDMETHOD;振れに対するデモザイクの方式
TP_RAW_PIXELSHIFTEPERISO;ISOの適合
TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;通常のISOに関してはデフォルトの0で十分だと思われます。\n高いISOの場合は、振れの検知を良くするために設定値を上げます。\n少しづつ増加させ、振れのマスクの変化を見ます。
TP_RAW_PIXELSHIFTEQUALBRIGHT;構成画像の明るさを均等にする
@@ -2254,9 +2246,4 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: -
! Untranslated keys follow; remove the ! prefix after an entry is translated.
!!!!!!!!!!!!!!!!!!!!!!!!!
-!HISTORY_MSG_DUALDEMOSAIC_CONTRAST;AMaZE+VNG4 - Contrast threshold
-!HISTORY_MSG_PIXELSHIFT_DEMOSAIC;PS - Demosaic method for motion
-!TP_RAW_4PASS;4-Pass
-!TP_RAW_AMAZEVNG4;AMaZE+VNG4
-!TP_RAW_DUALDEMOSAICCONTRAST;Contrast threshold
-!TP_RAW_PIXELSHIFTDMETHOD;Demosaic method for motion
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
diff --git a/rtdata/languages/Latvian b/rtdata/languages/Latvian
index d951d2461..36a47f8c2 100644
--- a/rtdata/languages/Latvian
+++ b/rtdata/languages/Latvian
@@ -1066,6 +1066,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!MAIN_TOOLTIP_PREVIEWG;Preview the Green channel.\nShortcut: g
!MAIN_TOOLTIP_PREVIEWL;Preview the Luminosity.\nShortcut: v\n\n0.299*R + 0.587*G + 0.114*B
!MAIN_TOOLTIP_PREVIEWR;Preview the Red channel.\nShortcut: r
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!MAIN_TOOLTIP_SHOWHIDELP1;Show/Hide the left panel.\nShortcut: l
!MAIN_TOOLTIP_SHOWHIDERP1;Show/Hide the right panel.\nShortcut: Alt-l
!MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
diff --git a/rtdata/languages/Magyar b/rtdata/languages/Magyar
index 70489ded5..7afa3b602 100644
--- a/rtdata/languages/Magyar
+++ b/rtdata/languages/Magyar
@@ -1313,6 +1313,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!MAIN_TOOLTIP_BACKCOLOR1;Background color of the preview: Black\nShortcut: 9
!MAIN_TOOLTIP_BACKCOLOR2;Background color of the preview: White\nShortcut: 9
!MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: Middle grey\nShortcut: 9
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!MONITOR_PROFILE_SYSTEM;System default
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
diff --git a/rtdata/languages/Nederlands b/rtdata/languages/Nederlands
index aa96073a4..03daa94da 100644
--- a/rtdata/languages/Nederlands
+++ b/rtdata/languages/Nederlands
@@ -2166,6 +2166,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: -
!MAIN_TAB_ADVANCED;Advanced
!MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-w
!MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: Middle grey\nShortcut: 9
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!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.
diff --git a/rtdata/languages/Norsk BM b/rtdata/languages/Norsk BM
index b433dc902..9ef15ea7d 100644
--- a/rtdata/languages/Norsk BM
+++ b/rtdata/languages/Norsk BM
@@ -1065,6 +1065,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!MAIN_TOOLTIP_PREVIEWG;Preview the Green channel.\nShortcut: g
!MAIN_TOOLTIP_PREVIEWL;Preview the Luminosity.\nShortcut: v\n\n0.299*R + 0.587*G + 0.114*B
!MAIN_TOOLTIP_PREVIEWR;Preview the Red channel.\nShortcut: r
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!MAIN_TOOLTIP_SHOWHIDELP1;Show/Hide the left panel.\nShortcut: l
!MAIN_TOOLTIP_SHOWHIDERP1;Show/Hide the right panel.\nShortcut: Alt-l
!MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
diff --git a/rtdata/languages/Polish b/rtdata/languages/Polish
index b9b336f3f..205eb81fb 100644
--- a/rtdata/languages/Polish
+++ b/rtdata/languages/Polish
@@ -1715,6 +1715,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-w
!MAIN_TAB_INSPECT; Inspect
!MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: Middle grey\nShortcut: 9
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!MONITOR_PROFILE_SYSTEM;System default
!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.
diff --git a/rtdata/languages/Polish (Latin Characters) b/rtdata/languages/Polish (Latin Characters)
index 19ca6a4dd..41909d87a 100644
--- a/rtdata/languages/Polish (Latin Characters)
+++ b/rtdata/languages/Polish (Latin Characters)
@@ -1715,6 +1715,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-w
!MAIN_TAB_INSPECT; Inspect
!MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: Middle grey\nShortcut: 9
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!MONITOR_PROFILE_SYSTEM;System default
!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.
diff --git a/rtdata/languages/Portugues (Brasil) b/rtdata/languages/Portugues (Brasil)
index 961b18455..399d35eef 100644
--- a/rtdata/languages/Portugues (Brasil)
+++ b/rtdata/languages/Portugues (Brasil)
@@ -1639,6 +1639,7 @@ TP_ICM_DCPILLUMINANT_INTERPOLATED;Interpolado
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold
!HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - Anchor
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!PARTIALPASTE_TM_FATTAL;Dynamic Range Compression
!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_INPUTCAMERA;Camera standard
diff --git a/rtdata/languages/Russian b/rtdata/languages/Russian
index 089381e47..6423d24bf 100644
--- a/rtdata/languages/Russian
+++ b/rtdata/languages/Russian
@@ -1680,6 +1680,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: -
!IPTCPANEL_TRANSREFERENCEHINT;Enter a number or identifier needed for workflow control or tracking.
!MAIN_MSG_TOOMANYOPENEDITORS;Too many open editors.\nPlease close an editor to continue.
!MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: Middle grey\nShortcut: 9
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!MONITOR_PROFILE_SYSTEM;System default
!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.
diff --git a/rtdata/languages/Serbian (Cyrilic Characters) b/rtdata/languages/Serbian (Cyrilic Characters)
index ddfb8b80d..de2d388bb 100644
--- a/rtdata/languages/Serbian (Cyrilic Characters)
+++ b/rtdata/languages/Serbian (Cyrilic Characters)
@@ -1608,6 +1608,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-w
!MAIN_TAB_INSPECT; Inspect
!MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: Middle grey\nShortcut: 9
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!MONITOR_PROFILE_SYSTEM;System default
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
diff --git a/rtdata/languages/Serbian (Latin Characters) b/rtdata/languages/Serbian (Latin Characters)
index 3af583ba8..b761327e3 100644
--- a/rtdata/languages/Serbian (Latin Characters)
+++ b/rtdata/languages/Serbian (Latin Characters)
@@ -1608,6 +1608,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-w
!MAIN_TAB_INSPECT; Inspect
!MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: Middle grey\nShortcut: 9
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!MONITOR_PROFILE_SYSTEM;System default
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
diff --git a/rtdata/languages/Slovak b/rtdata/languages/Slovak
index 3ba135a71..4faca2f23 100644
--- a/rtdata/languages/Slovak
+++ b/rtdata/languages/Slovak
@@ -1122,6 +1122,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!MAIN_TOOLTIP_PREVIEWG;Preview the Green channel.\nShortcut: g
!MAIN_TOOLTIP_PREVIEWL;Preview the Luminosity.\nShortcut: v\n\n0.299*R + 0.587*G + 0.114*B
!MAIN_TOOLTIP_PREVIEWR;Preview the Red channel.\nShortcut: r
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!MAIN_TOOLTIP_SHOWHIDELP1;Show/Hide the left panel.\nShortcut: l
!MAIN_TOOLTIP_SHOWHIDERP1;Show/Hide the right panel.\nShortcut: Alt-l
!MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
diff --git a/rtdata/languages/Suomi b/rtdata/languages/Suomi
index ce22a396b..2e9018107 100644
--- a/rtdata/languages/Suomi
+++ b/rtdata/languages/Suomi
@@ -1067,6 +1067,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!MAIN_TOOLTIP_PREVIEWG;Preview the Green channel.\nShortcut: g
!MAIN_TOOLTIP_PREVIEWL;Preview the Luminosity.\nShortcut: v\n\n0.299*R + 0.587*G + 0.114*B
!MAIN_TOOLTIP_PREVIEWR;Preview the Red channel.\nShortcut: r
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!MAIN_TOOLTIP_SHOWHIDELP1;Show/Hide the left panel.\nShortcut: l
!MAIN_TOOLTIP_SHOWHIDERP1;Show/Hide the right panel.\nShortcut: Alt-l
!MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
diff --git a/rtdata/languages/Swedish b/rtdata/languages/Swedish
index 819cf8340..e15f9bd7f 100644
--- a/rtdata/languages/Swedish
+++ b/rtdata/languages/Swedish
@@ -1993,6 +1993,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!MAIN_TAB_ADVANCED;Advanced
!MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-w
!MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: Middle grey\nShortcut: 9
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!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.
diff --git a/rtdata/languages/Turkish b/rtdata/languages/Turkish
index e57ab4c1e..5abd0fd2f 100644
--- a/rtdata/languages/Turkish
+++ b/rtdata/languages/Turkish
@@ -1066,6 +1066,7 @@ TP_WBALANCE_TEMPERATURE;Isı
!MAIN_TOOLTIP_PREVIEWG;Preview the Green channel.\nShortcut: g
!MAIN_TOOLTIP_PREVIEWL;Preview the Luminosity.\nShortcut: v\n\n0.299*R + 0.587*G + 0.114*B
!MAIN_TOOLTIP_PREVIEWR;Preview the Red channel.\nShortcut: r
+!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!MAIN_TOOLTIP_SHOWHIDELP1;Show/Hide the left panel.\nShortcut: l
!MAIN_TOOLTIP_SHOWHIDERP1;Show/Hide the right panel.\nShortcut: Alt-l
!MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
diff --git a/rtdata/languages/default b/rtdata/languages/default
index 641502cdd..fbb412d30 100644
--- a/rtdata/languages/default
+++ b/rtdata/languages/default
@@ -866,10 +866,10 @@ MAIN_TOOLTIP_INDCLIPPEDH;Clipped highlight indication.\nShortcut: <
MAIN_TOOLTIP_INDCLIPPEDS;Clipped shadow indication.\nShortcut: >
MAIN_TOOLTIP_PREVIEWB;Preview the Blue channel.\nShortcut: b
MAIN_TOOLTIP_PREVIEWFOCUSMASK;Preview the Focus Mask.\nShortcut: Shift-f\n\nMore accurate on images with shallow depth of field, low noise and at higher zoom levels.\n\nTo improve detection accuracy for noisy images evaluate at smaller zoom, about 10-30%.
-MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%
MAIN_TOOLTIP_PREVIEWG;Preview the Green channel.\nShortcut: g
MAIN_TOOLTIP_PREVIEWL;Preview the Luminosity.\nShortcut: v\n\n0.299*R + 0.587*G + 0.114*B
MAIN_TOOLTIP_PREVIEWR;Preview the Red channel.\nShortcut: r
+MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
MAIN_TOOLTIP_QINFO;Quick info on the image.\nShortcut: i
MAIN_TOOLTIP_SHOWHIDELP1;Show/Hide the left panel.\nShortcut: l
MAIN_TOOLTIP_SHOWHIDERP1;Show/Hide the right panel.\nShortcut: Alt-l
@@ -1808,13 +1808,15 @@ TP_RAWEXPOS_LINEAR;White-point correction
TP_RAWEXPOS_PRESER;Highlight preservation
TP_RAWEXPOS_RGB;Red, Green, Blue
TP_RAWEXPOS_TWOGREEN;Link greens
-TP_RAW_1PASSMEDIUM;1-Pass (Medium)
-TP_RAW_3PASSBEST;3-Pass (Best)
-TP_RAW_4PASS;4-Pass
+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_DCB;DCB
+TP_RAW_DCBVNG4;DCB+VNG4
TP_RAW_DCBENHANCE;DCB enhancement
TP_RAW_DCBITERATIONS;Number of DCB iterations
TP_RAW_DMETHOD;Method
@@ -1868,8 +1870,9 @@ TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for b
TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
TP_RAW_RCD;RCD
+TP_RAW_RCDVNG4;RCD+VNG4
TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
-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.
+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_RESIZE_APPLIESTO;Applies to:
diff --git a/rtdata/themes/RawTherapee-GTK3-20_.css b/rtdata/themes/RawTherapee-GTK3-20_.css
index cc533320b..3f25ce509 100644
--- a/rtdata/themes/RawTherapee-GTK3-20_.css
+++ b/rtdata/themes/RawTherapee-GTK3-20_.css
@@ -18,19 +18,24 @@
along with RawTherapee. If not, see .
*/
-/* Scrollbar stuck workaround */
-scrollbar:not(.overlay-indicator):hover {
- min-width: 1px;
-}
+/* text-shadow causes a serious performance degradation in rendering the UI,
+ * at least in comboboxes with many entries (i.e. Profiled Lens Correction).
+*/
* {
color: #AAAAAA;
+ text-shadow: none;
}
*:disabled {
color: #666666;
}
+/* Scrollbar stuck workaround */
+scrollbar:not(.overlay-indicator):hover {
+ min-width: 1px;
+}
+
.view:selected:not(check):not(radio) {
color: #262626;
background-color: #AAAAAA
diff --git a/rtdata/themes/TooWaBlue-GTK3-20_.css b/rtdata/themes/TooWaBlue-GTK3-20_.css
index a65fb2d3e..68e54c966 100644
--- a/rtdata/themes/TooWaBlue-GTK3-20_.css
+++ b/rtdata/themes/TooWaBlue-GTK3-20_.css
@@ -2,7 +2,7 @@
This file is part of RawTherapee.
Copyright (c) 2016-2017 TooWaBoo
- Version 2.62
+ Version 2.66
RawTherapee is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -164,7 +164,7 @@ filechooser frame {
}
#PlacesPaned frame {
- margin: -8px 0 0;
+ margin: -5px 0 0;
}
frame > border {
@@ -215,7 +215,7 @@ dialog frame > label {
frame > label {
margin: 0;
- padding: 0.5em 0;
+ padding: 0.41667em 0 0.33334em 0.08334em;
color: @headline-frame;
}
frame > checkbutton label{
@@ -245,19 +245,22 @@ textview:selected, treeview:selected {
}
#PlacesPaned > box:nth-child(1) treeview {
- padding: 0.08334em 0 0.08334em 0.5em;
+ padding: 0.08334em 0 0.08334em 0.416667em;
-gtk-icon-style: symbolic;
}
#HistoryPanel {
- margin-top: 0.5em;
+ margin-top: 0.25em;
+}
+#RightNotebook #HistoryPanel {
+ margin-top: 0.33334em;
}
#HistoryPanel > border {
margin-top: 1.75em;
}
#HistoryPanel > label {
- margin: 0 0 -1.33334em 0;
- padding: 0;
+ margin: 0 0 -1.5em 0;
+ padding: 0 0 0 0.08334em;
}
#Snapshots > border {
@@ -284,24 +287,24 @@ textview:selected, treeview:selected {
/*Corrects the space of the snapshot view to the paned separator*/
#Snapshots {
- margin-top: -0.33334em;
+ margin-top: 0.16667em;
}
/**/
/*** end ***************************************************************************************/
/*** Navigator *********************************************************************************/
-#Navigator .drawingarea {
- border-top: 0.41667em solid @bg-dark-grey;
- border-bottom: 0.25em solid @bg-dark-grey;
-}
#Navigator {
- background-color: @bg-dark-grey;
+ padding-top: 0.75em;
padding-bottom: 0.25em;
+ background-color: @bg-dark-grey;
}
#Navigator box label {
padding: 0.16667em 0;
}
+#Navigator > label:nth-child(2) {
+ margin-top: 0.5em;
+}
/*** end ***************************************************************************************/
@@ -356,9 +359,34 @@ filechooser list row:selected {
/*** Histogram *********************************************************************************/
#HistogramPanel {
+ min-height: 0;
margin: -2px 0;
border: none;
+ background-color: transparent;
}
+
+#HistogramPanel > :nth-child(2) {
+ border: none;
+ border-left: 0.08334em solid @bg-light-grey;
+ background-color: @bg-dark-grey;
+}
+
+#HistogramPanel > :nth-child(1) {
+ border: none;
+ background-color: transparent;
+}
+
+#EditorLeftPaned #HistogramPanel > :nth-child(1) {
+ border: none;
+ border-right: 0.08334em solid @bg-light-grey;
+ background-color: @bg-dark-grey;
+}
+
+#EditorLeftPaned #HistogramPanel > :nth-child(2) {
+ border: none;
+ background-color: transparent;
+}
+
#HistogramArea,
#HistogramRGBArea {
border: 0.08334em solid @bg-dark-grey;
@@ -367,25 +395,24 @@ filechooser list row:selected {
#fullButton,
#histButton {
- padding: 0.47em 0.41667em;
+ padding: 0;
margin: 0;
- border-color: @bg-light-grey;
- border-style: solid;
- border-width: 0 0 0 0.08334em;
+ border:none;
background-color: @bg-dark-grey;
background-image: none;
box-shadow: none;
- min-height: 0;
- min-width: 0;
+ min-height: 1.58334em;
+ min-width: 1.5em;
border-radius: 0;
}
-#fullButton {
- padding: 0.47em 0.41667em 0.58334em;
+
+#histButton:first-child {
+ margin-top: 1px;
}
-#EditorLeftPaned #fullButton,
-#EditorLeftPaned #histButton {
- border-width: 0 0.08334em 0 0;
+#histButton:last-child {
+ margin-bottom: 1px;
}
+
/*** end ***************************************************************************************/
/*** Separator *********************************************************************************/
@@ -413,6 +440,7 @@ popover separator:not(:only-child) {
paned.horizontal > separator {
background-color: transparent;
+ background-image: none;
min-width: 0.41667em;
border-left: 0.25em solid @bg-light-grey;
border-right: 0.25em solid @bg-light-grey;
@@ -426,9 +454,16 @@ paned.vertical > separator {
min-height: 0.5em;
border-top: 1px solid @bg-light-grey;
border-bottom: 1px solid @bg-light-grey;
- margin: 0.25em 0 0;
+ margin: 0.25em 0 -0.5em;
padding: 0.2em 0 0;
}
+/*Filmstrip*/
+#EditorRightPaned > paned.horizontal > paned.vertical > separator {
+ margin-bottom: 0;
+}
+#EditorRightPaned > paned.horizontal:nth-child(1) > paned.vertical:nth-child(1) > separator {
+ margin-bottom: -0.5em;
+}
dialog paned.horizontal > separator {
background-color: @bg-grey;
@@ -451,8 +486,8 @@ menu separator {
#IopsPanel separator,
#FileBrowser separator {
background-color: shade(@bg-light-grey,.75);
- margin-top: 0.33334em;
- margin-bottom: 0.33334em;
+ margin-top: 0.16667em;
+ margin-bottom: 0.16667em;
}
#MyExpander separator {
@@ -1388,6 +1423,9 @@ button.MiddleH {
margin-bottom: -2px;
padding-bottom: 0.41667em;
}
+#ProfilePanel > label {
+ margin-bottom: 0.08334em;
+}
#ProfilePanel combobox {
margin-left: 0.16667em;
}
diff --git a/rtengine/CMakeLists.txt b/rtengine/CMakeLists.txt
index 67b07c48c..e48fe4cbb 100644
--- a/rtengine/CMakeLists.txt
+++ b/rtengine/CMakeLists.txt
@@ -33,7 +33,6 @@ set(RTENGINESOURCEFILES
FTblockDN.cc
PF_correct_RT.cc
amaze_demosaic_RT.cc
- amaze_vng4_demosaic_RT.cc
cJSON.c
calc_distort.cc
camconst.cc
@@ -53,6 +52,7 @@ set(RTENGINESOURCEFILES
dfmanager.cc
diagonalcurves.cc
dirpyr_equalizer.cc
+ dual_demosaic_RT.cc
dynamicprofile.cc
expo_before_b.cc
fast_demo.cc
diff --git a/rtengine/amaze_vng4_demosaic_RT.cc b/rtengine/amaze_vng4_demosaic_RT.cc
deleted file mode 100644
index 08e142a4e..000000000
--- a/rtengine/amaze_vng4_demosaic_RT.cc
+++ /dev/null
@@ -1,93 +0,0 @@
-////////////////////////////////////////////////////////////////
-//
-// combined AMaZE + VNG4 demosaic algorithm
-//
-//
-// copyright (c) 2018 Ingo Weyrich
-//
-// blends AMaZE and VNG4 output based on contrast
-//
-//
-// amaze_vng4_demosaic_RT.cc is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see .
-//
-////////////////////////////////////////////////////////////////
-
-#include "rtengine.h"
-#include "rawimagesource.h"
-#include "rt_math.h"
-//#define BENCHMARK
-#include "StopWatch.h"
-#include "rt_algo.h"
-
-using namespace std;
-
-namespace rtengine
-{
-
-void RawImageSource::amaze_vng4_demosaic_RT(int winw, int winh, const array2D &rawData, array2D &red, array2D &green, array2D &blue, double contrast)
-{
- BENCHFUN
-
- if (contrast == 0.0) {
- // contrast == 0.0 means only AMaZE will be used
- amaze_demosaic_RT(0, 0, winw, winh, rawData, red, green, blue);
- return;
- }
-
- vng4_demosaic(rawData, red, green, blue);
-
- array2D redTmp(winw, winh);
- array2D greenTmp(winw, winh);
- array2D blueTmp(winw, winh);
- array2D L(winw, winh);
-
- amaze_demosaic_RT(0, 0, winw, winh, rawData, redTmp, greenTmp, blueTmp);
- const float xyz_rgb[3][3] = { // XYZ from RGB
- { 0.412453, 0.357580, 0.180423 },
- { 0.212671, 0.715160, 0.072169 },
- { 0.019334, 0.119193, 0.950227 }
- };
- #pragma omp parallel
- {
- #pragma omp for
- for(int i = 0; i < winh; ++i) {
- Color::RGB2L(redTmp[i], greenTmp[i], blueTmp[i], L[i], xyz_rgb, winw);
- }
- }
- // calculate contrast based blend factors to use vng4 in regions with low contrast
- JaggedArray blend(winw, winh);
- buildBlendMask(L, blend, winw, winh, contrast / 100.f);
-
- // the following is split into 3 loops intentionally to avoid cache conflicts on CPUs with only 4-way cache
- #pragma omp parallel for
- for(int i = 0; i < winh; ++i) {
- for(int j = 0; j < winw; ++j) {
- red[i][j] = intp(blend[i][j], redTmp[i][j], red[i][j]);
- }
- }
- #pragma omp parallel for
- for(int i = 0; i < winh; ++i) {
- for(int j = 0; j < winw; ++j) {
- green[i][j] = intp(blend[i][j], greenTmp[i][j], green[i][j]);
- }
- }
- #pragma omp parallel for
- for(int i = 0; i < winh; ++i) {
- for(int j = 0; j < winw; ++j) {
- blue[i][j] = intp(blend[i][j], blueTmp[i][j], blue[i][j]);
- }
- }
-
-}
-}
diff --git a/rtengine/dual_demosaic_RT.cc b/rtengine/dual_demosaic_RT.cc
new file mode 100644
index 000000000..3eb24e296
--- /dev/null
+++ b/rtengine/dual_demosaic_RT.cc
@@ -0,0 +1,144 @@
+////////////////////////////////////////////////////////////////
+//
+// combine demosaic algorithms
+//
+//
+// copyright (c) 2018 Ingo Weyrich
+//
+// blends output of two demosaicers based on contrast
+//
+//
+// dual_demosaic_RT.cc is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+//
+////////////////////////////////////////////////////////////////
+
+#include "jaggedarray.h"
+#include "rtengine.h"
+#include "rawimagesource.h"
+#include "rt_math.h"
+//#define BENCHMARK
+#include "StopWatch.h"
+#include "rt_algo.h"
+
+using namespace std;
+
+namespace rtengine
+{
+
+void RawImageSource::dual_demosaic_RT(bool isBayer, const RAWParams &raw, int winw, int winh, const array2D &rawData, array2D &red, array2D &green, array2D &blue, double &contrast, bool autoContrast, int autoX, int autoY)
+{
+ BENCHFUN
+
+ if (contrast == 0.0 && !autoContrast) {
+ // contrast == 0.0 means only first demosaicer will be used
+ if(isBayer) {
+ if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AMAZEVNG4) ) {
+ amaze_demosaic_RT(0, 0, winw, winh, rawData, red, green, blue);
+ } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::DCBVNG4) ) {
+ dcb_demosaic(raw.bayersensor.dcb_iterations, raw.bayersensor.dcb_enhance);
+ } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::RCDVNG4) ) {
+ rcd_demosaic();
+ }
+ } else {
+ if (raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::FOUR_PASS) ) {
+ xtrans_interpolate (3, true);
+ } else {
+ xtrans_interpolate (1, false);
+ }
+ }
+
+ return;
+ }
+
+ array2D redTmp(winw, winh);
+ array2D greenTmp(winw, winh);
+ array2D blueTmp(winw, winh);
+ array2D L(winw, winh);
+
+ if (isBayer) {
+ vng4_demosaic(rawData, redTmp, greenTmp, blueTmp);
+
+ if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AMAZEVNG4) ) {
+ amaze_demosaic_RT(0, 0, winw, winh, rawData, red, green, blue);
+ } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::DCBVNG4) ) {
+ dcb_demosaic(raw.bayersensor.dcb_iterations, raw.bayersensor.dcb_enhance);
+ } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::RCDVNG4) ) {
+ rcd_demosaic();
+ }
+ } else {
+ if (raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::FOUR_PASS) ) {
+ xtrans_interpolate (3, true);
+ } else {
+ xtrans_interpolate (1, false);
+ }
+ fast_xtrans_interpolate(rawData, redTmp, greenTmp, blueTmp);
+ }
+
+ const float xyz_rgb[3][3] = { // XYZ from RGB
+ { 0.412453, 0.357580, 0.180423 },
+ { 0.212671, 0.715160, 0.072169 },
+ { 0.019334, 0.119193, 0.950227 }
+ };
+
+ if (autoContrast && autoX >= 0 && autoY >= 0) {
+ constexpr int rectSize = 40;
+ const int autoWidth = min(rectSize, winw - autoX);
+ const int autoHeight = min(rectSize, winh - autoY);
+ if (std::min(autoWidth, autoHeight) > 20) {
+ array2D autoL(autoWidth, autoHeight);
+ for(int i = 0; i < autoHeight; ++i) {
+ Color::RGB2L(red[i + autoY] + autoX, green[i + autoY] + autoX, blue[i + autoY] + autoX, autoL[i], xyz_rgb, autoWidth);
+ }
+ // calculate contrast based blend factors to use vng4 in regions with low contrast
+ JaggedArray blend(autoWidth - 2, autoHeight - 2);
+ int c = calcContrastThreshold(autoL, blend, autoWidth, autoHeight);
+ if(c < 100) {
+ contrast = c; // alternative : contrast = c - 1
+ }
+ }
+ }
+
+ #pragma omp parallel
+ {
+ #pragma omp for
+ for(int i = 0; i < winh; ++i) {
+ Color::RGB2L(red[i], green[i], blue[i], L[i], xyz_rgb, winw);
+ }
+ }
+ // calculate contrast based blend factors to use vng4 in regions with low contrast
+ JaggedArray blend(winw, winh);
+ buildBlendMask(L, blend, winw, winh, contrast / 100.f);
+
+ // the following is split into 3 loops intentionally to avoid cache conflicts on CPUs with only 4-way cache
+ #pragma omp parallel for
+ for(int i = 0; i < winh; ++i) {
+ for(int j = 0; j < winw; ++j) {
+ red[i][j] = intp(blend[i][j], red[i][j], redTmp[i][j]);
+ }
+ }
+ #pragma omp parallel for
+ for(int i = 0; i < winh; ++i) {
+ for(int j = 0; j < winw; ++j) {
+ green[i][j] = intp(blend[i][j], green[i][j], greenTmp[i][j]);
+ }
+ }
+ #pragma omp parallel for
+ for(int i = 0; i < winh; ++i) {
+ for(int j = 0; j < winw; ++j) {
+ blue[i][j] = intp(blend[i][j], blue[i][j], blueTmp[i][j]);
+ }
+ }
+
+}
+}
diff --git a/rtengine/imagesource.h b/rtengine/imagesource.h
index c0565a4a3..c62a0ac96 100644
--- a/rtengine/imagesource.h
+++ b/rtengine/imagesource.h
@@ -68,7 +68,7 @@ public:
virtual ~ImageSource () {}
virtual int load (const Glib::ustring &fname) = 0;
virtual void preprocess (const RAWParams &raw, const LensProfParams &lensProf, const CoarseTransformParams& coarse, bool prepareDenoise = true) {};
- virtual void demosaic (const RAWParams &raw) {};
+ virtual void demosaic (const RAWParams &raw, bool autoContrast, double &contrastThreshold) {};
virtual void retinex (const ColorManagementParams& cmp, const RetinexParams &deh, const ToneCurveParams& Tc, LUTf & cdcurve, LUTf & mapcurve, const RetinextransmissionCurve & dehatransmissionCurve, const RetinexgaintransmissionCurve & dehagaintransmissionCurve, multi_array2D &conversionBuffer, bool dehacontlutili, bool mapcontlutili, bool useHsl, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax, LUTu &histLRETI) {};
virtual void retinexPrepareCurves (const RetinexParams &retinexParams, LUTf &cdcurve, LUTf &mapcurve, RetinextransmissionCurve &retinextransmissionCurve, RetinexgaintransmissionCurve &retinexgaintransmissionCurve, bool &retinexcontlutili, bool &mapcontlutili, bool &useHsl, LUTu & lhist16RETI, LUTu & histLRETI) {};
virtual void retinexPrepareBuffers (const ColorManagementParams& cmp, const RetinexParams &retinexParams, multi_array2D &conversionBuffer, LUTu &lhist16RETI) {};
diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc
index 8f22f664b..39ad66309 100644
--- a/rtengine/improccoordinator.cc
+++ b/rtengine/improccoordinator.cc
@@ -236,8 +236,10 @@ void ImProcCoordinator::updatePreviewImage(int todo, Crop* cropCall)
printf("Demosaic X-Trans image with using method: %s\n", rp.xtranssensor.method.c_str());
}
}
+ bool autoContrast = false;
+ double contrastThreshold = 0.f;
+ imgsrc->demosaic(rp, autoContrast, contrastThreshold); //enabled demosaic
- imgsrc->demosaic(rp); //enabled demosaic
// if a demosaic happened we should also call getimage later, so we need to set the M_INIT flag
todo |= M_INIT;
@@ -1258,7 +1260,8 @@ void ImProcCoordinator::saveInputICCReference(const Glib::ustring& fname, bool a
ppar.icm.inputProfile = "(none)";
Imagefloat* im = new Imagefloat(fW, fH);
imgsrc->preprocess(ppar.raw, ppar.lensProf, ppar.coarse);
- imgsrc->demosaic(ppar.raw);
+ double dummy = 0.0;
+ imgsrc->demosaic(ppar.raw, false, dummy);
ColorTemp currWB = ColorTemp(params.wb.temperature, params.wb.green, params.wb.equal, params.wb.method);
if (params.wb.method == "Camera") {
diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc
index 0d97bc068..d3e13b8b0 100644
--- a/rtengine/improcfun.cc
+++ b/rtengine/improcfun.cc
@@ -2255,15 +2255,15 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
float Balan = float (params->colorToning.balance);
- float chMixRR = float (params->chmixer.red[0]);
- float chMixRG = float (params->chmixer.red[1]);
- float chMixRB = float (params->chmixer.red[2]);
- float chMixGR = float (params->chmixer.green[0]);
- float chMixGG = float (params->chmixer.green[1]);
- float chMixGB = float (params->chmixer.green[2]);
- float chMixBR = float (params->chmixer.blue[0]);
- float chMixBG = float (params->chmixer.blue[1]);
- float chMixBB = float (params->chmixer.blue[2]);
+ float chMixRR = float (params->chmixer.red[0])/10.f;
+ float chMixRG = float (params->chmixer.red[1])/10.f;
+ float chMixRB = float (params->chmixer.red[2])/10.f;
+ float chMixGR = float (params->chmixer.green[0])/10.f;
+ float chMixGG = float (params->chmixer.green[1])/10.f;
+ float chMixGB = float (params->chmixer.green[2])/10.f;
+ float chMixBR = float (params->chmixer.blue[0])/10.f;
+ float chMixBG = float (params->chmixer.blue[1])/10.f;
+ float chMixBB = float (params->chmixer.blue[2])/10.f;
bool blackwhite = params->blackwhite.enabled;
bool complem = params->blackwhite.enabledcc;
diff --git a/rtengine/pixelshift.cc b/rtengine/pixelshift.cc
index 174c02065..cdf4f990a 100644
--- a/rtengine/pixelshift.cc
+++ b/rtengine/pixelshift.cc
@@ -295,7 +295,7 @@ void calcFrameBrightnessFactor(unsigned int frame, uint32_t datalen, LUTu *histo
using namespace std;
using namespace rtengine;
-void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RAWParams::BayerSensor &bayerParamsIn, unsigned int frame, const std::string &make, const std::string &model, float rawWpCorrection)
+void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RAWParams &rawParamsIn, unsigned int frame, const std::string &make, const std::string &model, float rawWpCorrection)
{
BENCHFUN
if(numFrames != 4) { // fallback for non pixelshift files
@@ -303,7 +303,7 @@ BENCHFUN
return;
}
- RAWParams::BayerSensor bayerParams = bayerParamsIn;
+ RAWParams::BayerSensor bayerParams = rawParamsIn.bayersensor;
bool motionDetection = true;
@@ -326,7 +326,7 @@ BENCHFUN
if (bayerParams.pixelShiftDemosaicMethod == bayerParams.getPSDemosaicMethodString(RAWParams::BayerSensor::PSDemosaicMethod::LMMSE)) {
lmmse_interpolate_omp(winw, winh, *(rawDataFrames[0]), red, green, blue, bayerParams.lmmse_iterations);
} else if (bayerParams.pixelShiftDemosaicMethod == bayerParams.getPSDemosaicMethodString(RAWParams::BayerSensor::PSDemosaicMethod::AMAZEVNG4)) {
- amaze_vng4_demosaic_RT (winw, winh, *(rawDataFrames[0]), red, green, blue, bayerParams.dualDemosaicContrast);
+ dual_demosaic_RT (true, rawParamsIn, winw, winh, *(rawDataFrames[0]), red, green, blue, bayerParams.dualDemosaicContrast);
} else {
amaze_demosaic_RT(winx, winy, winw, winh, *(rawDataFrames[0]), red, green, blue);
}
@@ -338,7 +338,7 @@ BENCHFUN
if (bayerParams.pixelShiftDemosaicMethod == bayerParams.getPSDemosaicMethodString(RAWParams::BayerSensor::PSDemosaicMethod::LMMSE)) {
lmmse_interpolate_omp(winw, winh, *(rawDataFrames[i + 1]), redTmp[i], greenTmp[i], blueTmp[i], bayerParams.lmmse_iterations);
} else if (bayerParams.pixelShiftDemosaicMethod == bayerParams.getPSDemosaicMethodString(RAWParams::BayerSensor::PSDemosaicMethod::AMAZEVNG4)) {
- amaze_vng4_demosaic_RT (winw, winh, *(rawDataFrames[i + 1]), redTmp[i], greenTmp[i], blueTmp[i], bayerParams.dualDemosaicContrast);
+ dual_demosaic_RT (true, rawParamsIn, winw, winh, *(rawDataFrames[i + 1]), redTmp[i], greenTmp[i], blueTmp[i], bayerParams.dualDemosaicContrast);
} else {
amaze_demosaic_RT(winx, winy, winw, winh, *(rawDataFrames[i + 1]), redTmp[i], greenTmp[i], blueTmp[i]);
}
@@ -365,7 +365,9 @@ BENCHFUN
if (bayerParams.pixelShiftDemosaicMethod == bayerParams.getPSDemosaicMethodString(RAWParams::BayerSensor::PSDemosaicMethod::LMMSE)) {
lmmse_interpolate_omp(winw, winh, rawData, red, green, blue, bayerParams.lmmse_iterations);
} else if (bayerParams.pixelShiftDemosaicMethod == bayerParams.getPSDemosaicMethodString(RAWParams::BayerSensor::PSDemosaicMethod::AMAZEVNG4)) {
- amaze_vng4_demosaic_RT (winw, winh, rawData, red, green, blue, bayerParams.dualDemosaicContrast);
+ RAWParams rawParamsTmp = rawParamsIn;
+ rawParamsTmp.bayersensor.method = RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AMAZEVNG4);
+ dual_demosaic_RT (true, rawParamsTmp, winw, winh, rawData, red, green, blue, bayerParams.dualDemosaicContrast);
} else {
amaze_demosaic_RT(winx, winy, winw, winh, rawData, red, green, blue);
}
diff --git a/rtengine/previewimage.cc b/rtengine/previewimage.cc
index 0ac99f9cd..f180469ad 100644
--- a/rtengine/previewimage.cc
+++ b/rtengine/previewimage.cc
@@ -113,7 +113,8 @@ PreviewImage::PreviewImage (const Glib::ustring &fname, const Glib::ustring &ext
params.raw.ca_autocorrect = false;
params.raw.xtranssensor.method = RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::FAST);
rawImage.preprocess(params.raw, params.lensProf, params.coarse);
- rawImage.demosaic(params.raw);
+ double contrastThresholdDummy = 0.0;
+ rawImage.demosaic(params.raw, false, contrastThresholdDummy);
Imagefloat image(fw, fh);
rawImage.getImage (wb, TR_NONE, &image, pp, params.toneCurve, params.raw);
rtengine::Image8 output(fw, fh);
diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc
index ac5ce9d3e..e011b8e0e 100644
--- a/rtengine/procparams.cc
+++ b/rtengine/procparams.cc
@@ -1792,19 +1792,19 @@ bool VignettingParams::operator !=(const VignettingParams& other) const
ChannelMixerParams::ChannelMixerParams() :
enabled(false),
red{
- 100,
+ 1000,
0,
0
},
green{
0,
- 100,
+ 1000,
0
},
blue{
0,
0,
- 100
+ 1000
}
{
}
@@ -2444,7 +2444,9 @@ const std::vector& RAWParams::BayerSensor::getMethodStrings()
"amaze",
"amazevng4",
"rcd",
+ "rcdvng4",
"dcb",
+ "dcbvng4",
"lmmse",
"igv",
"ahd",
@@ -2512,6 +2514,7 @@ const std::vector& RAWParams::XTransSensor::getMethodStrings()
static const std::vector method_strings {
"4-pass",
"3-pass (best)",
+ "2-pass",
"1-pass (medium)",
"fast",
"mono",
@@ -3537,6 +3540,13 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
memcpy(chmixer.green, gmix.data(), 3 * sizeof(int));
memcpy(chmixer.blue, bmix.data(), 3 * sizeof(int));
}
+ if (ppVersion < 338) {
+ for (int i = 0; i < 3; ++i) {
+ chmixer.red[i] *= 10;
+ chmixer.green[i] *= 10;
+ chmixer.blue[i] *= 10;
+ }
+ }
if (pedited) {
pedited->chmixer.red[0] = pedited->chmixer.red[1] = pedited->chmixer.red[2] = true;
diff --git a/rtengine/procparams.h b/rtengine/procparams.h
index 144639b54..77ee78dba 100644
--- a/rtengine/procparams.h
+++ b/rtengine/procparams.h
@@ -1225,7 +1225,9 @@ struct RAWParams {
AMAZE,
AMAZEVNG4,
RCD,
+ RCDVNG4,
DCB,
+ DCBVNG4,
LMMSE,
IGV,
AHD,
@@ -1308,6 +1310,7 @@ struct RAWParams {
enum class Method {
FOUR_PASS,
THREE_PASS,
+ TWO_PASS,
ONE_PASS,
FAST,
MONO,
diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc
index 0532b9e2d..a67787c3f 100644
--- a/rtengine/rawimagesource.cc
+++ b/rtengine/rawimagesource.cc
@@ -2071,7 +2071,7 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-void RawImageSource::demosaic(const RAWParams &raw)
+void RawImageSource::demosaic(const RAWParams &raw, bool autoContrast, double &contrastThreshold)
{
MyTime t1, t2;
t1.set();
@@ -2085,10 +2085,17 @@ void RawImageSource::demosaic(const RAWParams &raw)
ahd_demosaic ();
} else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AMAZE) ) {
amaze_demosaic_RT (0, 0, W, H, rawData, red, green, blue);
- } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AMAZEVNG4) ) {
- amaze_vng4_demosaic_RT (W, H, rawData, red, green, blue, raw.bayersensor.dualDemosaicContrast);
+ } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AMAZEVNG4)
+ || raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::DCBVNG4)
+ || raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::RCDVNG4)) {
+ if (!autoContrast) {
+ double threshold = raw.bayersensor.dualDemosaicContrast;
+ dual_demosaic_RT (true, raw, W, H, rawData, red, green, blue, threshold, false);
+ } else {
+ dual_demosaic_RT (true, raw, W, H, rawData, red, green, blue, contrastThreshold, true, 0, 0);
+ }
} else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::PIXELSHIFT) ) {
- pixelshift(0, 0, W, H, raw.bayersensor, currFrame, ri->get_maker(), ri->get_model(), raw.expos);
+ pixelshift(0, 0, W, H, raw, currFrame, ri->get_maker(), ri->get_model(), raw.expos);
} else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::DCB) ) {
dcb_demosaic(raw.bayersensor.dcb_iterations, raw.bayersensor.dcb_enhance);
} else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::EAHD)) {
@@ -2106,9 +2113,6 @@ void RawImageSource::demosaic(const RAWParams &raw)
} else {
nodemosaic(false);
}
-
- //if (raw.all_enhance) refinement_lassus();
-
} else if (ri->getSensorType() == ST_FUJI_XTRANS) {
if (raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::FAST) ) {
fast_xtrans_interpolate(rawData, red, green, blue);
@@ -2116,8 +2120,13 @@ void RawImageSource::demosaic(const RAWParams &raw)
xtrans_interpolate(1, false);
} else if (raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::THREE_PASS) ) {
xtrans_interpolate(3, true);
- } else if (raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::FOUR_PASS)) {
- xtrans_4pass_demosaic_RT(3, true, raw.xtranssensor.dualDemosaicContrast);
+ } else if (raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::FOUR_PASS) || raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::TWO_PASS)) {
+ if (!autoContrast) {
+ double threshold = raw.xtranssensor.dualDemosaicContrast;
+ dual_demosaic_RT (false, raw, W, H, rawData, red, green, blue, threshold, false);
+ } else {
+ dual_demosaic_RT (false, raw, W, H, rawData, red, green, blue, contrastThreshold, true, 0, 0);
+ }
} else if(raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::MONO) ) {
nodemosaic(true);
} else {
diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h
index b5418d0ec..51add0e97 100644
--- a/rtengine/rawimagesource.h
+++ b/rtengine/rawimagesource.h
@@ -121,7 +121,7 @@ public:
int load(const Glib::ustring &fname) { return load(fname, false); }
int load(const Glib::ustring &fname, bool firstFrameOnly);
void preprocess (const RAWParams &raw, const LensProfParams &lensProf, const CoarseTransformParams& coarse, bool prepareDenoise = true);
- void demosaic (const RAWParams &raw);
+ void demosaic (const RAWParams &raw, bool autoContrast, double &contrastThreshold);
void retinex (const ColorManagementParams& cmp, const RetinexParams &deh, const ToneCurveParams& Tc, LUTf & cdcurve, LUTf & mapcurve, const RetinextransmissionCurve & dehatransmissionCurve, const RetinexgaintransmissionCurve & dehagaintransmissionCurve, multi_array2D &conversionBuffer, bool dehacontlutili, bool mapcontlutili, bool useHsl, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax, LUTu &histLRETI);
void retinexPrepareCurves (const RetinexParams &retinexParams, LUTf &cdcurve, LUTf &mapcurve, RetinextransmissionCurve &retinextransmissionCurve, RetinexgaintransmissionCurve &retinexgaintransmissionCurve, bool &retinexcontlutili, bool &mapcontlutili, bool &useHsl, LUTu & lhist16RETI, LUTu & histLRETI);
void retinexPrepareBuffers (const ColorManagementParams& cmp, const RetinexParams &retinexParams, multi_array2D &conversionBuffer, LUTu &lhist16RETI);
@@ -268,7 +268,7 @@ protected:
void igv_interpolate(int winw, int winh);
void lmmse_interpolate_omp(int winw, int winh, array2D &rawData, array2D &red, array2D &green, array2D &blue, int iterations);
void amaze_demosaic_RT(int winx, int winy, int winw, int winh, const array2D &rawData, array2D &red, array2D &green, array2D &blue);//Emil's code for AMaZE
- void amaze_vng4_demosaic_RT(int winw, int winh, const array2D &rawData, array2D &red, array2D &green, array2D &blue, double contrast = 0.0);
+ void dual_demosaic_RT(bool isBayer, const RAWParams &raw, int winw, int winh, const array2D &rawData, array2D &red, array2D &green, array2D &blue, double &contrast, bool autoContrast = false, int autoX = -1, int autoY = -1);
void fast_demosaic();//Emil's code for fast demosaicing
void dcb_demosaic(int iterations, bool dcb_enhance);
void ahd_demosaic();
@@ -291,10 +291,9 @@ protected:
void dcb_color_full(float (*image)[3], int x0, int y0, float (*chroma)[2]);
void cielab (const float (*rgb)[3], float* l, float* a, float *b, const int width, const int height, const int labWidth, const float xyz_cam[3][3]);
void xtransborder_interpolate (int border);
- void xtrans_4pass_demosaic_RT (const int passes, const bool useCieLab, double contrast);
void xtrans_interpolate (const int passes, const bool useCieLab);
void fast_xtrans_interpolate (const array2D &rawData, array2D &red, array2D &green, array2D &blue);
- void pixelshift(int winx, int winy, int winw, int winh, const RAWParams::BayerSensor &bayerParams, unsigned int frame, const std::string &make, const std::string &model, float rawWpCorrection);
+ void pixelshift(int winx, int winy, int winw, int winh, const RAWParams &rawParams, unsigned int frame, const std::string &make, const std::string &model, float rawWpCorrection);
void hflip (Imagefloat* im);
void vflip (Imagefloat* im);
void getRawValues(int x, int y, int rotate, int &R, int &G, int &B);
diff --git a/rtengine/rt_algo.cc b/rtengine/rt_algo.cc
index cff145de8..c56a72a2c 100644
--- a/rtengine/rt_algo.cc
+++ b/rtengine/rt_algo.cc
@@ -1,6 +1,8 @@
/*
* This file is part of RawTherapee.
*
+ * Copyright (c) 2017-2018 Ingo Weyrich
+ *
* RawTherapee is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
@@ -20,7 +22,7 @@
#include
#include
#include
-
+#include
#ifdef _OPENMP
#include
#endif
@@ -188,7 +190,9 @@ void findMinMaxPercentile(const float* data, size_t size, float minPrct, float&
maxOut += minVal;
}
-void buildBlendMask(float** luminance, rtengine::JaggedArray &blend, int W, int H, float contrastThreshold, float amount) {
+void buildBlendMask(float** luminance, float **blend, int W, int H, float contrastThreshold, float amount) {
+
+ constexpr float scale = 0.0625f / 327.68f;
if(contrastThreshold == 0.f) {
for(int j = 0; j < H; ++j) {
@@ -197,64 +201,123 @@ void buildBlendMask(float** luminance, rtengine::JaggedArray &blend, int
}
}
} else {
- constexpr float scale = 0.0625f / 327.68f;
#ifdef _OPENMP
#pragma omp parallel
#endif
- {
+ {
+#ifdef __SSE2__
+ const vfloat contrastThresholdv = F2V(contrastThreshold);
+ const vfloat scalev = F2V(scale);
+ const vfloat amountv = F2V(amount);
+#endif
+#ifdef _OPENMP
+ #pragma omp for schedule(dynamic,16)
+#endif
+
+ for(int j = 2; j < H - 2; ++j) {
+ int i = 2;
+#ifdef __SSE2__
+ for(; i < W - 5; i += 4) {
+ vfloat contrastv = vsqrtf(SQRV(LVFU(luminance[j][i+1]) - LVFU(luminance[j][i-1])) + SQRV(LVFU(luminance[j+1][i]) - LVFU(luminance[j-1][i])) +
+ SQRV(LVFU(luminance[j][i+2]) - LVFU(luminance[j][i-2])) + SQRV(LVFU(luminance[j+2][i]) - LVFU(luminance[j-2][i]))) * scalev;
+
+ STVFU(blend[j][i], amountv * calcBlendFactor(contrastv, contrastThresholdv));
+ }
+#endif
+ for(; i < W - 2; ++i) {
+
+ float contrast = sqrtf(rtengine::SQR(luminance[j][i+1] - luminance[j][i-1]) + rtengine::SQR(luminance[j+1][i] - luminance[j-1][i]) +
+ rtengine::SQR(luminance[j][i+2] - luminance[j][i-2]) + rtengine::SQR(luminance[j+2][i] - luminance[j-2][i])) * scale;
+
+ blend[j][i] = amount * calcBlendFactor(contrast, contrastThreshold);
+ }
+ }
+
+#ifdef _OPENMP
+ #pragma omp single
+#endif
+ {
+ // upper border
+ for(int j = 0; j < 2; ++j) {
+ for(int i = 2; i < W - 2; ++i) {
+ blend[j][i] = blend[2][i];
+ }
+ }
+ // lower border
+ for(int j = H - 2; j < H; ++j) {
+ for(int i = 2; i < W - 2; ++i) {
+ blend[j][i] = blend[H-3][i];
+ }
+ }
+ for(int j = 0; j < H; ++j) {
+ // left border
+ blend[j][0] = blend[j][1] = blend[j][2];
+ // right border
+ blend[j][W - 2] = blend[j][W - 1] = blend[j][W - 3];
+ }
+ }
+
+ // blur blend mask to smooth transitions
+ gaussianBlur(blend, blend, W, H, 2.0);
+ }
+ }
+}
+
+int calcContrastThreshold(float** luminance, float **blend, int W, int H) {
+
+ constexpr float scale = 0.0625f / 327.68f;
+
+#ifdef __SSE2__
+ const vfloat scalev = F2V(scale);
+#endif
+
+ for(int j = 2; j < H - 2; ++j) {
+ int i = 2;
+#ifdef __SSE2__
+ for(; i < W - 5; i += 4) {
+ vfloat contrastv = vsqrtf(SQRV(LVFU(luminance[j][i+1]) - LVFU(luminance[j][i-1])) + SQRV(LVFU(luminance[j+1][i]) - LVFU(luminance[j-1][i])) +
+ SQRV(LVFU(luminance[j][i+2]) - LVFU(luminance[j][i-2])) + SQRV(LVFU(luminance[j+2][i]) - LVFU(luminance[j-2][i]))) * scalev;
+ STVFU(blend[j -2 ][i - 2], contrastv);
+ }
+#endif
+ for(; i < W - 2; ++i) {
+
+ float contrast = sqrtf(rtengine::SQR(luminance[j][i+1] - luminance[j][i-1]) + rtengine::SQR(luminance[j+1][i] - luminance[j-1][i]) +
+ rtengine::SQR(luminance[j][i+2] - luminance[j][i-2]) + rtengine::SQR(luminance[j+2][i] - luminance[j-2][i])) * scale;
+
+ blend[j -2][i- 2] = contrast;
+ }
+ }
+
+ const float limit = (W - 2) * (H - 2) / 100.f;
+
+ int c;
+ for (c = 1; c < 100; ++c) {
+ const float contrastThreshold = c / 100.f;
+ float sum = 0.f;
#ifdef __SSE2__
const vfloat contrastThresholdv = F2V(contrastThreshold);
- const vfloat scalev = F2V(scale);
- const vfloat amountv = F2V(amount);
-#endif
-#ifdef _OPENMP
- #pragma omp for schedule(dynamic,16)
+ vfloat sumv = ZEROV;
#endif
- for(int j = 2; j < H - 2; ++j) {
- int i = 2;
+ for(int j = 0; j < H - 4; ++j) {
+ int i = 0;
#ifdef __SSE2__
- for(; i < W - 5; i += 4) {
- vfloat contrastv = vsqrtf(SQRV(LVFU(luminance[j][i+1]) - LVFU(luminance[j][i-1])) + SQRV(LVFU(luminance[j+1][i]) - LVFU(luminance[j-1][i])) +
- SQRV(LVFU(luminance[j][i+2]) - LVFU(luminance[j][i-2])) + SQRV(LVFU(luminance[j+2][i]) - LVFU(luminance[j-2][i]))) * scalev;
-
- STVFU(blend[j][i], amountv * calcBlendFactor(contrastv, contrastThresholdv));
+ for(; i < W - 7; i += 4) {
+ sumv += calcBlendFactor(LVFU(blend[j][i]), contrastThresholdv);
}
#endif
- for(; i < W - 2; ++i) {
-
- float contrast = sqrtf(rtengine::SQR(luminance[j][i+1] - luminance[j][i-1]) + rtengine::SQR(luminance[j+1][i] - luminance[j-1][i]) +
- rtengine::SQR(luminance[j][i+2] - luminance[j][i-2]) + rtengine::SQR(luminance[j+2][i] - luminance[j-2][i])) * scale;
-
- blend[j][i] = amount * calcBlendFactor(contrast, contrastThreshold);
+ for(; i < W - 4; ++i) {
+ sum += calcBlendFactor(blend[j][i], contrastThreshold);
}
}
-#ifdef _OPENMP
- #pragma omp single
+#ifdef __SSE2__
+ sum += vhadd(sumv);
#endif
- {
- // upper border
- for(int j = 0; j < 2; ++j) {
- for(int i = 2; i < W - 2; ++i) {
- blend[j][i] = blend[2][i];
- }
- }
- // lower border
- for(int j = H - 2; j < H; ++j) {
- for(int i = 2; i < W - 2; ++i) {
- blend[j][i] = blend[H-3][i];
- }
- }
- for(int j = 0; j < H; ++j) {
- // left border
- blend[j][0] = blend[j][1] = blend[j][2];
- // right border
- blend[j][W - 2] = blend[j][W - 1] = blend[j][W - 3];
- }
+ if (sum <= limit) {
+ break;
}
- // blur blend mask to smooth transitions
- gaussianBlur(blend, blend, W, H, 2.0);
- }
}
+ return c;
}
}
diff --git a/rtengine/rt_algo.h b/rtengine/rt_algo.h
index 1aac26c3e..e20713b8f 100644
--- a/rtengine/rt_algo.h
+++ b/rtengine/rt_algo.h
@@ -1,7 +1,7 @@
/*
* This file is part of RawTherapee.
*
- * Copyright (c) 2017 Ingo Weyrich
+ * Copyright (c) 2017-2018 Ingo Weyrich
*
* RawTherapee is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -20,10 +20,10 @@
#pragma once
#include
-#include "jaggedarray.h"
namespace rtengine
{
void findMinMaxPercentile(const float* data, size_t size, float minPrct, float& minOut, float maxPrct, float& maxOut, bool multiThread = true);
-void buildBlendMask(float** luminance, rtengine::JaggedArray &blend, int W, int H, float contrastThreshold, float amount = 1.f);
+void buildBlendMask(float** luminance, float **blend, int W, int H, float contrastThreshold, float amount = 1.f);
+int calcContrastThreshold(float** luminance, float **blend, int W, int H);
}
diff --git a/rtengine/rtthumbnail.cc b/rtengine/rtthumbnail.cc
index 93ad41c1b..c0dc7f53f 100644
--- a/rtengine/rtthumbnail.cc
+++ b/rtengine/rtthumbnail.cc
@@ -289,7 +289,8 @@ Image8 *load_inspector_mode(const Glib::ustring &fname, RawMetaDataLocation &rml
neutral.icm.workingProfile = "RT_sRGB";
src.preprocess(neutral.raw, neutral.lensProf, neutral.coarse, false);
- src.demosaic(neutral.raw);
+ double thresholdDummy = 0.f;
+ src.demosaic(neutral.raw, false, thresholdDummy);
PreviewProps pp(0, 0, w, h, 1);
diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc
index a0875a667..80f58e71b 100644
--- a/rtengine/simpleprocess.cc
+++ b/rtengine/simpleprocess.cc
@@ -203,8 +203,8 @@ private:
if (pl) {
pl->setProgress (0.20);
}
-
- imgsrc->demosaic ( params.raw);
+ double contrastThresholdDummy;
+ imgsrc->demosaic (params.raw, false, contrastThresholdDummy);
if (pl) {
pl->setProgress (0.30);
diff --git a/rtengine/xtrans_demosaic.cc b/rtengine/xtrans_demosaic.cc
index 411388ee5..edf5e250b 100644
--- a/rtengine/xtrans_demosaic.cc
+++ b/rtengine/xtrans_demosaic.cc
@@ -1019,60 +1019,5 @@ void RawImageSource::fast_xtrans_interpolate (const array2D &rawData, arr
#undef fcol
#undef isgreen
-void RawImageSource::xtrans_4pass_demosaic_RT(int passes, bool useCieLab, double contrast)
-{
- BENCHFUN
-
- if (contrast == 0.0) {
- // contrast == 0.0 means only AMaZE will be used
- xtrans_interpolate (passes, useCieLab);
- return;
- }
-
- xtrans_interpolate (passes, useCieLab);
-
- array2D redTmp(W, H);
- array2D greenTmp(W, H);
- array2D blueTmp(W, H);
- array2D L(W, H);
-
- fast_xtrans_interpolate(rawData, redTmp, greenTmp, blueTmp);
- const float xyz_rgb[3][3] = { // XYZ from RGB
- { 0.412453, 0.357580, 0.180423 },
- { 0.212671, 0.715160, 0.072169 },
- { 0.019334, 0.119193, 0.950227 }
- };
- #pragma omp parallel
- {
- #pragma omp for
- for(int i = 0; i < H; ++i) {
- Color::RGB2L(red[i], green[i], blue[i], L[i], xyz_rgb, W);
- }
- }
- // calculate contrast based blend factors to use vng4 in regions with low contrast
- JaggedArray blend(W, H);
- buildBlendMask(L, blend, W, H, contrast / 100.f);
-
- // the following is split into 3 loops intentionally to avoid cache conflicts on CPUs with only 4-way cache
- #pragma omp parallel for
- for(int i = 0; i < H; ++i) {
- for(int j = 0; j < W; ++j) {
- red[i][j] = intp(blend[i][j], red[i][j], redTmp[i][j]);
- }
- }
- #pragma omp parallel for
- for(int i = 0; i < H; ++i) {
- for(int j = 0; j < W; ++j) {
- green[i][j] = intp(blend[i][j], green[i][j], greenTmp[i][j]);
- }
- }
- #pragma omp parallel for
- for(int i = 0; i < H; ++i) {
- for(int j = 0; j < W; ++j) {
- blue[i][j] = intp(blend[i][j], blue[i][j], blueTmp[i][j]);
- }
- }
-
}
-}
\ No newline at end of file
diff --git a/rtgui/bayerprocess.cc b/rtgui/bayerprocess.cc
index c6f04c053..c267b3777 100644
--- a/rtgui/bayerprocess.cc
+++ b/rtgui/bayerprocess.cc
@@ -331,9 +331,11 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params
}
if (!batchMode) {
- dcbOptions->set_visible(pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::DCB));
+ dcbOptions->set_visible(pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::DCB) || pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::DCBVNG4));
lmmseOptions->set_visible(pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::LMMSE));
- dualDemosaicOptions->set_visible(pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::AMAZEVNG4));
+ dualDemosaicOptions->set_visible(pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::AMAZEVNG4)
+ || pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::DCBVNG4)
+ || pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::RCDVNG4));
if (pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::PIXELSHIFT)) {
pixelShiftOptions->set_visible(pp->raw.bayersensor.pixelShiftMotionCorrectionMethod == RAWParams::BayerSensor::PSMotionCorrectionMethod::CUSTOM);
pixelShiftFrame->show();
@@ -518,7 +520,7 @@ void BayerProcess::methodChanged ()
const RAWParams::BayerSensor::Method currentMethod = RAWParams::BayerSensor::Method(currentSelection);
if (!batchMode) {
- if (currentMethod == procparams::RAWParams::BayerSensor::Method::DCB) {
+ if (currentMethod == procparams::RAWParams::BayerSensor::Method::DCB || currentMethod == procparams::RAWParams::BayerSensor::Method::DCBVNG4) {
dcbOptions->show();
} else {
dcbOptions->hide();
@@ -530,7 +532,7 @@ void BayerProcess::methodChanged ()
lmmseOptions->hide();
}
- if (currentMethod == procparams::RAWParams::BayerSensor::Method::AMAZEVNG4) {
+ if (currentMethod == procparams::RAWParams::BayerSensor::Method::AMAZEVNG4 || currentMethod == procparams::RAWParams::BayerSensor::Method::DCBVNG4 || currentMethod == procparams::RAWParams::BayerSensor::Method::RCDVNG4) {
dualDemosaicOptions->show();
} else {
dualDemosaicOptions->hide();
diff --git a/rtgui/chmixer.cc b/rtgui/chmixer.cc
index c6c098883..8c997f797 100644
--- a/rtgui/chmixer.cc
+++ b/rtgui/chmixer.cc
@@ -39,9 +39,10 @@ ChMixer::ChMixer (): FoldableToolPanel(this, "chmixer", M("TP_CHMIXER_LABEL"), f
rlabel->set_markup (Glib::ustring("\t") + M("TP_CHMIXER_RED") + Glib::ustring(":"));
rlabel->set_alignment(Gtk::ALIGN_START);
- red[0] = Gtk::manage (new Adjuster ("", -200, 200, 1, 100, imgIcon[0]));
- red[1] = Gtk::manage (new Adjuster ("", -200, 200, 1, 0, imgIcon[1]));
- red[2] = Gtk::manage (new Adjuster ("", -200, 200, 1, 0, imgIcon[2]));
+ constexpr double RANGE = 500.0;
+ red[0] = Gtk::manage (new Adjuster ("", -RANGE, RANGE, 0.1, 100, imgIcon[0]));
+ red[1] = Gtk::manage (new Adjuster ("", -RANGE, RANGE, 0.1, 0, imgIcon[1]));
+ red[2] = Gtk::manage (new Adjuster ("", -RANGE, RANGE, 0.1, 0, imgIcon[2]));
Gtk::HSeparator* rsep = Gtk::manage (new Gtk::HSeparator ());
@@ -58,9 +59,9 @@ ChMixer::ChMixer (): FoldableToolPanel(this, "chmixer", M("TP_CHMIXER_LABEL"), f
glabel->set_alignment(Gtk::ALIGN_START);
- green[0] = Gtk::manage (new Adjuster ("", -200, 200, 1, 0, imgIcon[3]));
- green[1] = Gtk::manage (new Adjuster ("", -200, 200, 1, 100, imgIcon[4]));
- green[2] = Gtk::manage (new Adjuster ("", -200, 200, 1, 0, imgIcon[5]));
+ green[0] = Gtk::manage (new Adjuster ("", -RANGE, RANGE, 0.1, 0, imgIcon[3]));
+ green[1] = Gtk::manage (new Adjuster ("", -RANGE, RANGE, 0.1, 100, imgIcon[4]));
+ green[2] = Gtk::manage (new Adjuster ("", -RANGE, RANGE, 0.1, 0, imgIcon[5]));
Gtk::HSeparator* gsep = Gtk::manage (new Gtk::HSeparator ());
@@ -75,9 +76,9 @@ ChMixer::ChMixer (): FoldableToolPanel(this, "chmixer", M("TP_CHMIXER_LABEL"), f
Gtk::Label* blabel = Gtk::manage (new Gtk::Label ());
blabel->set_markup (Glib::ustring("\t") + M("TP_CHMIXER_BLUE") + Glib::ustring(":"));
blabel->set_alignment(Gtk::ALIGN_START);
- blue[0] = Gtk::manage (new Adjuster ("", -200, 200, 1, 0, imgIcon[6]));
- blue[1] = Gtk::manage (new Adjuster ("", -200, 200, 1, 0, imgIcon[7]));
- blue[2] = Gtk::manage (new Adjuster ("", -200, 200, 1, 100, imgIcon[8]));
+ blue[0] = Gtk::manage (new Adjuster ("", -RANGE, RANGE, 0.1, 0, imgIcon[6]));
+ blue[1] = Gtk::manage (new Adjuster ("", -RANGE, RANGE, 0.1, 0, imgIcon[7]));
+ blue[2] = Gtk::manage (new Adjuster ("", -RANGE, RANGE, 0.1, 100, imgIcon[8]));
for (int i = 0; i < 3; i++) {
red[i]->setAdjusterListener (this);
@@ -111,9 +112,9 @@ void ChMixer::read (const ProcParams* pp, const ParamsEdited* pedited)
}
for (int i = 0; i < 3; i++) {
- red[i]->setValue (pp->chmixer.red[i]);
- green[i]->setValue (pp->chmixer.green[i]);
- blue[i]->setValue (pp->chmixer.blue[i]);
+ red[i]->setValue (pp->chmixer.red[i] / 10.0);
+ green[i]->setValue (pp->chmixer.green[i] / 10.0);
+ blue[i]->setValue (pp->chmixer.blue[i] / 10.0);
}
enableListener ();
@@ -123,9 +124,9 @@ void ChMixer::write (ProcParams* pp, ParamsEdited* pedited)
{
for (int i = 0; i < 3; i++) {
- pp->chmixer.red[i] = (int) red[i]->getValue ();
- pp->chmixer.green[i] = (int) green[i]->getValue ();
- pp->chmixer.blue[i] = (int) blue[i]->getValue ();
+ pp->chmixer.red[i] = red[i]->getValue() * 10;
+ pp->chmixer.green[i] = green[i]->getValue() * 10;
+ pp->chmixer.blue[i] = blue[i]->getValue() * 10;
}
pp->chmixer.enabled = getEnabled();
@@ -143,9 +144,9 @@ void ChMixer::setDefaults (const ProcParams* defParams, const ParamsEdited* pedi
{
for (int i = 0; i < 3; i++) {
- red[i]->setDefault (defParams->chmixer.red[i]);
- green[i]->setDefault (defParams->chmixer.green[i]);
- blue[i]->setDefault (defParams->chmixer.blue[i]);
+ red[i]->setDefault (defParams->chmixer.red[i] / 10.f);
+ green[i]->setDefault (defParams->chmixer.green[i] / 10.f);
+ blue[i]->setDefault (defParams->chmixer.blue[i] / 10.f);
}
if (pedited)
@@ -167,9 +168,9 @@ void ChMixer::adjusterChanged (Adjuster* a, double newval)
if (listener && getEnabled()) {
Glib::ustring descr = Glib::ustring::compose ("R=%1,%2,%3\nG=%4,%5,%6\nB=%7,%8,%9",
- (int)red[0]->getValue(), (int)red[1]->getValue(), (int)red[2]->getValue(),
- (int)green[0]->getValue(), (int)green[1]->getValue(), (int)green[2]->getValue(),
- (int)blue[0]->getValue(), (int)blue[1]->getValue(), (int)blue[2]->getValue());
+ red[0]->getValue(), red[1]->getValue(), red[2]->getValue(),
+ green[0]->getValue(), green[1]->getValue(), green[2]->getValue(),
+ blue[0]->getValue(), blue[1]->getValue(), blue[2]->getValue());
listener->panelChanged (EvChMixer, descr);
}
}
@@ -215,8 +216,14 @@ void ChMixer::trimValues (rtengine::procparams::ProcParams* pp)
{
for (int i = 0; i < 3; i++) {
- red[i]->trimValue(pp->chmixer.red[i]);
- green[i]->trimValue(pp->chmixer.green[i]);
- blue[i]->trimValue(pp->chmixer.blue[i]);
+ double r = pp->chmixer.red[i] / 10.0;
+ double g = pp->chmixer.green[i] / 10.0;
+ double b = pp->chmixer.blue[i] / 10.0;
+ red[i]->trimValue(r);
+ green[i]->trimValue(g);
+ blue[i]->trimValue(b);
+ pp->chmixer.red[i] = r * 10;
+ pp->chmixer.green[i] = g * 10;
+ pp->chmixer.blue[i] = b * 10;
}
}
diff --git a/rtgui/dirbrowser.cc b/rtgui/dirbrowser.cc
index 23d1259ba..bf4a31f49 100644
--- a/rtgui/dirbrowser.cc
+++ b/rtgui/dirbrowser.cc
@@ -48,14 +48,26 @@ std::vector listSubDirs (const Glib::RefPtr& dir, bool
auto enumerator = dir->enumerate_children ("standard::name,standard::type,standard::is-hidden");
- while (auto file = enumerator->next_file ()) {
- if (file->get_file_type () != Gio::FILE_TYPE_DIRECTORY) {
- continue;
+ while (true) {
+ try {
+ auto file = enumerator->next_file ();
+ if (!file) {
+ break;
+ }
+ if (file->get_file_type () != Gio::FILE_TYPE_DIRECTORY) {
+ continue;
+ }
+ if (!addHidden && file->is_hidden ()) {
+ continue;
+ }
+ subDirs.push_back (file->get_name ());
+ } catch (const Glib::Exception& exception) {
+
+ if (options.rtSettings.verbose) {
+ std::cerr << exception.what () << std::endl;
+ }
+
}
- if (!addHidden && file->is_hidden ()) {
- continue;
- }
- subDirs.push_back (file->get_name ());
}
} catch (const Glib::Exception& exception) {
diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc
index 76bf2794a..a04725f79 100644
--- a/rtgui/editorpanel.cc
+++ b/rtgui/editorpanel.cc
@@ -1023,6 +1023,7 @@ void EditorPanel::open (Thumbnail* tmb, rtengine::InitialImage* isrc)
ipc->setPreviewScale (10); // Important
tpc->initImage (ipc, tmb->getType() == FT_Raw);
ipc->setHistogramListener (this);
+ iareapanel->imageArea->indClippedPanel->silentlyDisableSharpMask();
// iarea->fitZoom (); // tell to the editorPanel that the next image has to be fitted to the screen
iareapanel->imageArea->setPreviewHandler (previewHandler);
diff --git a/rtgui/filecatalog.cc b/rtgui/filecatalog.cc
index f07abf6fb..3d375b044 100644
--- a/rtgui/filecatalog.cc
+++ b/rtgui/filecatalog.cc
@@ -564,21 +564,31 @@ std::vector FileCatalog::getFileList ()
auto enumerator = dir->enumerate_children ("standard::name");
- while (auto file = enumerator->next_file ()) {
+ while (true) {
+ try {
+ auto file = enumerator->next_file ();
+ if (!file) {
+ break;
+ }
- const Glib::ustring fname = file->get_name ();
+ const Glib::ustring fname = file->get_name ();
- auto lastdot = fname.find_last_of ('.');
- if (lastdot >= fname.length () - 1) {
- continue;
+ auto lastdot = fname.find_last_of ('.');
+ if (lastdot >= fname.length () - 1) {
+ continue;
+ }
+
+ const auto fext = fname.substr (lastdot + 1).lowercase ();
+ if (extensions.count (fext) == 0) {
+ continue;
+ }
+
+ names.emplace_back (Glib::build_filename (selectedDirectory, fname));
+ } catch (Glib::Exception& exception) {
+ if (options.rtSettings.verbose) {
+ std::cerr << exception.what () << std::endl;
+ }
}
-
- const auto fext = fname.substr (lastdot + 1).lowercase ();
- if (extensions.count (fext) == 0) {
- continue;
- }
-
- names.emplace_back (Glib::build_filename (selectedDirectory, fname));
}
} catch (Glib::Exception& exception) {
diff --git a/rtgui/indclippedpanel.cc b/rtgui/indclippedpanel.cc
index deb9a9c40..f065359dd 100644
--- a/rtgui/indclippedpanel.cc
+++ b/rtgui/indclippedpanel.cc
@@ -98,6 +98,14 @@ void IndicateClippedPanel::toggleFocusMask ()
previewFocusMask->set_active(!previewFocusMask->get_active());
}
+void IndicateClippedPanel::silentlyDisableSharpMask ()
+{
+ ConnectionBlocker conBlocker(connSharpMask);
+ previewSharpMask->set_active(false);
+ previewSharpMask->set_image(*iSoff);
+
+}
+
void IndicateClippedPanel::toggleSharpMask ()
{
previewSharpMask->set_active(!previewSharpMask->get_active());
diff --git a/rtgui/indclippedpanel.h b/rtgui/indclippedpanel.h
index b4225a9cb..95e870e95 100644
--- a/rtgui/indclippedpanel.h
+++ b/rtgui/indclippedpanel.h
@@ -40,6 +40,7 @@ public:
void buttonToggled(Gtk::ToggleButton* tb);
void toggleClipped(bool highlights); // inverts a toggle programmatically
void toggleFocusMask();
+ void silentlyDisableSharpMask(); // toggle the button off without throwing a toggle event
void toggleSharpMask();
sigc::connection connFocusMask, connSharpMask, connClippedS, connClippedH;
diff --git a/rtgui/ppversion.h b/rtgui/ppversion.h
index cb56163f5..9505cd006 100644
--- a/rtgui/ppversion.h
+++ b/rtgui/ppversion.h
@@ -6,8 +6,10 @@
/*
Log of version changes
- 338 2018-06-14
+ 339 2018-06-25
[ICM] enhanced custom output profile
+ 338 2018-06-15
+ increased precision for the channel mixer
337 2018-06-13
new scales for the LabGrid color toning parameters
336 2018-06-01
diff --git a/rtgui/xtransprocess.cc b/rtgui/xtransprocess.cc
index 1b2b4a40d..27b5810c4 100644
--- a/rtgui/xtransprocess.cc
+++ b/rtgui/xtransprocess.cc
@@ -118,7 +118,8 @@ void XTransProcess::read(const rtengine::procparams::ProcParams* pp, const Param
dualDemosaicContrast->setValue (pp->raw.xtranssensor.dualDemosaicContrast);
ccSteps->setValue (pp->raw.xtranssensor.ccSteps);
if (!batchMode) {
- dualDemosaicOptions->set_visible(pp->raw.xtranssensor.method == procparams::RAWParams::XTransSensor::getMethodString(procparams::RAWParams::XTransSensor::Method::FOUR_PASS));
+ dualDemosaicOptions->set_visible(pp->raw.xtranssensor.method == procparams::RAWParams::XTransSensor::getMethodString(procparams::RAWParams::XTransSensor::Method::FOUR_PASS)
+ || pp->raw.xtranssensor.method == procparams::RAWParams::XTransSensor::getMethodString(procparams::RAWParams::XTransSensor::Method::TWO_PASS));
}
methodconn.block (false);
@@ -192,7 +193,7 @@ void XTransProcess::methodChanged ()
oldSelection = curSelection;
if (!batchMode) {
- if (currentMethod == procparams::RAWParams::XTransSensor::Method::FOUR_PASS) {
+ if (currentMethod == procparams::RAWParams::XTransSensor::Method::FOUR_PASS || currentMethod == procparams::RAWParams::XTransSensor::Method::TWO_PASS) {
dualDemosaicOptions->show();
} else {
dualDemosaicOptions->hide();