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