Testing merge of master 95f0d6 into gtk3 9cf0e5
This commit is contained in:
parent
9cf0e5c40f
commit
e4f6319d1b
@ -1381,7 +1381,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: <b>-</b>
|
||||
!PREFERENCES_FLUOF2;Fluorescent F2
|
||||
!PREFERENCES_FLUOF7;Fluorescent F7
|
||||
!PREFERENCES_FLUOF11;Fluorescent F11
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Editor's panel and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
|
||||
!PREFERENCES_GREY;Output device's Yb luminance (%)
|
||||
!PREFERENCES_GREY05;Yb=05 CIE L#30
|
||||
@ -1863,7 +1863,6 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: <b>-</b>
|
||||
!TP_RGBCURVES_LUMAMODE_TOOLTIP;<b>Luminosity mode</b> allows to vary the contribution of R, G and B channels to the luminosity of the image, without altering image color.
|
||||
!TP_SAVEDIALOG_OK_TIP;Shortcut: <b>Ctrl-Enter</b>
|
||||
!TP_SHADOWSHLIGHTS_SHARPMASK;Sharp mask
|
||||
!TP_SHARPENING_TOOLTIP;Expect a slightly different effect when using with CIECAM02. If difference is observed, adjust to taste.
|
||||
!TP_WAVELET_1;Level 1
|
||||
!TP_WAVELET_2;Level 2
|
||||
!TP_WAVELET_3;Level 3
|
||||
|
@ -1319,7 +1319,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: <b>-</b>
|
||||
!PREFERENCES_FLUOF2;Fluorescent F2
|
||||
!PREFERENCES_FLUOF7;Fluorescent F7
|
||||
!PREFERENCES_FLUOF11;Fluorescent F11
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Editor's panel and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
|
||||
!PREFERENCES_GREY;Output device's Yb luminance (%)
|
||||
!PREFERENCES_GREY05;Yb=05 CIE L#30
|
||||
@ -1829,7 +1829,6 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: <b>-</b>
|
||||
!TP_RETINEX_VIEW_TRAN;Transmission - Auto
|
||||
!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
|
||||
!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
|
||||
!TP_SHARPENING_TOOLTIP;Expect a slightly different effect when using with CIECAM02. If difference is observed, adjust to taste.
|
||||
!TP_SHARPENMICRO_LABEL;Microcontrast
|
||||
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
|
||||
!TP_SHARPENMICRO_UNIFORMITY;Uniformity
|
||||
|
@ -1125,7 +1125,7 @@ TP_WBALANCE_TEMPERATURE;色溫
|
||||
!PREFERENCES_FLUOF2;Fluorescent F2
|
||||
!PREFERENCES_FLUOF7;Fluorescent F7
|
||||
!PREFERENCES_FLUOF11;Fluorescent F11
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Editor's panel and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
|
||||
!PREFERENCES_GREY;Output device's Yb luminance (%)
|
||||
!PREFERENCES_GREY05;Yb=05 CIE L#30
|
||||
@ -1804,7 +1804,6 @@ TP_WBALANCE_TEMPERATURE;色溫
|
||||
!TP_SHARPENEDGE_LABEL;Edges
|
||||
!TP_SHARPENEDGE_PASSES;Iterations
|
||||
!TP_SHARPENEDGE_THREE;Luminance only
|
||||
!TP_SHARPENING_TOOLTIP;Expect a slightly different effect when using with CIECAM02. If difference is observed, adjust to taste.
|
||||
!TP_SHARPENMICRO_AMOUNT;Quantity
|
||||
!TP_SHARPENMICRO_LABEL;Microcontrast
|
||||
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
|
||||
|
@ -1123,7 +1123,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
|
||||
!PREFERENCES_FLUOF2;Fluorescent F2
|
||||
!PREFERENCES_FLUOF7;Fluorescent F7
|
||||
!PREFERENCES_FLUOF11;Fluorescent F11
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Editor's panel and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
|
||||
!PREFERENCES_GREY;Output device's Yb luminance (%)
|
||||
!PREFERENCES_GREY05;Yb=05 CIE L#30
|
||||
@ -1803,7 +1803,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur
|
||||
!TP_SHARPENEDGE_LABEL;Edges
|
||||
!TP_SHARPENEDGE_PASSES;Iterations
|
||||
!TP_SHARPENEDGE_THREE;Luminance only
|
||||
!TP_SHARPENING_TOOLTIP;Expect a slightly different effect when using with CIECAM02. If difference is observed, adjust to taste.
|
||||
!TP_SHARPENMICRO_AMOUNT;Quantity
|
||||
!TP_SHARPENMICRO_LABEL;Microcontrast
|
||||
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
|
||||
|
@ -1027,7 +1027,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
|
||||
!PREFERENCES_FLUOF11;Fluorescent F11
|
||||
!PREFERENCES_FORIMAGE;For non-raw photos
|
||||
!PREFERENCES_FORRAW;For raw photos
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Editor's panel and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
|
||||
!PREFERENCES_GIMPPATH;GIMP installation directory
|
||||
!PREFERENCES_GREY;Output device's Yb luminance (%)
|
||||
@ -1794,7 +1794,6 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
|
||||
!TP_SHARPENING_RLD_DAMPING;Damping
|
||||
!TP_SHARPENING_RLD_ITERATIONS;Iterations
|
||||
!TP_SHARPENING_THRESHOLD;Threshold
|
||||
!TP_SHARPENING_TOOLTIP;Expect a slightly different effect when using with CIECAM02. If difference is observed, adjust to taste.
|
||||
!TP_SHARPENING_USM;Unsharp Mask
|
||||
!TP_SHARPENMICRO_AMOUNT;Quantity
|
||||
!TP_SHARPENMICRO_LABEL;Microcontrast
|
||||
|
@ -958,7 +958,7 @@
|
||||
!PREFERENCES_FLUOF11;Fluorescent F11
|
||||
!PREFERENCES_FORIMAGE;For non-raw photos
|
||||
!PREFERENCES_FORRAW;For raw photos
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Editor's panel and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
|
||||
!PREFERENCES_GIMPPATH;GIMP installation directory
|
||||
!PREFERENCES_GREY;Output device's Yb luminance (%)
|
||||
@ -1785,7 +1785,6 @@
|
||||
!TP_SHARPENING_RLD_DAMPING;Damping
|
||||
!TP_SHARPENING_RLD_ITERATIONS;Iterations
|
||||
!TP_SHARPENING_THRESHOLD;Threshold
|
||||
!TP_SHARPENING_TOOLTIP;Expect a slightly different effect when using with CIECAM02. If difference is observed, adjust to taste.
|
||||
!TP_SHARPENING_USM;Unsharp Mask
|
||||
!TP_SHARPENMICRO_AMOUNT;Quantity
|
||||
!TP_SHARPENMICRO_LABEL;Microcontrast
|
||||
|
@ -1736,7 +1736,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: <b>-</b>
|
||||
!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4
|
||||
!PREFERENCES_DAUB_TOOLTIP;The Noise Reduction and Wavelet Levels tools use a Debauchies mother wavelet. If you choose D6 instead of D4 you increase the number of orthogonal Daubechies coefficients and probably increase quality of small-scale levels. There is no memory or processing time difference between the two.
|
||||
!PREFERENCES_EXPAUT;Expert
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Editor's panel and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
|
||||
!PREFERENCES_GREYSC;Scene Yb luminance (%)
|
||||
!PREFERENCES_GREYSC18;Yb=18 CIE L#50
|
||||
|
@ -1123,7 +1123,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
|
||||
!PREFERENCES_FLUOF2;Fluorescent F2
|
||||
!PREFERENCES_FLUOF7;Fluorescent F7
|
||||
!PREFERENCES_FLUOF11;Fluorescent F11
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Editor's panel and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
|
||||
!PREFERENCES_GREY;Output device's Yb luminance (%)
|
||||
!PREFERENCES_GREY05;Yb=05 CIE L#30
|
||||
@ -1803,7 +1803,6 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
|
||||
!TP_SHARPENEDGE_LABEL;Edges
|
||||
!TP_SHARPENEDGE_PASSES;Iterations
|
||||
!TP_SHARPENEDGE_THREE;Luminance only
|
||||
!TP_SHARPENING_TOOLTIP;Expect a slightly different effect when using with CIECAM02. If difference is observed, adjust to taste.
|
||||
!TP_SHARPENMICRO_AMOUNT;Quantity
|
||||
!TP_SHARPENMICRO_LABEL;Microcontrast
|
||||
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
|
||||
|
@ -1122,7 +1122,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
|
||||
!PREFERENCES_FLUOF2;Fluorescent F2
|
||||
!PREFERENCES_FLUOF7;Fluorescent F7
|
||||
!PREFERENCES_FLUOF11;Fluorescent F11
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Editor's panel and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
|
||||
!PREFERENCES_GREY;Output device's Yb luminance (%)
|
||||
!PREFERENCES_GREY05;Yb=05 CIE L#30
|
||||
@ -1802,7 +1802,6 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
|
||||
!TP_SHARPENEDGE_LABEL;Edges
|
||||
!TP_SHARPENEDGE_PASSES;Iterations
|
||||
!TP_SHARPENEDGE_THREE;Luminance only
|
||||
!TP_SHARPENING_TOOLTIP;Expect a slightly different effect when using with CIECAM02. If difference is observed, adjust to taste.
|
||||
!TP_SHARPENMICRO_AMOUNT;Quantity
|
||||
!TP_SHARPENMICRO_LABEL;Microcontrast
|
||||
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
|
||||
|
@ -1123,7 +1123,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום
|
||||
!PREFERENCES_FLUOF2;Fluorescent F2
|
||||
!PREFERENCES_FLUOF7;Fluorescent F7
|
||||
!PREFERENCES_FLUOF11;Fluorescent F11
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Editor's panel and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
|
||||
!PREFERENCES_GREY;Output device's Yb luminance (%)
|
||||
!PREFERENCES_GREY05;Yb=05 CIE L#30
|
||||
@ -1803,7 +1803,6 @@ TP_WBALANCE_TEMPERATURE;מידת חום
|
||||
!TP_SHARPENEDGE_LABEL;Edges
|
||||
!TP_SHARPENEDGE_PASSES;Iterations
|
||||
!TP_SHARPENEDGE_THREE;Luminance only
|
||||
!TP_SHARPENING_TOOLTIP;Expect a slightly different effect when using with CIECAM02. If difference is observed, adjust to taste.
|
||||
!TP_SHARPENMICRO_AMOUNT;Quantity
|
||||
!TP_SHARPENMICRO_LABEL;Microcontrast
|
||||
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
|
||||
|
@ -1607,7 +1607,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: <b>-</b>
|
||||
!PREFERENCES_DAUB_TOOLTIP;The Noise Reduction and Wavelet Levels tools use a Debauchies mother wavelet. If you choose D6 instead of D4 you increase the number of orthogonal Daubechies coefficients and probably increase quality of small-scale levels. There is no memory or processing time difference between the two.
|
||||
!PREFERENCES_EXPAUT;Expert
|
||||
!PREFERENCES_FILMSIMULATION;Film Simulation
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Editor's panel and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
|
||||
!PREFERENCES_GREYSC;Scene Yb luminance (%)
|
||||
!PREFERENCES_GREYSC18;Yb=18 CIE L#50
|
||||
|
@ -1123,7 +1123,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
|
||||
!PREFERENCES_FLUOF2;Fluorescent F2
|
||||
!PREFERENCES_FLUOF7;Fluorescent F7
|
||||
!PREFERENCES_FLUOF11;Fluorescent F11
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Editor's panel and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
|
||||
!PREFERENCES_GREY;Output device's Yb luminance (%)
|
||||
!PREFERENCES_GREY05;Yb=05 CIE L#30
|
||||
@ -1803,7 +1803,6 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
|
||||
!TP_SHARPENEDGE_LABEL;Edges
|
||||
!TP_SHARPENEDGE_PASSES;Iterations
|
||||
!TP_SHARPENEDGE_THREE;Luminance only
|
||||
!TP_SHARPENING_TOOLTIP;Expect a slightly different effect when using with CIECAM02. If difference is observed, adjust to taste.
|
||||
!TP_SHARPENMICRO_AMOUNT;Quantity
|
||||
!TP_SHARPENMICRO_LABEL;Microcontrast
|
||||
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
|
||||
|
@ -1317,7 +1317,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés <b>-</b>
|
||||
!PREFERENCES_FLUOF2;Fluorescent F2
|
||||
!PREFERENCES_FLUOF7;Fluorescent F7
|
||||
!PREFERENCES_FLUOF11;Fluorescent F11
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Editor's panel and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
|
||||
!PREFERENCES_GREY;Output device's Yb luminance (%)
|
||||
!PREFERENCES_GREY05;Yb=05 CIE L#30
|
||||
@ -1856,7 +1856,6 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés <b>-</b>
|
||||
!TP_RGBCURVES_LUMAMODE_TOOLTIP;<b>Luminosity mode</b> allows to vary the contribution of R, G and B channels to the luminosity of the image, without altering image color.
|
||||
!TP_SAVEDIALOG_OK_TIP;Shortcut: <b>Ctrl-Enter</b>
|
||||
!TP_SHADOWSHLIGHTS_SHARPMASK;Sharp mask
|
||||
!TP_SHARPENING_TOOLTIP;Expect a slightly different effect when using with CIECAM02. If difference is observed, adjust to taste.
|
||||
!TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH
|
||||
!TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Skin-tones
|
||||
!TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE1;Red/Purple
|
||||
|
@ -1122,7 +1122,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
|
||||
!PREFERENCES_FLUOF2;Fluorescent F2
|
||||
!PREFERENCES_FLUOF7;Fluorescent F7
|
||||
!PREFERENCES_FLUOF11;Fluorescent F11
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Editor's panel and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
|
||||
!PREFERENCES_GREY;Output device's Yb luminance (%)
|
||||
!PREFERENCES_GREY05;Yb=05 CIE L#30
|
||||
@ -1802,7 +1802,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur
|
||||
!TP_SHARPENEDGE_LABEL;Edges
|
||||
!TP_SHARPENEDGE_PASSES;Iterations
|
||||
!TP_SHARPENEDGE_THREE;Luminance only
|
||||
!TP_SHARPENING_TOOLTIP;Expect a slightly different effect when using with CIECAM02. If difference is observed, adjust to taste.
|
||||
!TP_SHARPENMICRO_AMOUNT;Quantity
|
||||
!TP_SHARPENMICRO_LABEL;Microcontrast
|
||||
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
|
||||
|
@ -1684,7 +1684,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: <b>-</b>
|
||||
!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4
|
||||
!PREFERENCES_DAUB_TOOLTIP;The Noise Reduction and Wavelet Levels tools use a Debauchies mother wavelet. If you choose D6 instead of D4 you increase the number of orthogonal Daubechies coefficients and probably increase quality of small-scale levels. There is no memory or processing time difference between the two.
|
||||
!PREFERENCES_EXPAUT;Expert
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Editor's panel and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
|
||||
!PREFERENCES_GREYSC;Scene Yb luminance (%)
|
||||
!PREFERENCES_GREYSC18;Yb=18 CIE L#50
|
||||
|
@ -1684,7 +1684,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: <b>-</b>
|
||||
!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4
|
||||
!PREFERENCES_DAUB_TOOLTIP;The Noise Reduction and Wavelet Levels tools use a Debauchies mother wavelet. If you choose D6 instead of D4 you increase the number of orthogonal Daubechies coefficients and probably increase quality of small-scale levels. There is no memory or processing time difference between the two.
|
||||
!PREFERENCES_EXPAUT;Expert
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Editor's panel and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
|
||||
!PREFERENCES_GREYSC;Scene Yb luminance (%)
|
||||
!PREFERENCES_GREYSC18;Yb=18 CIE L#50
|
||||
|
@ -1123,7 +1123,7 @@ TP_WBALANCE_TEMPERATURE;Temperatura
|
||||
!PREFERENCES_FLUOF2;Fluorescent F2
|
||||
!PREFERENCES_FLUOF7;Fluorescent F7
|
||||
!PREFERENCES_FLUOF11;Fluorescent F11
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Editor's panel and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
|
||||
!PREFERENCES_GREY;Output device's Yb luminance (%)
|
||||
!PREFERENCES_GREY05;Yb=05 CIE L#30
|
||||
@ -1803,7 +1803,6 @@ TP_WBALANCE_TEMPERATURE;Temperatura
|
||||
!TP_SHARPENEDGE_LABEL;Edges
|
||||
!TP_SHARPENEDGE_PASSES;Iterations
|
||||
!TP_SHARPENEDGE_THREE;Luminance only
|
||||
!TP_SHARPENING_TOOLTIP;Expect a slightly different effect when using with CIECAM02. If difference is observed, adjust to taste.
|
||||
!TP_SHARPENMICRO_AMOUNT;Quantity
|
||||
!TP_SHARPENMICRO_LABEL;Microcontrast
|
||||
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
|
||||
|
@ -1561,7 +1561,7 @@ ZOOMPANEL_ZOOMOUT;Удалить <b>-</b>
|
||||
!PREFERENCES_DAUB_TOOLTIP;The Noise Reduction and Wavelet Levels tools use a Debauchies mother wavelet. If you choose D6 instead of D4 you increase the number of orthogonal Daubechies coefficients and probably increase quality of small-scale levels. There is no memory or processing time difference between the two.
|
||||
!PREFERENCES_EXPAUT;Expert
|
||||
!PREFERENCES_FILMSIMULATION;Film Simulation
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Editor's panel and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
|
||||
!PREFERENCES_GREYSC;Scene Yb luminance (%)
|
||||
!PREFERENCES_GREYSC18;Yb=18 CIE L#50
|
||||
|
@ -1727,7 +1727,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике <b>-</b>
|
||||
!PREFERENCES_DAUB_TOOLTIP;The Noise Reduction and Wavelet Levels tools use a Debauchies mother wavelet. If you choose D6 instead of D4 you increase the number of orthogonal Daubechies coefficients and probably increase quality of small-scale levels. There is no memory or processing time difference between the two.
|
||||
!PREFERENCES_EXPAUT;Expert
|
||||
!PREFERENCES_FILMSIMULATION;Film Simulation
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Editor's panel and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
|
||||
!PREFERENCES_GREYSC;Scene Yb luminance (%)
|
||||
!PREFERENCES_GREYSC18;Yb=18 CIE L#50
|
||||
|
@ -1727,7 +1727,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike <b>-</b>
|
||||
!PREFERENCES_DAUB_TOOLTIP;The Noise Reduction and Wavelet Levels tools use a Debauchies mother wavelet. If you choose D6 instead of D4 you increase the number of orthogonal Daubechies coefficients and probably increase quality of small-scale levels. There is no memory or processing time difference between the two.
|
||||
!PREFERENCES_EXPAUT;Expert
|
||||
!PREFERENCES_FILMSIMULATION;Film Simulation
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Editor's panel and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
|
||||
!PREFERENCES_GREYSC;Scene Yb luminance (%)
|
||||
!PREFERENCES_GREYSC18;Yb=18 CIE L#50
|
||||
|
@ -1173,7 +1173,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť <b>-</b>
|
||||
!PREFERENCES_FLUOF2;Fluorescent F2
|
||||
!PREFERENCES_FLUOF7;Fluorescent F7
|
||||
!PREFERENCES_FLUOF11;Fluorescent F11
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Editor's panel and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
|
||||
!PREFERENCES_GREY;Output device's Yb luminance (%)
|
||||
!PREFERENCES_GREY05;Yb=05 CIE L#30
|
||||
@ -1811,7 +1811,6 @@ ZOOMPANEL_ZOOMOUT;Oddialiť <b>-</b>
|
||||
!TP_SHARPENEDGE_LABEL;Edges
|
||||
!TP_SHARPENEDGE_PASSES;Iterations
|
||||
!TP_SHARPENEDGE_THREE;Luminance only
|
||||
!TP_SHARPENING_TOOLTIP;Expect a slightly different effect when using with CIECAM02. If difference is observed, adjust to taste.
|
||||
!TP_SHARPENMICRO_AMOUNT;Quantity
|
||||
!TP_SHARPENMICRO_LABEL;Microcontrast
|
||||
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
|
||||
|
@ -1124,7 +1124,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
|
||||
!PREFERENCES_FLUOF2;Fluorescent F2
|
||||
!PREFERENCES_FLUOF7;Fluorescent F7
|
||||
!PREFERENCES_FLUOF11;Fluorescent F11
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Editor's panel and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
|
||||
!PREFERENCES_GREY;Output device's Yb luminance (%)
|
||||
!PREFERENCES_GREY05;Yb=05 CIE L#30
|
||||
@ -1803,7 +1803,6 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
|
||||
!TP_SHARPENEDGE_LABEL;Edges
|
||||
!TP_SHARPENEDGE_PASSES;Iterations
|
||||
!TP_SHARPENEDGE_THREE;Luminance only
|
||||
!TP_SHARPENING_TOOLTIP;Expect a slightly different effect when using with CIECAM02. If difference is observed, adjust to taste.
|
||||
!TP_SHARPENMICRO_AMOUNT;Quantity
|
||||
!TP_SHARPENMICRO_LABEL;Microcontrast
|
||||
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
|
||||
|
@ -1123,7 +1123,7 @@ TP_WBALANCE_TEMPERATURE;Isı
|
||||
!PREFERENCES_FLUOF2;Fluorescent F2
|
||||
!PREFERENCES_FLUOF7;Fluorescent F7
|
||||
!PREFERENCES_FLUOF11;Fluorescent F11
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Editor's panel and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
|
||||
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
|
||||
!PREFERENCES_GREY;Output device's Yb luminance (%)
|
||||
!PREFERENCES_GREY05;Yb=05 CIE L#30
|
||||
@ -1802,7 +1802,6 @@ TP_WBALANCE_TEMPERATURE;Isı
|
||||
!TP_SHARPENEDGE_LABEL;Edges
|
||||
!TP_SHARPENEDGE_PASSES;Iterations
|
||||
!TP_SHARPENEDGE_THREE;Luminance only
|
||||
!TP_SHARPENING_TOOLTIP;Expect a slightly different effect when using with CIECAM02. If difference is observed, adjust to taste.
|
||||
!TP_SHARPENMICRO_AMOUNT;Quantity
|
||||
!TP_SHARPENMICRO_LABEL;Microcontrast
|
||||
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
|
||||
|
@ -14,7 +14,7 @@ set (RTENGINESOURCEFILES colortemp.cc curves.cc flatcurves.cc diagonalcurves.cc
|
||||
stdimagesource.cc myfile.cc iccjpeg.cc improccoordinator.cc pipettebuffer.cc coord.cc
|
||||
processingjob.cc rtthumbnail.cc utils.cc labimage.cc slicer.cc cieimage.cc
|
||||
iplab2rgb.cc ipsharpen.cc iptransform.cc ipresize.cc ipvibrance.cc
|
||||
imagedimensions.cc jpeg_memsrc.cc jdatasrc.cc iimage.cc
|
||||
imagedimensions.cc jpeg_ijg/jpeg_memsrc.cc jdatasrc.cc iimage.cc
|
||||
EdgePreservingDecomposition.cc cplx_wavelet_dec.cc FTblockDN.cc
|
||||
PF_correct_RT.cc previewimage.cc ipwavelet.cc
|
||||
dirpyr_equalizer.cc
|
||||
|
375
rtengine/jpeg_ijg/README
Normal file
375
rtengine/jpeg_ijg/README
Normal file
@ -0,0 +1,375 @@
|
||||
The Independent JPEG Group's JPEG software
|
||||
==========================================
|
||||
|
||||
README for release 9b of 17-Jan-2016
|
||||
====================================
|
||||
|
||||
This distribution contains the ninth public release of the Independent JPEG
|
||||
Group's free JPEG software. You are welcome to redistribute this software and
|
||||
to use it for any purpose, subject to the conditions under LEGAL ISSUES, below.
|
||||
|
||||
This software is the work of Tom Lane, Guido Vollbeding, Philip Gladstone,
|
||||
Bill Allombert, Jim Boucher, Lee Crocker, Bob Friesenhahn, Ben Jackson,
|
||||
Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi, Ge' Weijers,
|
||||
and other members of the Independent JPEG Group.
|
||||
|
||||
IJG is not affiliated with the ISO/IEC JTC1/SC29/WG1 standards committee
|
||||
(previously known as JPEG, together with ITU-T SG16).
|
||||
|
||||
|
||||
DOCUMENTATION ROADMAP
|
||||
=====================
|
||||
|
||||
This file contains the following sections:
|
||||
|
||||
OVERVIEW General description of JPEG and the IJG software.
|
||||
LEGAL ISSUES Copyright, lack of warranty, terms of distribution.
|
||||
REFERENCES Where to learn more about JPEG.
|
||||
ARCHIVE LOCATIONS Where to find newer versions of this software.
|
||||
ACKNOWLEDGMENTS Special thanks.
|
||||
FILE FORMAT WARS Software *not* to get.
|
||||
TO DO Plans for future IJG releases.
|
||||
|
||||
Other documentation files in the distribution are:
|
||||
|
||||
User documentation:
|
||||
install.txt How to configure and install the IJG software.
|
||||
usage.txt Usage instructions for cjpeg, djpeg, jpegtran,
|
||||
rdjpgcom, and wrjpgcom.
|
||||
*.1 Unix-style man pages for programs (same info as usage.txt).
|
||||
wizard.txt Advanced usage instructions for JPEG wizards only.
|
||||
change.log Version-to-version change highlights.
|
||||
Programmer and internal documentation:
|
||||
libjpeg.txt How to use the JPEG library in your own programs.
|
||||
example.c Sample code for calling the JPEG library.
|
||||
structure.txt Overview of the JPEG library's internal structure.
|
||||
filelist.txt Road map of IJG files.
|
||||
coderules.txt Coding style rules --- please read if you contribute code.
|
||||
|
||||
Please read at least the files install.txt and usage.txt. Some information
|
||||
can also be found in the JPEG FAQ (Frequently Asked Questions) article. See
|
||||
ARCHIVE LOCATIONS below to find out where to obtain the FAQ article.
|
||||
|
||||
If you want to understand how the JPEG code works, we suggest reading one or
|
||||
more of the REFERENCES, then looking at the documentation files (in roughly
|
||||
the order listed) before diving into the code.
|
||||
|
||||
|
||||
OVERVIEW
|
||||
========
|
||||
|
||||
This package contains C software to implement JPEG image encoding, decoding,
|
||||
and transcoding. JPEG (pronounced "jay-peg") is a standardized compression
|
||||
method for full-color and grayscale images.
|
||||
|
||||
This software implements JPEG baseline, extended-sequential, and progressive
|
||||
compression processes. Provision is made for supporting all variants of these
|
||||
processes, although some uncommon parameter settings aren't implemented yet.
|
||||
We have made no provision for supporting the hierarchical or lossless
|
||||
processes defined in the standard.
|
||||
|
||||
We provide a set of library routines for reading and writing JPEG image files,
|
||||
plus two sample applications "cjpeg" and "djpeg", which use the library to
|
||||
perform conversion between JPEG and some other popular image file formats.
|
||||
The library is intended to be reused in other applications.
|
||||
|
||||
In order to support file conversion and viewing software, we have included
|
||||
considerable functionality beyond the bare JPEG coding/decoding capability;
|
||||
for example, the color quantization modules are not strictly part of JPEG
|
||||
decoding, but they are essential for output to colormapped file formats or
|
||||
colormapped displays. These extra functions can be compiled out of the
|
||||
library if not required for a particular application.
|
||||
|
||||
We have also included "jpegtran", a utility for lossless transcoding between
|
||||
different JPEG processes, and "rdjpgcom" and "wrjpgcom", two simple
|
||||
applications for inserting and extracting textual comments in JFIF files.
|
||||
|
||||
The emphasis in designing this software has been on achieving portability and
|
||||
flexibility, while also making it fast enough to be useful. In particular,
|
||||
the software is not intended to be read as a tutorial on JPEG. (See the
|
||||
REFERENCES section for introductory material.) Rather, it is intended to
|
||||
be reliable, portable, industrial-strength code. We do not claim to have
|
||||
achieved that goal in every aspect of the software, but we strive for it.
|
||||
|
||||
We welcome the use of this software as a component of commercial products.
|
||||
No royalty is required, but we do ask for an acknowledgement in product
|
||||
documentation, as described under LEGAL ISSUES.
|
||||
|
||||
|
||||
LEGAL ISSUES
|
||||
============
|
||||
|
||||
In plain English:
|
||||
|
||||
1. We don't promise that this software works. (But if you find any bugs,
|
||||
please let us know!)
|
||||
2. You can use this software for whatever you want. You don't have to pay us.
|
||||
3. You may not pretend that you wrote this software. If you use it in a
|
||||
program, you must acknowledge somewhere in your documentation that
|
||||
you've used the IJG code.
|
||||
|
||||
In legalese:
|
||||
|
||||
The authors make NO WARRANTY or representation, either express or implied,
|
||||
with respect to this software, its quality, accuracy, merchantability, or
|
||||
fitness for a particular purpose. This software is provided "AS IS", and you,
|
||||
its user, assume the entire risk as to its quality and accuracy.
|
||||
|
||||
This software is copyright (C) 1991-2016, Thomas G. Lane, Guido Vollbeding.
|
||||
All Rights Reserved except as specified below.
|
||||
|
||||
Permission is hereby granted to use, copy, modify, and distribute this
|
||||
software (or portions thereof) for any purpose, without fee, subject to these
|
||||
conditions:
|
||||
(1) If any part of the source code for this software is distributed, then this
|
||||
README file must be included, with this copyright and no-warranty notice
|
||||
unaltered; and any additions, deletions, or changes to the original files
|
||||
must be clearly indicated in accompanying documentation.
|
||||
(2) If only executable code is distributed, then the accompanying
|
||||
documentation must state that "this software is based in part on the work of
|
||||
the Independent JPEG Group".
|
||||
(3) Permission for use of this software is granted only if the user accepts
|
||||
full responsibility for any undesirable consequences; the authors accept
|
||||
NO LIABILITY for damages of any kind.
|
||||
|
||||
These conditions apply to any software derived from or based on the IJG code,
|
||||
not just to the unmodified library. If you use our work, you ought to
|
||||
acknowledge us.
|
||||
|
||||
Permission is NOT granted for the use of any IJG author's name or company name
|
||||
in advertising or publicity relating to this software or products derived from
|
||||
it. This software may be referred to only as "the Independent JPEG Group's
|
||||
software".
|
||||
|
||||
We specifically permit and encourage the use of this software as the basis of
|
||||
commercial products, provided that all warranty or liability claims are
|
||||
assumed by the product vendor.
|
||||
|
||||
|
||||
The Unix configuration script "configure" was produced with GNU Autoconf.
|
||||
It is copyright by the Free Software Foundation but is freely distributable.
|
||||
The same holds for its supporting scripts (config.guess, config.sub,
|
||||
ltmain.sh). Another support script, install-sh, is copyright by X Consortium
|
||||
but is also freely distributable.
|
||||
|
||||
The IJG distribution formerly included code to read and write GIF files.
|
||||
To avoid entanglement with the Unisys LZW patent (now expired), GIF reading
|
||||
support has been removed altogether, and the GIF writer has been simplified
|
||||
to produce "uncompressed GIFs". This technique does not use the LZW
|
||||
algorithm; the resulting GIF files are larger than usual, but are readable
|
||||
by all standard GIF decoders.
|
||||
|
||||
|
||||
REFERENCES
|
||||
==========
|
||||
|
||||
We recommend reading one or more of these references before trying to
|
||||
understand the innards of the JPEG software.
|
||||
|
||||
The best short technical introduction to the JPEG compression algorithm is
|
||||
Wallace, Gregory K. "The JPEG Still Picture Compression Standard",
|
||||
Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
|
||||
(Adjacent articles in that issue discuss MPEG motion picture compression,
|
||||
applications of JPEG, and related topics.) If you don't have the CACM issue
|
||||
handy, a PDF file containing a revised version of Wallace's article is
|
||||
available at http://www.ijg.org/files/Wallace.JPEG.pdf. The file (actually
|
||||
a preprint for an article that appeared in IEEE Trans. Consumer Electronics)
|
||||
omits the sample images that appeared in CACM, but it includes corrections
|
||||
and some added material. Note: the Wallace article is copyright ACM and IEEE,
|
||||
and it may not be used for commercial purposes.
|
||||
|
||||
A somewhat less technical, more leisurely introduction to JPEG can be found in
|
||||
"The Data Compression Book" by Mark Nelson and Jean-loup Gailly, published by
|
||||
M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1. This book provides
|
||||
good explanations and example C code for a multitude of compression methods
|
||||
including JPEG. It is an excellent source if you are comfortable reading C
|
||||
code but don't know much about data compression in general. The book's JPEG
|
||||
sample code is far from industrial-strength, but when you are ready to look
|
||||
at a full implementation, you've got one here...
|
||||
|
||||
The best currently available description of JPEG is the textbook "JPEG Still
|
||||
Image Data Compression Standard" by William B. Pennebaker and Joan L.
|
||||
Mitchell, published by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1.
|
||||
Price US$59.95, 638 pp. The book includes the complete text of the ISO JPEG
|
||||
standards (DIS 10918-1 and draft DIS 10918-2).
|
||||
Although this is by far the most detailed and comprehensive exposition of
|
||||
JPEG publicly available, we point out that it is still missing an explanation
|
||||
of the most essential properties and algorithms of the underlying DCT
|
||||
technology.
|
||||
If you think that you know about DCT-based JPEG after reading this book,
|
||||
then you are in delusion. The real fundamentals and corresponding potential
|
||||
of DCT-based JPEG are not publicly known so far, and that is the reason for
|
||||
all the mistaken developments taking place in the image coding domain.
|
||||
|
||||
The original JPEG standard is divided into two parts, Part 1 being the actual
|
||||
specification, while Part 2 covers compliance testing methods. Part 1 is
|
||||
titled "Digital Compression and Coding of Continuous-tone Still Images,
|
||||
Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS
|
||||
10918-1, ITU-T T.81. Part 2 is titled "Digital Compression and Coding of
|
||||
Continuous-tone Still Images, Part 2: Compliance testing" and has document
|
||||
numbers ISO/IEC IS 10918-2, ITU-T T.83.
|
||||
IJG JPEG 8 introduced an implementation of the JPEG SmartScale extension
|
||||
which is specified in two documents: A contributed document at ITU and ISO
|
||||
with title "ITU-T JPEG-Plus Proposal for Extending ITU-T T.81 for Advanced
|
||||
Image Coding", April 2006, Geneva, Switzerland. The latest version of this
|
||||
document is Revision 3. And a contributed document ISO/IEC JTC1/SC29/WG1 N
|
||||
5799 with title "Evolution of JPEG", June/July 2011, Berlin, Germany.
|
||||
IJG JPEG 9 introduces a reversible color transform for improved lossless
|
||||
compression which is described in a contributed document ISO/IEC JTC1/SC29/
|
||||
WG1 N 6080 with title "JPEG 9 Lossless Coding", June/July 2012, Paris,
|
||||
France.
|
||||
|
||||
The JPEG standard does not specify all details of an interchangeable file
|
||||
format. For the omitted details we follow the "JFIF" conventions, version 2.
|
||||
JFIF version 1 has been adopted as Recommendation ITU-T T.871 (05/2011) :
|
||||
Information technology - Digital compression and coding of continuous-tone
|
||||
still images: JPEG File Interchange Format (JFIF). It is available as a
|
||||
free download in PDF file format from http://www.itu.int/rec/T-REC-T.871.
|
||||
A PDF file of the older JFIF document is available at
|
||||
http://www.w3.org/Graphics/JPEG/jfif3.pdf.
|
||||
|
||||
The TIFF 6.0 file format specification can be obtained by FTP from
|
||||
ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz. The JPEG incorporation scheme
|
||||
found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems.
|
||||
IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6).
|
||||
Instead, we recommend the JPEG design proposed by TIFF Technical Note #2
|
||||
(Compression tag 7). Copies of this Note can be obtained from
|
||||
http://www.ijg.org/files/. It is expected that the next revision
|
||||
of the TIFF spec will replace the 6.0 JPEG design with the Note's design.
|
||||
Although IJG's own code does not support TIFF/JPEG, the free libtiff library
|
||||
uses our library to implement TIFF/JPEG per the Note.
|
||||
|
||||
|
||||
ARCHIVE LOCATIONS
|
||||
=================
|
||||
|
||||
The "official" archive site for this software is www.ijg.org.
|
||||
The most recent released version can always be found there in
|
||||
directory "files". This particular version will be archived as
|
||||
http://www.ijg.org/files/jpegsrc.v9b.tar.gz, and in Windows-compatible
|
||||
"zip" archive format as http://www.ijg.org/files/jpegsr9b.zip.
|
||||
|
||||
The JPEG FAQ (Frequently Asked Questions) article is a source of some
|
||||
general information about JPEG.
|
||||
It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq/
|
||||
and other news.answers archive sites, including the official news.answers
|
||||
archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/.
|
||||
If you don't have Web or FTP access, send e-mail to mail-server@rtfm.mit.edu
|
||||
with body
|
||||
send usenet/news.answers/jpeg-faq/part1
|
||||
send usenet/news.answers/jpeg-faq/part2
|
||||
|
||||
|
||||
ACKNOWLEDGMENTS
|
||||
===============
|
||||
|
||||
Thank to Juergen Bruder for providing me with a copy of the common DCT
|
||||
algorithm article, only to find out that I had come to the same result
|
||||
in a more direct and comprehensible way with a more generative approach.
|
||||
|
||||
Thank to Istvan Sebestyen and Joan L. Mitchell for inviting me to the
|
||||
ITU JPEG (Study Group 16) meeting in Geneva, Switzerland.
|
||||
|
||||
Thank to Thomas Wiegand and Gary Sullivan for inviting me to the
|
||||
Joint Video Team (MPEG & ITU) meeting in Geneva, Switzerland.
|
||||
|
||||
Thank to Thomas Richter and Daniel Lee for inviting me to the
|
||||
ISO/IEC JTC1/SC29/WG1 (previously known as JPEG, together with ITU-T SG16)
|
||||
meeting in Berlin, Germany.
|
||||
|
||||
Thank to John Korejwa and Massimo Ballerini for inviting me to
|
||||
fruitful consultations in Boston, MA and Milan, Italy.
|
||||
|
||||
Thank to Hendrik Elstner, Roland Fassauer, Simone Zuck, Guenther
|
||||
Maier-Gerber, Walter Stoeber, Fred Schmitz, and Norbert Braunagel
|
||||
for corresponding business development.
|
||||
|
||||
Thank to Nico Zschach and Dirk Stelling of the technical support team
|
||||
at the Digital Images company in Halle for providing me with extra
|
||||
equipment for configuration tests.
|
||||
|
||||
Thank to Richard F. Lyon (then of Foveon Inc.) for fruitful
|
||||
communication about JPEG configuration in Sigma Photo Pro software.
|
||||
|
||||
Thank to Andrew Finkenstadt for hosting the ijg.org site.
|
||||
|
||||
Last but not least special thank to Thomas G. Lane for the original
|
||||
design and development of this singular software package.
|
||||
|
||||
|
||||
FILE FORMAT WARS
|
||||
================
|
||||
|
||||
The ISO/IEC JTC1/SC29/WG1 standards committee (previously known as JPEG,
|
||||
together with ITU-T SG16) currently promotes different formats containing
|
||||
the name "JPEG" which is misleading because these formats are incompatible
|
||||
with original DCT-based JPEG and are based on faulty technologies.
|
||||
IJG therefore does not and will not support such momentary mistakes
|
||||
(see REFERENCES).
|
||||
There exist also distributions under the name "OpenJPEG" promoting such
|
||||
kind of formats which is misleading because they don't support original
|
||||
JPEG images.
|
||||
We have no sympathy for the promotion of inferior formats. Indeed, one of
|
||||
the original reasons for developing this free software was to help force
|
||||
convergence on common, interoperable format standards for JPEG files.
|
||||
Don't use an incompatible file format!
|
||||
(In any case, our decoder will remain capable of reading existing JPEG
|
||||
image files indefinitely.)
|
||||
|
||||
The ISO committee pretends to be "responsible for the popular JPEG" in their
|
||||
public reports which is not true because they don't respond to actual
|
||||
requirements for the maintenance of the original JPEG specification.
|
||||
Furthermore, the ISO committee pretends to "ensure interoperability" with
|
||||
their standards which is not true because their "standards" support only
|
||||
application-specific and proprietary use cases and contain mathematically
|
||||
incorrect code.
|
||||
|
||||
There are currently different distributions in circulation containing the
|
||||
name "libjpeg" which is misleading because they don't have the features and
|
||||
are incompatible with formats supported by actual IJG libjpeg distributions.
|
||||
One of those fakes is released by members of the ISO committee and just uses
|
||||
the name of libjpeg for misdirection of people, similar to the abuse of the
|
||||
name JPEG as described above, while having nothing in common with actual IJG
|
||||
libjpeg distributions and containing mathematically incorrect code.
|
||||
The other one claims to be a "derivative" or "fork" of the original libjpeg,
|
||||
but violates the license conditions as described under LEGAL ISSUES above
|
||||
and violates basic C programming properties.
|
||||
We have no sympathy for the release of misleading, incorrect and illegal
|
||||
distributions derived from obsolete code bases.
|
||||
Don't use an obsolete code base!
|
||||
|
||||
According to the UCC (Uniform Commercial Code) law, IJG has the lawful and
|
||||
legal right to foreclose on certain standardization bodies and other
|
||||
institutions or corporations that knowingly perform substantial and
|
||||
systematic deceptive acts and practices, fraud, theft, and damaging of the
|
||||
value of the people of this planet without their knowing, willing and
|
||||
intentional consent.
|
||||
The titles, ownership, and rights of these institutions and all their assets
|
||||
are now duly secured and held in trust for the free people of this planet.
|
||||
People of the planet, on every country, may have a financial interest in
|
||||
the assets of these former principals, agents, and beneficiaries of the
|
||||
foreclosed institutions and corporations.
|
||||
IJG asserts what is: that each man, woman, and child has unalienable value
|
||||
and rights granted and deposited in them by the Creator and not any one of
|
||||
the people is subordinate to any artificial principality, corporate fiction
|
||||
or the special interest of another without their appropriate knowing,
|
||||
willing and intentional consent made by contract or accommodation agreement.
|
||||
IJG expresses that which already was.
|
||||
The people have already determined and demanded that public administration
|
||||
entities, national governments, and their supporting judicial systems must
|
||||
be fully transparent, accountable, and liable.
|
||||
IJG has secured the value for all concerned free people of the planet.
|
||||
|
||||
A partial list of foreclosed institutions and corporations ("Hall of Shame")
|
||||
is currently prepared and will be published later.
|
||||
|
||||
|
||||
TO DO
|
||||
=====
|
||||
|
||||
Version 9 is the second release of a new generation JPEG standard
|
||||
to overcome the limitations of the original JPEG specification,
|
||||
and is the first true source reference JPEG codec.
|
||||
More features are being prepared for coming releases...
|
||||
|
||||
Please send bug reports, offers of help, etc. to jpeg-info@jpegclub.org.
|
@ -22,7 +22,7 @@
|
||||
#include <cstdio>
|
||||
#include <jpeglib.h>
|
||||
#include <jerror.h>
|
||||
#include "jpeg.h"
|
||||
#include "../jpeg.h"
|
||||
|
||||
|
||||
/* Expanded data source object for memory input */
|
@ -55,7 +55,7 @@ namespace
|
||||
? raw_image.get_thumbWidth() * raw_image.get_thumbHeight() * (raw_image.get_thumbBPS() / 8) * 3
|
||||
: raw_image.get_thumbLength();
|
||||
|
||||
return raw_image.get_thumbOffset() + length < raw_image.get_file()->size;
|
||||
return raw_image.get_thumbOffset() + length <= raw_image.get_file()->size;
|
||||
}
|
||||
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -40,7 +40,7 @@ ColorToning::ColorToning () : FoldableToolPanel(this, "colortoning", M("TP_COLOR
|
||||
colorCurveEditorG = new CurveEditorGroup (options.lastColorToningCurvesDir, M("TP_COLORTONING_COLOR"));
|
||||
colorCurveEditorG->setCurveListener (this);
|
||||
|
||||
colorShape = static_cast<FlatCurveEditor*>(colorCurveEditorG->addCurve(CT_Flat, "", nullptr, false));
|
||||
colorShape = static_cast<FlatCurveEditor*>(colorCurveEditorG->addCurve(CT_Flat, "", nullptr, false, false));
|
||||
colorShape->setCurveColorProvider(this, 1);
|
||||
std::vector<GradientMilestone> milestones;
|
||||
|
||||
@ -89,7 +89,7 @@ ColorToning::ColorToning () : FoldableToolPanel(this, "colortoning", M("TP_COLOR
|
||||
opacityCurveEditorG->setCurveListener (this);
|
||||
|
||||
rtengine::ColorToningParams::getDefaultOpacityCurve(defaultCurve);
|
||||
opacityShape = static_cast<FlatCurveEditor*>(opacityCurveEditorG->addCurve(CT_Flat, "", nullptr, false));
|
||||
opacityShape = static_cast<FlatCurveEditor*>(opacityCurveEditorG->addCurve(CT_Flat, "", nullptr, false, false));
|
||||
opacityShape->setIdentityValue(0.);
|
||||
opacityShape->setResetCurve(FlatCurveType(defaultCurve.at(0)), defaultCurve);
|
||||
opacityShape->setBottomBarBgGradient(milestones);
|
||||
@ -108,7 +108,7 @@ ColorToning::ColorToning () : FoldableToolPanel(this, "colortoning", M("TP_COLOR
|
||||
clCurveEditorG->setCurveListener (this);
|
||||
|
||||
rtengine::ColorToningParams::getDefaultCLCurve(defaultCurve);
|
||||
clshape = static_cast<DiagonalCurveEditor*>(clCurveEditorG->addCurve(CT_Diagonal, M("TP_COLORTONING_AB"), irg));
|
||||
clshape = static_cast<DiagonalCurveEditor*>(clCurveEditorG->addCurve(CT_Diagonal, M("TP_COLORTONING_AB"), irg, false));
|
||||
clshape->setResetCurve(DiagonalCurveType(defaultCurve.at(0)), defaultCurve);
|
||||
clshape->setTooltip(M("TP_COLORTONING_CURVEEDITOR_CL_TOOLTIP"));
|
||||
|
||||
@ -128,7 +128,7 @@ ColorToning::ColorToning () : FoldableToolPanel(this, "colortoning", M("TP_COLOR
|
||||
cl2CurveEditorG->setCurveListener (this);
|
||||
|
||||
rtengine::ColorToningParams::getDefaultCL2Curve(defaultCurve);
|
||||
cl2shape = static_cast<DiagonalCurveEditor*>(cl2CurveEditorG->addCurve(CT_Diagonal, M("TP_COLORTONING_BY"), iby));
|
||||
cl2shape = static_cast<DiagonalCurveEditor*>(cl2CurveEditorG->addCurve(CT_Diagonal, M("TP_COLORTONING_BY"), iby, false));
|
||||
cl2shape->setResetCurve(DiagonalCurveType(defaultCurve.at(0)), defaultCurve);
|
||||
cl2shape->setTooltip(M("TP_COLORTONING_CURVEEDITOR_CL_TOOLTIP"));
|
||||
|
||||
|
@ -200,6 +200,7 @@ CurveEditor::CurveEditor (Glib::ustring text, CurveEditorGroup* ceGroup, CurveEd
|
||||
leftBarCP = nullptr;
|
||||
curveCP = nullptr;
|
||||
relatedWidget = nullptr;
|
||||
expandRelatedWidget = true;
|
||||
|
||||
group = ceGroup;
|
||||
subGroup = ceSubGroup;
|
||||
|
@ -66,6 +66,7 @@ protected:
|
||||
CurveEditorGroup* group;
|
||||
CurveEditorSubGroup* subGroup;
|
||||
Gtk::Widget* relatedWidget;
|
||||
bool expandRelatedWidget;
|
||||
|
||||
std::vector<double> tempCurve;
|
||||
sigc::connection typeconn;
|
||||
|
@ -73,7 +73,7 @@ void CurveEditorGroup::hideCurrentCurve()
|
||||
* periodic: for FlatCurve only, ask the curve to be periodic (default: True)
|
||||
*
|
||||
*/
|
||||
CurveEditor* CurveEditorGroup::addCurve(CurveType cType, Glib::ustring curveLabel, Gtk::Widget *relatedWidget, bool periodic)
|
||||
CurveEditor* CurveEditorGroup::addCurve(CurveType cType, Glib::ustring curveLabel, Gtk::Widget *relatedWidget, bool expandRelatedWidget, bool periodic)
|
||||
{
|
||||
switch (cType) {
|
||||
case (CT_Diagonal): {
|
||||
@ -84,6 +84,7 @@ CurveEditor* CurveEditorGroup::addCurve(CurveType cType, Glib::ustring curveLabe
|
||||
// We add it to the curve editor list
|
||||
DiagonalCurveEditor* newCE = diagonalSubGroup->addCurve(curveLabel);
|
||||
newCE->relatedWidget = relatedWidget;
|
||||
newCE->expandRelatedWidget = expandRelatedWidget;
|
||||
curveEditors.push_back(newCE);
|
||||
return (newCE);
|
||||
}
|
||||
@ -96,6 +97,7 @@ CurveEditor* CurveEditorGroup::addCurve(CurveType cType, Glib::ustring curveLabe
|
||||
// We add it to the curve editor list
|
||||
FlatCurveEditor* newCE = flatSubGroup->addCurve(curveLabel, periodic);
|
||||
newCE->relatedWidget = relatedWidget;
|
||||
newCE->expandRelatedWidget = expandRelatedWidget;
|
||||
curveEditors.push_back(newCE);
|
||||
return (newCE);
|
||||
}
|
||||
@ -131,12 +133,20 @@ void CurveEditorGroup::newLine()
|
||||
|
||||
int j = numberOfPackedCurve;
|
||||
|
||||
bool rwe = false;
|
||||
|
||||
for (int i = (int)(curveEditors.size()) - 1; i >= j; i--) {
|
||||
if (curveEditors[i]->relatedWidget != nullptr && curveEditors[i]->expandRelatedWidget) {
|
||||
rwe = true;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = (int)(curveEditors.size()) - 1; i >= j; i--) {
|
||||
if (curveEditors[i]->relatedWidget != nullptr) {
|
||||
headerBox->pack_end (*curveEditors[i]->relatedWidget, Gtk::PACK_EXPAND_WIDGET, 2);
|
||||
headerBox->pack_end (*curveEditors[i]->relatedWidget, curveEditors[i]->expandRelatedWidget ? Gtk::PACK_EXPAND_WIDGET : Gtk::PACK_SHRINK, 2);
|
||||
}
|
||||
|
||||
headerBox->pack_end (*curveEditors[i]->curveType->buttonGroup, /*hasRelatedWidget ? Gtk::PACK_SHRINK :*/ Gtk::PACK_EXPAND_WIDGET, 2);
|
||||
headerBox->pack_end (*curveEditors[i]->curveType->buttonGroup, rwe ? Gtk::PACK_SHRINK : Gtk::PACK_EXPAND_WIDGET, 2);
|
||||
numberOfPackedCurve++;
|
||||
}
|
||||
|
||||
|
@ -85,7 +85,7 @@ public:
|
||||
return displayedCurve;
|
||||
}
|
||||
//void on_realize ();
|
||||
CurveEditor* addCurve(CurveType cType, Glib::ustring curveLabel, Gtk::Widget *relatedWidget = nullptr, bool periodic = true);
|
||||
CurveEditor* addCurve(CurveType cType, Glib::ustring curveLabel, Gtk::Widget *relatedWidget = nullptr, bool expandRelatedWidget = true, bool periodic = true);
|
||||
|
||||
protected:
|
||||
//void curveTypeToggled ();
|
||||
|
@ -62,7 +62,7 @@ DirPyrDenoise::DirPyrDenoise () : FoldableToolPanel(this, "dirpyrdenoise", M("TP
|
||||
//curveEditorG = new CurveEditorGroup (options.lastLabCurvesDir);
|
||||
NoiscurveEditorG->setCurveListener (this);
|
||||
rtengine::DirPyrDenoiseParams::getDefaultNoisCurve(defaultCurve);
|
||||
lshape = static_cast<FlatCurveEditor*>(NoiscurveEditorG->addCurve(CT_Flat, "", nullptr, false));
|
||||
lshape = static_cast<FlatCurveEditor*>(NoiscurveEditorG->addCurve(CT_Flat, "", nullptr, false, false));
|
||||
lshape->setIdentityValue(0.);
|
||||
lshape->setResetCurve(FlatCurveType(defaultCurve.at(0)), defaultCurve);
|
||||
|
||||
@ -150,7 +150,7 @@ DirPyrDenoise::DirPyrDenoise () : FoldableToolPanel(this, "dirpyrdenoise", M("TP
|
||||
CCcurveEditorG = new CurveEditorGroup (options.lastDenoiseCurvesDir, M("TP_DIRPYRDENOISE_CCCURVE"));
|
||||
CCcurveEditorG->setCurveListener (this);
|
||||
rtengine::DirPyrDenoiseParams::getDefaultCCCurve(defaultCurve);
|
||||
ccshape = static_cast<FlatCurveEditor*>(CCcurveEditorG->addCurve(CT_Flat, "", nullptr, false));
|
||||
ccshape = static_cast<FlatCurveEditor*>(CCcurveEditorG->addCurve(CT_Flat, "", nullptr, false, false));
|
||||
ccshape->setIdentityValue(0.);
|
||||
ccshape->setResetCurve(FlatCurveType(defaultCurve.at(0)), defaultCurve);
|
||||
|
||||
|
@ -1675,8 +1675,7 @@ void EditorPanel::saveAsPressed ()
|
||||
fnameOut = saveAsDialog->getFileName ();
|
||||
|
||||
options.lastSaveAsPath = saveAsDialog->getDirectory ();
|
||||
options.saveAsDialogWidth = saveAsDialog->get_width ();
|
||||
options.saveAsDialogHeight = saveAsDialog->get_height ();
|
||||
saveAsDialog->get_size(options.saveAsDialogWidth, options.saveAsDialogHeight);
|
||||
options.autoSuffix = saveAsDialog->getAutoSuffix ();
|
||||
options.saveMethodNum = saveAsDialog->getSaveMethodNum ();
|
||||
lastSaveAsFileName = Glib::path_get_basename (removeExtension (fnameOut));
|
||||
@ -1745,6 +1744,8 @@ void EditorPanel::saveAsPressed ()
|
||||
} while (!fnameOK);
|
||||
|
||||
saveAsDialog->hide();
|
||||
|
||||
delete saveAsDialog;
|
||||
}
|
||||
|
||||
void EditorPanel::queueImgPressed ()
|
||||
|
@ -101,8 +101,7 @@ Preferences::~Preferences ()
|
||||
{
|
||||
|
||||
profileStore.removeListener(this);
|
||||
options.preferencesWidth = get_width();
|
||||
options.preferencesHeight = get_height();
|
||||
get_size(options.preferencesWidth, options.preferencesHeight);
|
||||
}
|
||||
|
||||
Gtk::Widget* Preferences::getBatchProcPanel ()
|
||||
|
@ -105,7 +105,7 @@ Retinex::Retinex () : FoldableToolPanel(this, "retinex", M("TP_RETINEX_LABEL"),
|
||||
|
||||
std::vector<double> defaultCurve;
|
||||
rtengine::RetinexParams::getDefaulttransmissionCurve(defaultCurve);
|
||||
transmissionShape = static_cast<FlatCurveEditor*>(transmissionCurveEditorG->addCurve(CT_Flat, "", nullptr, false));
|
||||
transmissionShape = static_cast<FlatCurveEditor*>(transmissionCurveEditorG->addCurve(CT_Flat, "", nullptr, false, false));
|
||||
transmissionShape->setIdentityValue(0.);
|
||||
transmissionShape->setResetCurve(FlatCurveType(defaultCurve.at(0)), defaultCurve);
|
||||
transmissionShape->setBottomBarBgGradient(milestones);
|
||||
@ -184,7 +184,7 @@ Retinex::Retinex () : FoldableToolPanel(this, "retinex", M("TP_RETINEX_LABEL"),
|
||||
|
||||
// std::vector<double> defaultCurve;
|
||||
rtengine::RetinexParams::getDefaultgaintransmissionCurve(defaultCurve);
|
||||
gaintransmissionShape = static_cast<FlatCurveEditor*>(gaintransmissionCurve->addCurve(CT_Flat, "", nullptr, false));
|
||||
gaintransmissionShape = static_cast<FlatCurveEditor*>(gaintransmissionCurve->addCurve(CT_Flat, "", nullptr, false, false));
|
||||
gaintransmissionShape->setIdentityValue(0.);
|
||||
gaintransmissionShape->setResetCurve(FlatCurveType(defaultCurve.at(0)), defaultCurve);
|
||||
gaintransmissionShape->setBottomBarBgGradient(milestones);
|
||||
|
@ -687,8 +687,7 @@ bool RTWindow::on_delete_event(GdkEventAny* event)
|
||||
ProfilePanel::cleanup();
|
||||
|
||||
if (!options.windowMaximized) {
|
||||
options.windowWidth = get_width();
|
||||
options.windowHeight = get_height();
|
||||
get_size(options.windowWidth, options.windowHeight);
|
||||
get_position (options.windowX, options.windowY);
|
||||
}
|
||||
|
||||
|
441
rtgui/wavelet.cc
441
rtgui/wavelet.cc
@ -27,109 +27,169 @@ using namespace rtengine;
|
||||
using namespace rtengine::procparams;
|
||||
extern Options options;
|
||||
|
||||
Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"), true, true)
|
||||
namespace
|
||||
{
|
||||
|
||||
GradientMilestone makeHsvGm(double position, float h, float s, float v)
|
||||
{
|
||||
float r;
|
||||
float g;
|
||||
float b;
|
||||
Color::hsv2rgb01(h, s, v, r, g, b);
|
||||
return GradientMilestone(position, r, g, b);
|
||||
}
|
||||
|
||||
std::vector<GradientMilestone> makeWholeHueRange()
|
||||
{
|
||||
std::vector<GradientMilestone> res;
|
||||
res.reserve(7);
|
||||
|
||||
for (int i = 0; i < 7; ++i) {
|
||||
const float x = static_cast<float>(i) / 6.0f;
|
||||
res.push_back(makeHsvGm(x, x, 0.5f, 0.5f));
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Wavelet::Wavelet() :
|
||||
FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"), true, true),
|
||||
curveEditorG(new CurveEditorGroup(options.lastWaveletCurvesDir, M("TP_WAVELET_CONTEDIT"))),
|
||||
CCWcurveEditorG(new CurveEditorGroup(options.lastWaveletCurvesDir, M("TP_WAVELET_CCURVE"))),
|
||||
curveEditorRES(new CurveEditorGroup(options.lastWaveletCurvesDir)),
|
||||
curveEditorGAM(new CurveEditorGroup(options.lastWaveletCurvesDir)),
|
||||
separatorNeutral(Gtk::manage(new Gtk::HSeparator())),
|
||||
separatoredge(Gtk::manage(new Gtk::HSeparator())),
|
||||
opaCurveEditorG(new CurveEditorGroup(options.lastWaveletCurvesDir, M("TP_WAVELET_COLORT"))),
|
||||
opacityCurveEditorG(new CurveEditorGroup(options.lastWaveletCurvesDir, M("TP_WAVELET_OPACITY"))),
|
||||
opacityCurveEditorW(new CurveEditorGroup(options.lastWaveletCurvesDir, M("TP_WAVELET_OPACITYW"))),
|
||||
opacityCurveEditorWL(new CurveEditorGroup(options.lastWaveletCurvesDir, M("TP_WAVELET_OPACITYWL"))),
|
||||
median(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_MEDI")))),
|
||||
medianlev(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_MEDILEV")))),
|
||||
linkedg(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_LINKEDG")))),
|
||||
cbenab(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_CBENAB")))),
|
||||
lipst(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_LIPST")))),
|
||||
avoid(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_AVOID")))),
|
||||
tmr(Gtk::manage(new Gtk::CheckButton(M("TP_WAVELET_BALCHRO")))),
|
||||
neutralchButton(Gtk::manage(new Gtk::Button(M("TP_WAVELET_NEUTRAL")))),
|
||||
rescon(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCON"), -100, 100, 1, 0))),
|
||||
resconH(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCONH"), -100, 100, 1, 0))),
|
||||
reschro(Gtk::manage(new Adjuster(M("TP_WAVELET_RESCHRO"), -100, 100, 1, 0))),
|
||||
tmrs(Gtk::manage(new Adjuster(M("TP_WAVELET_TMSTRENGTH"), -1.0, 2.0, 0.01, 0.0))),
|
||||
gamma(Gtk::manage(new Adjuster(M("TP_WAVELET_COMPGAMMA"), 0.4, 2.0, 0.01, 1.0))),
|
||||
sup(Gtk::manage(new Adjuster(M("TP_WAVELET_SUPE"), -100, 350, 1, 0))),
|
||||
sky(Gtk::manage(new Adjuster(M("TP_WAVELET_SKY"), -100., 100.0, 1., 0.))),
|
||||
thres(Gtk::manage(new Adjuster(M("TP_WAVELET_LEVELS"), 4, 9, 1, 7))),//3
|
||||
chroma(Gtk::manage(new Adjuster(M("TP_WAVELET_CHRO"), 1, 9, 1, 5))),
|
||||
chro(Gtk::manage(new Adjuster(M("TP_WAVELET_CHR"), 0., 100., 1., 0.))),
|
||||
contrast(Gtk::manage(new Adjuster(M("TP_WAVELET_CONTRA"), -100, 100, 1, 0))),
|
||||
thr(Gtk::manage(new Adjuster(M("TP_WAVELET_THR"), 0, 100, 1, 35))),
|
||||
thrH(Gtk::manage(new Adjuster(M("TP_WAVELET_THRH"), 0, 100, 1, 65))),
|
||||
skinprotect(Gtk::manage( new Adjuster(M("TP_WAVELET_SKIN"), -100, 100, 1, 0.) )),
|
||||
edgrad(Gtk::manage( new Adjuster(M("TP_WAVELET_EDRAD"), 0, 100, 1, 15) )),
|
||||
edgval(Gtk::manage( new Adjuster(M("TP_WAVELET_EDVAL"), 0, 100, 1, 0) )),
|
||||
edgthresh(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGTHRESH"), -50, 100, 1, 10 ))),
|
||||
strength(Gtk::manage(new Adjuster(M("TP_WAVELET_STRENGTH"), 0, 100, 1, 100))),
|
||||
balance(Gtk::manage(new Adjuster(M("TP_WAVELET_BALANCE"), -30, 100, 1, 0))),
|
||||
iter(Gtk::manage(new Adjuster(M("TP_WAVELET_ITER"), -3, 3, 1, 0))),
|
||||
hueskin(Gtk::manage(new ThresholdAdjuster(M("TP_WAVELET_HUESKIN"), -314., 314., -5., 25., 170., 120., 0, false))),
|
||||
hueskin2(Gtk::manage(new ThresholdAdjuster(M("TP_WAVELET_HUESKY"), -314., 314., -260., -250, -130., -140., 0, false))),
|
||||
hllev(Gtk::manage(new ThresholdAdjuster(M("TP_WAVELET_HIGHLIGHT"), 0., 100., 50., 75., 100., 98., 0, false))),
|
||||
bllev(Gtk::manage(new ThresholdAdjuster(M("TP_WAVELET_LOWLIGHT"), 0., 100., 0., 2., 50., 25., 0, false))),
|
||||
pastlev(Gtk::manage(new ThresholdAdjuster(M("TP_WAVELET_PASTEL"), 0., 70., 0., 2., 30., 20., 0, false))),
|
||||
satlev(Gtk::manage(new ThresholdAdjuster(M("TP_WAVELET_SAT"), 0., 130., 30., 45., 130., 100., 0, false))),
|
||||
edgcont(Gtk::manage(new ThresholdAdjuster(M("TP_WAVELET_EDGCONT"), 0., 100., options.rtSettings.bot_left, options.rtSettings.top_left, options.rtSettings.bot_right, options.rtSettings.top_right, 0., false))),
|
||||
level0noise(Gtk::manage(new ThresholdAdjuster(M("TP_WAVELET_LEVZERO"), -30., 100., 0., M("TP_WAVELET_STREN"), 1., 0., 100., 0., M("TP_WAVELET_NOIS"), 1., nullptr, false))),
|
||||
level1noise(Gtk::manage(new ThresholdAdjuster(M("TP_WAVELET_LEVONE"), -30., 100., 0., M("TP_WAVELET_STREN"), 1., 0., 100., 0., M("TP_WAVELET_NOIS"), 1., nullptr, false))),
|
||||
level2noise(Gtk::manage(new ThresholdAdjuster(M("TP_WAVELET_LEVTWO"), -30., 100., 0., M("TP_WAVELET_STREN"), 1., 0., 100., 0., M("TP_WAVELET_NOIS"), 1., nullptr, false))),
|
||||
level3noise(Gtk::manage(new ThresholdAdjuster(M("TP_WAVELET_LEVTHRE"), -30., 100., 0., M("TP_WAVELET_STREN"), 1., 0., 100., 0., M("TP_WAVELET_NOIS"), 1., nullptr, false))),
|
||||
threshold(Gtk::manage(new Adjuster(M("TP_WAVELET_THRESHOLD"), 1, 9, 1, 5))),
|
||||
threshold2(Gtk::manage(new Adjuster(M("TP_WAVELET_THRESHOLD2"), 1, 9, 1, 4))),
|
||||
edgedetect(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGEDETECT"), 0, 100, 1, 90))),
|
||||
edgedetectthr(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGEDETECTTHR"), 0, 100, 1, 20))),
|
||||
edgedetectthr2(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGEDETECTTHR2"), -10, 100, 1, 0))),
|
||||
edgesensi(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGESENSI"), 0, 100, 1, 60))),
|
||||
edgeampli(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGEAMPLI"), 0, 100, 1, 10))),
|
||||
Lmethod(Gtk::manage(new MyComboBoxText())),
|
||||
CHmethod(Gtk::manage(new MyComboBoxText())),
|
||||
CHSLmethod(Gtk::manage(new MyComboBoxText())),
|
||||
EDmethod(Gtk::manage(new MyComboBoxText())),
|
||||
BAmethod(Gtk::manage(new MyComboBoxText())),
|
||||
NPmethod(Gtk::manage(new MyComboBoxText())),
|
||||
TMmethod(Gtk::manage(new MyComboBoxText())),
|
||||
HSmethod(Gtk::manage(new MyComboBoxText())),
|
||||
CLmethod(Gtk::manage(new MyComboBoxText())),
|
||||
Backmethod(Gtk::manage(new MyComboBoxText())),
|
||||
Tilesmethod(Gtk::manage(new MyComboBoxText())),
|
||||
daubcoeffmethod(Gtk::manage(new MyComboBoxText())),
|
||||
Dirmethod(Gtk::manage(new MyComboBoxText())),
|
||||
Medgreinf(Gtk::manage(new MyComboBoxText())),
|
||||
chanMixerHLFrame(Gtk::manage(new Gtk::Frame(M("TP_COLORTONING_HIGHLIGHT")))),
|
||||
chanMixerMidFrame(Gtk::manage(new Gtk::Frame(M("TP_COLORTONING_MIDTONES")))),
|
||||
chanMixerShadowsFrame(Gtk::manage(new Gtk::Frame(M("TP_COLORTONING_SHADOWS")))),
|
||||
wavLabels(Gtk::manage(new Gtk::Label("---", Gtk::ALIGN_CENTER))),
|
||||
labmC(Gtk::manage(new Gtk::Label(M("TP_WAVELET_CTYPE") + ":"))),
|
||||
labmNP(Gtk::manage(new Gtk::Label(M("TP_WAVELET_NPTYPE") + ":"))),
|
||||
expchroma(new MyExpander(true, M("TP_WAVELET_LEVCH"))),
|
||||
expcontrast(new MyExpander(true, M("TP_WAVELET_LEVF"))),
|
||||
expedge(new MyExpander(true, M("TP_WAVELET_EDGE"))),
|
||||
expfinal(new MyExpander(true, M("TP_WAVELET_FINAL"))),
|
||||
expgamut(new MyExpander(false, M("TP_WAVELET_CONTR"))),
|
||||
expnoise(new MyExpander(true, M("TP_WAVELET_NOISE"))),
|
||||
expresid(new MyExpander(true, M("TP_WAVELET_RESID"))),
|
||||
expsettings(new MyExpander(false, M("TP_WAVELET_SETTINGS"))),
|
||||
exptoning(new MyExpander(true, M("TP_WAVELET_TON"))),
|
||||
neutrHBox(Gtk::manage(new Gtk::HBox()))
|
||||
{
|
||||
std::vector<GradientMilestone> milestones;
|
||||
CurveListener::setMulti(true);
|
||||
nextnlevel = 7.;
|
||||
float r, g, b;
|
||||
//from -PI to +PI (radians) convert to hsv and draw bottombar
|
||||
Color::hsv2rgb01(0.4199, 0.5, 0.5, r, g, b);
|
||||
milestones.push_back( GradientMilestone(0.0 , r, g, b) ); // hsv: 0.4199 rad: -3.14
|
||||
Color::hsv2rgb01(0.5000, 0.5, 0.5, r, g, b);
|
||||
milestones.push_back( GradientMilestone(0.054 , r, g, b) ); // hsv: 0.5 rad: -2.8
|
||||
Color::hsv2rgb01(0.6000, 0.5, 0.5, r, g, b);
|
||||
milestones.push_back( GradientMilestone(0.1336, r, g, b) ); // hsv: 0.60 rad: -2.3
|
||||
Color::hsv2rgb01(0.7500, 0.5, 0.5, r, g, b);
|
||||
milestones.push_back( GradientMilestone(0.3567, r, g, b) ); // hsv: 0.75 rad: -0.9
|
||||
Color::hsv2rgb01(0.8560, 0.5, 0.5, r, g, b);
|
||||
milestones.push_back( GradientMilestone(0.4363, r, g, b) ); // hsv: 0.856 rad: -0.4
|
||||
Color::hsv2rgb01(0.9200, 0.5, 0.5, r, g, b);
|
||||
milestones.push_back( GradientMilestone(0.4841, r, g, b) ); // hsv: 0.92 rad: -0.1
|
||||
Color::hsv2rgb01(0.9300, 0.5, 0.5, r, g, b);
|
||||
milestones.push_back( GradientMilestone(0.5000, r, g, b) ); // hsv: 0.93 rad: 0
|
||||
Color::hsv2rgb01(0.9600, 0.5, 0.5, r, g, b);
|
||||
milestones.push_back( GradientMilestone(0.5366, r, g, b) ); // hsv: 0.96 rad: 0.25
|
||||
Color::hsv2rgb01(1.0000, 0.5, 0.5, r, g, b);
|
||||
milestones.push_back( GradientMilestone(0.5955, r, g, b) ); // hsv: 1. rad: 0.6
|
||||
Color::hsv2rgb01(0.0675, 0.5, 0.5, r, g, b);
|
||||
milestones.push_back( GradientMilestone(0.6911, r, g, b) ); // hsv: 0.0675 rad: 1.2
|
||||
Color::hsv2rgb01(0.0900, 0.5, 0.5, r, g, b);
|
||||
milestones.push_back( GradientMilestone(0.7229, r, g, b) ); // hsv: 0.09 rad: 1.4
|
||||
Color::hsv2rgb01(0.1700, 0.5, 0.5, r, g, b);
|
||||
milestones.push_back( GradientMilestone(0.7707, r, g, b) ); // hsv: 0.17 rad: 1.7
|
||||
Color::hsv2rgb01(0.2650, 0.5, 0.5, r, g, b);
|
||||
milestones.push_back( GradientMilestone(0.8503, r, g, b) ); // hsv: 0.265 rad: 2.1
|
||||
Color::hsv2rgb01(0.3240, 0.5, 0.5, r, g, b);
|
||||
milestones.push_back( GradientMilestone(0.8981, r, g, b) ); // hsv: 0.324 rad: 2.5
|
||||
Color::hsv2rgb01(0.4197, 0.5, 0.5, r, g, b);
|
||||
milestones.push_back( GradientMilestone(1. , r, g, b) ); // hsv: 0.419 rad: 3.14
|
||||
|
||||
std::vector<GradientMilestone> milestones2;
|
||||
milestones2.push_back( GradientMilestone(0.0, 0.0, 0.0, 0.0) );
|
||||
milestones2.push_back( GradientMilestone(1.0, 1.0, 1.0, 1.0) );
|
||||
|
||||
std::vector<double> defaultCurve;
|
||||
|
||||
expsettings = new MyExpander (false, M("TP_WAVELET_SETTINGS"));
|
||||
expsettings->signal_button_release_event().connect_notify( sigc::bind( sigc::mem_fun(this, &Wavelet::foldAllButMe), expsettings) );
|
||||
|
||||
expcontrast = new MyExpander (true, M("TP_WAVELET_LEVF"));
|
||||
expcontrast->signal_button_release_event().connect_notify( sigc::bind( sigc::mem_fun(this, &Wavelet::foldAllButMe), expcontrast) );
|
||||
enableContrastConn = expcontrast->signal_enabled_toggled().connect ( sigc::bind( sigc::mem_fun(this, &Wavelet::enableToggled), expcontrast) );
|
||||
|
||||
expchroma = new MyExpander (true, M("TP_WAVELET_LEVCH"));
|
||||
expchroma->signal_button_release_event().connect_notify( sigc::bind ( sigc::mem_fun(this, &Wavelet::foldAllButMe), expchroma) );
|
||||
enableChromaConn = expchroma->signal_enabled_toggled().connect ( sigc::bind( sigc::mem_fun(this, &Wavelet::enableToggled), expchroma) );
|
||||
|
||||
exptoning = new MyExpander (true, M("TP_WAVELET_TON"));
|
||||
exptoning->signal_button_release_event().connect_notify( sigc::bind ( sigc::mem_fun(this, &Wavelet::foldAllButMe), exptoning) );
|
||||
enableToningConn = exptoning->signal_enabled_toggled().connect ( sigc::bind( sigc::mem_fun(this, &Wavelet::enableToggled), exptoning) );
|
||||
|
||||
expnoise = new MyExpander (true, M("TP_WAVELET_NOISE"));
|
||||
expnoise->signal_button_release_event().connect_notify( sigc::bind ( sigc::mem_fun(this, &Wavelet::foldAllButMe), expnoise) );
|
||||
enableNoiseConn = expnoise->signal_enabled_toggled().connect ( sigc::bind( sigc::mem_fun(this, &Wavelet::enableToggled), expnoise) );
|
||||
|
||||
expedge = new MyExpander (true, M("TP_WAVELET_EDGE"));
|
||||
expedge->signal_button_release_event().connect_notify( sigc::bind ( sigc::mem_fun(this, &Wavelet::foldAllButMe), expedge) );
|
||||
enableEdgeConn = expedge->signal_enabled_toggled().connect ( sigc::bind( sigc::mem_fun(this, &Wavelet::enableToggled), expedge) );
|
||||
|
||||
expgamut = new MyExpander (false, M("TP_WAVELET_CONTR"));
|
||||
expgamut->signal_button_release_event().connect_notify( sigc::bind ( sigc::mem_fun(this, &Wavelet::foldAllButMe), expgamut) );
|
||||
|
||||
expresid = new MyExpander (true, M("TP_WAVELET_RESID"));
|
||||
expresid->signal_button_release_event().connect_notify( sigc::bind ( sigc::mem_fun(this, &Wavelet::foldAllButMe), expresid) );
|
||||
enableResidConn = expresid->signal_enabled_toggled().connect ( sigc::bind( sigc::mem_fun(this, &Wavelet::enableToggled), expresid) );
|
||||
|
||||
expfinal = new MyExpander (true, M("TP_WAVELET_FINAL"));
|
||||
expfinal->signal_button_release_event().connect_notify( sigc::bind ( sigc::mem_fun(this, &Wavelet::foldAllButMe), expfinal) );
|
||||
enableFinalConn = expfinal->signal_enabled_toggled().connect ( sigc::bind( sigc::mem_fun(this, &Wavelet::enableToggled), expfinal) );
|
||||
|
||||
// Wavelet Settings
|
||||
settingsVBox = Gtk::manage (new ToolParamBlock());
|
||||
Gtk::VBox* const settingsVBox = Gtk::manage(new Gtk::VBox());
|
||||
settingsVBox->set_spacing(2);
|
||||
|
||||
strength = Gtk::manage (new Adjuster (M("TP_WAVELET_STRENGTH"), 0, 100, 1, 100));
|
||||
strength->setAdjusterListener (this);
|
||||
|
||||
thres = Gtk::manage (new Adjuster (M("TP_WAVELET_LEVELS"), 4, 9, 1, 7));//3
|
||||
thres->set_tooltip_text (M("TP_WAVELET_LEVELS_TOOLTIP"));
|
||||
thres->setAdjusterListener (this);
|
||||
|
||||
tilesizeHBox = Gtk::manage (new Gtk::HBox());
|
||||
tilesizeLabel = Gtk::manage (new Gtk::Label (M("TP_WAVELET_TILESIZE") + ":"));
|
||||
//tilesizeLabel->set_alignment(Gtk::ALIGN_START);
|
||||
Tilesmethod = Gtk::manage (new MyComboBoxText ());
|
||||
Tilesmethod->append (M("TP_WAVELET_TILESFULL"));
|
||||
Tilesmethod->append (M("TP_WAVELET_TILESBIG"));
|
||||
Tilesmethod->append (M("TP_WAVELET_TILESLIT"));
|
||||
Tilesmethodconn = Tilesmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::TilesmethodChanged) );
|
||||
Tilesmethod->set_tooltip_text (M("TP_WAVELET_TILES_TOOLTIP"));
|
||||
Gtk::HBox* const tilesizeHBox = Gtk::manage(new Gtk::HBox());
|
||||
Gtk::Label* const tilesizeLabel = Gtk::manage(new Gtk::Label(M("TP_WAVELET_TILESIZE") + ":"));
|
||||
tilesizeHBox->pack_start(*tilesizeLabel, Gtk::PACK_SHRINK, 4);
|
||||
tilesizeHBox->pack_start(*Tilesmethod);
|
||||
|
||||
daubcoeffHBox = Gtk::manage (new Gtk::HBox());
|
||||
daubcoeffLabel = Gtk::manage (new Gtk::Label (M("TP_WAVELET_DAUB") + ":"));
|
||||
daubcoeffmethod = Gtk::manage (new MyComboBoxText ());
|
||||
daubcoeffmethod->set_sensitive(true);
|
||||
daubcoeffmethod->append (M("TP_WAVELET_DAUB2"));
|
||||
daubcoeffmethod->append (M("TP_WAVELET_DAUB4"));
|
||||
@ -138,32 +198,30 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
||||
daubcoeffmethod->append (M("TP_WAVELET_DAUB14"));
|
||||
daubcoeffmethodconn = daubcoeffmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::daubcoeffmethodChanged) );
|
||||
daubcoeffmethod->set_tooltip_text (M("TP_WAVELET_DAUB_TOOLTIP"));
|
||||
Gtk::Label* const daubcoeffLabel = Gtk::manage(new Gtk::Label(M("TP_WAVELET_DAUB") + ":"));
|
||||
Gtk::HBox* const daubcoeffHBox = Gtk::manage(new Gtk::HBox());
|
||||
daubcoeffHBox->pack_start(*daubcoeffLabel, Gtk::PACK_SHRINK, 4);
|
||||
daubcoeffHBox->pack_start(*daubcoeffmethod);
|
||||
|
||||
backgroundHBox = Gtk::manage (new Gtk::HBox());
|
||||
Backmethod = Gtk::manage (new MyComboBoxText ());
|
||||
Backmethod->append (M("TP_WAVELET_B0"));
|
||||
Backmethod->append (M("TP_WAVELET_B1"));
|
||||
Backmethod->append (M("TP_WAVELET_B2"));
|
||||
Backmethodconn = Backmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::BackmethodChanged) );
|
||||
backgroundLabel = Gtk::manage (new Gtk::Label (M("TP_WAVELET_BACKGROUND") + ":"));
|
||||
Gtk::HBox* const backgroundHBox = Gtk::manage(new Gtk::HBox());
|
||||
Gtk::Label* const backgroundLabel = Gtk::manage(new Gtk::Label(M("TP_WAVELET_BACKGROUND") + ":"));
|
||||
backgroundHBox->pack_start(*backgroundLabel, Gtk::PACK_SHRINK, 4);
|
||||
backgroundHBox->pack_start(*Backmethod);
|
||||
|
||||
levdirMainHBox = Gtk::manage (new Gtk::HBox());
|
||||
CLmethod = Gtk::manage (new MyComboBoxText ());
|
||||
CLmethod->append (M("TP_WAVELET_LEVDIR_ONE"));
|
||||
CLmethod->append (M("TP_WAVELET_LEVDIR_INF"));
|
||||
CLmethod->append (M("TP_WAVELET_LEVDIR_SUP"));
|
||||
CLmethod->append (M("TP_WAVELET_LEVDIR_ALL"));
|
||||
CLmethodconn = CLmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::CLmethodChanged) );
|
||||
levdirMainLabel = Gtk::manage (new Gtk::Label (M("TP_WAVELET_PROC") + ":"));
|
||||
Gtk::HBox* const levdirMainHBox = Gtk::manage(new Gtk::HBox());
|
||||
Gtk::Label* const levdirMainLabel = Gtk::manage(new Gtk::Label(M("TP_WAVELET_PROC") + ":"));
|
||||
levdirMainHBox->pack_start(*levdirMainLabel, Gtk::PACK_SHRINK, 4);
|
||||
levdirMainHBox->pack_start(*CLmethod); //same
|
||||
|
||||
levdirSubHBox = Gtk::manage (new Gtk::HBox());
|
||||
Lmethod = Gtk::manage (new MyComboBoxText ());
|
||||
Lmethod->set_sensitive(false);
|
||||
Lmethod->set_sensitive(false);
|
||||
Lmethod->append (M("TP_WAVELET_1"));
|
||||
@ -178,7 +236,6 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
||||
Lmethod->append (M("TP_WAVELET_SUPE"));
|
||||
Lmethod->append (M("TP_WAVELET_RESID"));
|
||||
Lmethod->set_active(0);
|
||||
Dirmethod = Gtk::manage (new MyComboBoxText ());
|
||||
Dirmethod->set_sensitive(false);
|
||||
Dirmethod->append (M("TP_WAVELET_DONE"));
|
||||
Dirmethod->append (M("TP_WAVELET_DTWO"));
|
||||
@ -186,6 +243,7 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
||||
Dirmethod->append (M("TP_WAVELET_DALL"));
|
||||
Lmethodconn = Lmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::LmethodChanged) );
|
||||
Dirmethodconn = Dirmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::DirmethodChanged) );
|
||||
Gtk::HBox* const levdirSubHBox = Gtk::manage(new Gtk::HBox());
|
||||
levdirSubHBox->pack_start(*Lmethod);
|
||||
levdirSubHBox->pack_start(*Dirmethod, Gtk::PACK_EXPAND_WIDGET, 2); // same, but 2 not 4?
|
||||
|
||||
@ -200,20 +258,18 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
||||
// Contrast
|
||||
Gtk::VBox * levBox = Gtk::manage (new ToolParamBlock());
|
||||
|
||||
|
||||
Gtk::HBox * buttonBox = Gtk::manage (new Gtk::HBox(true, 10));
|
||||
wavLabels = Gtk::manage(new Gtk::Label("---", Gtk::ALIGN_CENTER));
|
||||
Gtk::HBox* const buttonBox = Gtk::manage (new Gtk::HBox(true, 10));
|
||||
levBox->pack_start(*buttonBox, Gtk::PACK_SHRINK, 2);
|
||||
|
||||
Gtk::Button * contrastMinusButton = Gtk::manage (new Gtk::Button(M("TP_WAVELET_CONTRAST_MINUS")));
|
||||
Gtk::Button* const contrastMinusButton = Gtk::manage (new Gtk::Button(M("TP_WAVELET_CONTRAST_MINUS")));
|
||||
buttonBox->pack_start(*contrastMinusButton);
|
||||
contrastMinusPressedConn = contrastMinusButton->signal_pressed().connect( sigc::mem_fun(*this, &Wavelet::contrastMinusPressed));
|
||||
|
||||
Gtk::Button * neutralButton = Gtk::manage (new Gtk::Button(M("TP_WAVELET_NEUTRAL")));
|
||||
Gtk::Button* const neutralButton = Gtk::manage (new Gtk::Button(M("TP_WAVELET_NEUTRAL")));
|
||||
buttonBox->pack_start(*neutralButton);
|
||||
neutralPressedConn = neutralButton->signal_pressed().connect( sigc::mem_fun(*this, &Wavelet::neutralPressed));
|
||||
|
||||
Gtk::Button * contrastPlusButton = Gtk::manage (new Gtk::Button(M("TP_WAVELET_CONTRAST_PLUS")));
|
||||
Gtk::Button* const contrastPlusButton = Gtk::manage (new Gtk::Button(M("TP_WAVELET_CONTRAST_PLUS")));
|
||||
buttonBox->pack_start(*contrastPlusButton);
|
||||
contrastPlusPressedConn = contrastPlusButton->signal_pressed().connect( sigc::mem_fun(*this, &Wavelet::contrastPlusPressed));
|
||||
|
||||
@ -240,53 +296,51 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
||||
levBox->pack_start(*correction[i]);
|
||||
}
|
||||
|
||||
sup = Gtk::manage (new Adjuster (M("TP_WAVELET_SUPE"), -100, 350, 1, 0));
|
||||
levBox->pack_start(*sup);
|
||||
sup->setAdjusterListener (this);
|
||||
wavLabels->show();
|
||||
levBox->pack_start (*wavLabels);
|
||||
|
||||
contrastSHFrame = Gtk::manage (new Gtk::Frame (M("TP_WAVELET_APPLYTO")));
|
||||
contrastSHVBox = Gtk::manage (new Gtk::VBox);
|
||||
Gtk::VBox* const contrastSHVBox = Gtk::manage(new Gtk::VBox);
|
||||
contrastSHVBox->set_spacing(2);
|
||||
|
||||
HSmethod = Gtk::manage (new MyComboBoxText ());
|
||||
HSmethod->append (M("TP_WAVELET_HS1"));
|
||||
HSmethod->append (M("TP_WAVELET_HS2"));
|
||||
HSmethodconn = HSmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::HSmethodChanged) );
|
||||
|
||||
hllev = Gtk::manage (new ThresholdAdjuster (M("TP_WAVELET_HIGHLIGHT"), 0., 100., 50., 75., 100., 98., 0, false));
|
||||
const std::vector<GradientMilestone> milestones2 = {
|
||||
GradientMilestone(0.0, 0.0, 0.0, 0.0),
|
||||
GradientMilestone(1.0, 1.0, 1.0, 1.0)
|
||||
};
|
||||
|
||||
hllev->setAdjusterListener (this);
|
||||
hllev->setBgGradient(milestones2);
|
||||
|
||||
threshold = Gtk::manage (new Adjuster (M("TP_WAVELET_THRESHOLD"), 1, 9, 1, 5));
|
||||
threshold->setAdjusterListener (this);
|
||||
threshold->set_tooltip_text (M("TP_WAVELET_THRESHOLD_TOOLTIP"));
|
||||
|
||||
bllev = Gtk::manage (new ThresholdAdjuster (M("TP_WAVELET_LOWLIGHT"), 0., 100., 0., 2., 50., 25., 0, false));
|
||||
bllev->setAdjusterListener (this);
|
||||
bllev->setBgGradient(milestones2);
|
||||
|
||||
threshold2 = Gtk::manage (new Adjuster (M("TP_WAVELET_THRESHOLD2"), 1, 9, 1, 4));
|
||||
threshold2->setAdjusterListener (this);
|
||||
threshold2->set_tooltip_text (M("TP_WAVELET_THRESHOLD2_TOOLTIP"));
|
||||
|
||||
contrastSHVBox->pack_start(*HSmethod); //remove 2?
|
||||
contrastSHVBox->pack_start(*HSmethod);
|
||||
contrastSHVBox->pack_start(*hllev);
|
||||
contrastSHVBox->pack_start(*threshold);
|
||||
contrastSHVBox->pack_start(*bllev);
|
||||
contrastSHVBox->pack_start(*threshold2);
|
||||
Gtk::Frame* const contrastSHFrame = Gtk::manage(new Gtk::Frame(M("TP_WAVELET_APPLYTO")));
|
||||
contrastSHFrame->add(*contrastSHVBox);
|
||||
levBox->pack_start(*contrastSHFrame);
|
||||
|
||||
// Chromaticity
|
||||
Gtk::VBox * chBox = Gtk::manage (new ToolParamBlock());
|
||||
|
||||
ctboxch = Gtk::manage (new Gtk::HBox ());
|
||||
labmch = Gtk::manage (new Gtk::Label (M("TP_WAVELET_CHTYPE") + ":"));
|
||||
Gtk::Label* const labmch = Gtk::manage(new Gtk::Label(M("TP_WAVELET_CHTYPE") + ":"));
|
||||
Gtk::HBox* const ctboxch = Gtk::manage(new Gtk::HBox());
|
||||
ctboxch->pack_start (*labmch, Gtk::PACK_SHRINK, 1);
|
||||
|
||||
CHmethod = Gtk::manage (new MyComboBoxText ());
|
||||
CHmethod->append (M("TP_WAVELET_CH1"));
|
||||
CHmethod->append (M("TP_WAVELET_CH2"));
|
||||
CHmethod->append (M("TP_WAVELET_CH3"));
|
||||
@ -294,44 +348,36 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
||||
ctboxch->pack_start(*CHmethod);
|
||||
chBox->pack_start(*ctboxch);
|
||||
|
||||
ctboxCH = Gtk::manage (new Gtk::HBox ());
|
||||
labmC = Gtk::manage (new Gtk::Label (M("TP_WAVELET_CTYPE") + ":"));
|
||||
Gtk::HBox* const ctboxCH = Gtk::manage(new Gtk::HBox());
|
||||
ctboxCH->pack_start (*labmC, Gtk::PACK_SHRINK, 1);
|
||||
|
||||
CHSLmethod = Gtk::manage (new MyComboBoxText ());
|
||||
CHSLmethod->append (M("TP_WAVELET_CHSL"));
|
||||
CHSLmethod->append (M("TP_WAVELET_CHCU"));
|
||||
CHSLmethodconn = CHSLmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::CHSLmethodChanged) );
|
||||
ctboxCH->pack_start(*CHSLmethod);
|
||||
|
||||
Gtk::HSeparator *separatorChromaMethod = Gtk::manage (new Gtk::HSeparator());
|
||||
Gtk::HSeparator* const separatorChromaMethod = Gtk::manage (new Gtk::HSeparator());
|
||||
chBox->pack_start(*separatorChromaMethod, Gtk::PACK_SHRINK, 2);
|
||||
|
||||
chroma = Gtk::manage (new Adjuster (M("TP_WAVELET_CHRO"), 1, 9, 1, 5));
|
||||
chroma->set_tooltip_text (M("TP_WAVELET_CHRO_TOOLTIP"));
|
||||
chBox->pack_start(*chroma);
|
||||
chroma->setAdjusterListener (this);
|
||||
|
||||
satlev = Gtk::manage (new ThresholdAdjuster (M("TP_WAVELET_SAT"), 0., 130., 30., 45., 130., 100., 0, false));
|
||||
satlev->setAdjusterListener (this);
|
||||
satlev->setBgGradient(milestones2);
|
||||
|
||||
pastlev = Gtk::manage (new ThresholdAdjuster (M("TP_WAVELET_PASTEL"), 0., 70., 0., 2., 30., 20., 0, false));
|
||||
pastlev->setAdjusterListener (this);
|
||||
pastlev->setBgGradient(milestones2);
|
||||
|
||||
chBox->pack_start(*pastlev);
|
||||
chBox->pack_start(*satlev);
|
||||
|
||||
chro = Gtk::manage (new Adjuster (M("TP_WAVELET_CHR"), 0., 100., 1., 0.));
|
||||
chro->set_tooltip_text (M("TP_WAVELET_CHR_TOOLTIP"));
|
||||
chBox->pack_start(*chro);
|
||||
chro->setAdjusterListener (this);
|
||||
|
||||
Gtk::HBox * buttonchBox = Gtk::manage (new Gtk::HBox(true, 10));
|
||||
neutralchButton = Gtk::manage (new Gtk::Button(M("TP_WAVELET_NEUTRAL")));
|
||||
Gtk::HBox* const buttonchBox = Gtk::manage (new Gtk::HBox(true, 10));
|
||||
neutralchPressedConn = neutralchButton->signal_pressed().connect( sigc::mem_fun(*this, &Wavelet::neutralchPressed));
|
||||
separatorNeutral = Gtk::manage (new Gtk::HSeparator());
|
||||
chBox->pack_start(*separatorNeutral, Gtk::PACK_SHRINK, 2);
|
||||
buttonchBox->pack_start(*neutralchButton);
|
||||
buttonchBox->show_all_children();
|
||||
@ -361,11 +407,12 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
||||
// Toning
|
||||
Gtk::VBox * tonBox = Gtk::manage (new ToolParamBlock());
|
||||
|
||||
opaCurveEditorG = new CurveEditorGroup (options.lastWaveletCurvesDir, M("TP_WAVELET_COLORT"));
|
||||
opaCurveEditorG->setCurveListener (this);
|
||||
|
||||
std::vector<double> defaultCurve;
|
||||
|
||||
rtengine::WaveletParams::getDefaultOpacityCurveRG(defaultCurve);
|
||||
opacityShapeRG = static_cast<FlatCurveEditor*>(opaCurveEditorG->addCurve(CT_Flat, "", nullptr, false));
|
||||
opacityShapeRG = static_cast<FlatCurveEditor*>(opaCurveEditorG->addCurve(CT_Flat, "", nullptr, false, false));
|
||||
opacityShapeRG->setIdentityValue(0.);
|
||||
opacityShapeRG->setResetCurve(FlatCurveType(defaultCurve.at(0)), defaultCurve);
|
||||
|
||||
@ -374,11 +421,10 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
||||
|
||||
tonBox->pack_start( *opaCurveEditorG, Gtk::PACK_SHRINK, 2);
|
||||
|
||||
opacityCurveEditorG = new CurveEditorGroup (options.lastWaveletCurvesDir, M("TP_WAVELET_OPACITY"));
|
||||
opacityCurveEditorG->setCurveListener (this);
|
||||
|
||||
rtengine::WaveletParams::getDefaultOpacityCurveBY(defaultCurve);
|
||||
opacityShapeBY = static_cast<FlatCurveEditor*>(opacityCurveEditorG->addCurve(CT_Flat, "", nullptr, false));
|
||||
opacityShapeBY = static_cast<FlatCurveEditor*>(opacityCurveEditorG->addCurve(CT_Flat, "", nullptr, false, false));
|
||||
opacityShapeBY->setIdentityValue(0.);
|
||||
opacityShapeBY->setResetCurve(FlatCurveType(defaultCurve.at(0)), defaultCurve);
|
||||
|
||||
@ -390,24 +436,19 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
||||
// Denoise and Refine
|
||||
Gtk::VBox * noiseBox = Gtk::manage (new ToolParamBlock());
|
||||
|
||||
linkedg = Gtk::manage (new Gtk::CheckButton (M("TP_WAVELET_LINKEDG")));
|
||||
linkedg->set_active (true);
|
||||
linkedgConn = linkedg->signal_toggled().connect( sigc::mem_fun(*this, &Wavelet::linkedgToggled) );
|
||||
noiseBox->pack_start(*linkedg);
|
||||
|
||||
level0noise = Gtk::manage (new ThresholdAdjuster (M("TP_WAVELET_LEVZERO"), -30., 100., 0., M("TP_WAVELET_STREN"), 1., 0., 100., 0., M("TP_WAVELET_NOIS"), 1., nullptr, false));
|
||||
level0noise->setAdjusterListener (this);
|
||||
level0noise->setUpdatePolicy(RTUP_DYNAMIC);
|
||||
|
||||
level1noise = Gtk::manage (new ThresholdAdjuster (M("TP_WAVELET_LEVONE"), -30., 100., 0., M("TP_WAVELET_STREN"), 1., 0., 100., 0., M("TP_WAVELET_NOIS"), 1., nullptr, false));
|
||||
level1noise->setAdjusterListener (this);
|
||||
level1noise->setUpdatePolicy(RTUP_DYNAMIC);
|
||||
|
||||
level2noise = Gtk::manage (new ThresholdAdjuster (M("TP_WAVELET_LEVTWO"), -30., 100., 0., M("TP_WAVELET_STREN"), 1., 0., 100., 0., M("TP_WAVELET_NOIS"), 1., nullptr, false));
|
||||
level2noise->setAdjusterListener (this);
|
||||
level2noise->setUpdatePolicy(RTUP_DYNAMIC);
|
||||
|
||||
level3noise = Gtk::manage (new ThresholdAdjuster (M("TP_WAVELET_LEVTHRE"), -30., 100., 0., M("TP_WAVELET_STREN"), 1., 0., 100., 0., M("TP_WAVELET_NOIS"), 1., nullptr, false));
|
||||
level3noise->setAdjusterListener (this);
|
||||
level3noise->setUpdatePolicy(RTUP_DYNAMIC);
|
||||
|
||||
@ -419,25 +460,21 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
||||
// Edge Sharpness
|
||||
Gtk::VBox * edgBox = Gtk::manage (new ToolParamBlock());
|
||||
|
||||
edgval = Gtk::manage ( new Adjuster (M("TP_WAVELET_EDVAL"), 0, 100, 1, 0) );
|
||||
edgval->setAdjusterListener(this);
|
||||
edgBox->pack_start(*edgval);
|
||||
|
||||
edgrad = Gtk::manage ( new Adjuster (M("TP_WAVELET_EDRAD"), 0, 100, 1, 15) );
|
||||
edgrad->setAdjusterListener(this);
|
||||
edgBox->pack_start(*edgrad);
|
||||
edgrad->set_tooltip_markup (M("TP_WAVELET_EDRAD_TOOLTIP"));
|
||||
|
||||
edgthresh = Gtk::manage (new Adjuster (M("TP_WAVELET_EDGTHRESH"), -50, 100, 1, 10 ));
|
||||
edgthresh->setAdjusterListener (this);
|
||||
edgthresh->set_tooltip_markup (M("TP_WAVELET_EDGTHRESH_TOOLTIP"));
|
||||
edgBox->pack_start (*edgthresh);
|
||||
|
||||
edbox = Gtk::manage (new Gtk::HBox ());
|
||||
labmedgr = Gtk::manage (new Gtk::Label (M("TP_WAVELET_MEDGREINF") + ":"));
|
||||
Gtk::Label* const labmedgr = Gtk::manage(new Gtk::Label(M("TP_WAVELET_MEDGREINF") + ":"));
|
||||
Gtk::HBox* const edbox = Gtk::manage(new Gtk::HBox());
|
||||
edbox->pack_start (*labmedgr, Gtk::PACK_SHRINK, 1);
|
||||
|
||||
Medgreinf = Gtk::manage (new MyComboBoxText ());
|
||||
Medgreinf->append (M("TP_WAVELET_RE1"));
|
||||
Medgreinf->append (M("TP_WAVELET_RE2"));
|
||||
Medgreinf->append (M("TP_WAVELET_RE3"));
|
||||
@ -446,35 +483,28 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
||||
edbox->pack_start(*Medgreinf);
|
||||
edgBox->pack_start(*edbox);
|
||||
|
||||
Gtk::HSeparator *separatorlc = Gtk::manage (new Gtk::HSeparator());
|
||||
Gtk::HSeparator* const separatorlc = Gtk::manage (new Gtk::HSeparator());
|
||||
edgBox->pack_start(*separatorlc, Gtk::PACK_SHRINK, 2);
|
||||
|
||||
ctboxED = Gtk::manage (new Gtk::HBox ());
|
||||
labmED = Gtk::manage (new Gtk::Label (M("TP_WAVELET_EDTYPE") + ":"));
|
||||
Gtk::Label* const labmED = Gtk::manage(new Gtk::Label(M("TP_WAVELET_EDTYPE") + ":"));
|
||||
Gtk::HBox* const ctboxED = Gtk::manage(new Gtk::HBox());
|
||||
ctboxED->pack_start (*labmED, Gtk::PACK_SHRINK, 1);
|
||||
|
||||
EDmethod = Gtk::manage (new MyComboBoxText ());
|
||||
EDmethod->append (M("TP_WAVELET_EDSL"));
|
||||
EDmethod->append (M("TP_WAVELET_EDCU"));
|
||||
EDmethodconn = EDmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::EDmethodChanged) );
|
||||
ctboxED->pack_start(*EDmethod);
|
||||
edgBox->pack_start (*ctboxED);
|
||||
tr = options.rtSettings.top_right;
|
||||
br = options.rtSettings.bot_right;
|
||||
tl = options.rtSettings.top_left;
|
||||
bl = options.rtSettings.bot_left;
|
||||
|
||||
edgcont = Gtk::manage (new ThresholdAdjuster (M("TP_WAVELET_EDGCONT"), 0., 100., bl, tl, br, tr, 0., false));
|
||||
edgcont->setAdjusterListener (this);
|
||||
edgcont->setBgGradient(milestones2);
|
||||
edgcont->set_tooltip_markup (M("TP_WAVELET_EDGCONT_TOOLTIP"));
|
||||
|
||||
// <-- Edge Sharpness Local Contrast curve
|
||||
CCWcurveEditorG = new CurveEditorGroup (options.lastWaveletCurvesDir, M("TP_WAVELET_CCURVE"));
|
||||
CCWcurveEditorG->setCurveListener (this);
|
||||
|
||||
rtengine::WaveletParams::getDefaultCCWCurve(defaultCurve);
|
||||
ccshape = static_cast<FlatCurveEditor*>(CCWcurveEditorG->addCurve(CT_Flat, "", nullptr, false));
|
||||
ccshape = static_cast<FlatCurveEditor*>(CCWcurveEditorG->addCurve(CT_Flat, "", nullptr, false, false));
|
||||
|
||||
ccshape->setIdentityValue(0.);
|
||||
ccshape->setResetCurve(FlatCurveType(defaultCurve.at(0)), defaultCurve);
|
||||
@ -487,65 +517,52 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
||||
edgBox->pack_start (*edgcont);
|
||||
edgBox->pack_start(*CCWcurveEditorG, Gtk::PACK_SHRINK, 4);
|
||||
|
||||
medianlev = Gtk::manage (new Gtk::CheckButton (M("TP_WAVELET_MEDILEV")));
|
||||
medianlev->set_active (true);
|
||||
medianlevConn = medianlev->signal_toggled().connect( sigc::mem_fun(*this, &Wavelet::medianlevToggled) );
|
||||
medianlev->set_tooltip_text (M("TP_WAVELET_MEDILEV_TOOLTIP"));
|
||||
|
||||
Gtk::HSeparator *separatored1 = Gtk::manage (new Gtk::HSeparator());
|
||||
Gtk::HSeparator* const separatored1 = Gtk::manage (new Gtk::HSeparator());
|
||||
edgBox->pack_start(*separatored1, Gtk::PACK_SHRINK, 2);
|
||||
|
||||
eddebox = Gtk::manage (new Gtk::HBox ());
|
||||
|
||||
Gtk::HBox* const eddebox = Gtk::manage(new Gtk::HBox());
|
||||
edgBox->pack_start (*eddebox);
|
||||
edgBox->pack_start(*medianlev);
|
||||
|
||||
edgedetect = Gtk::manage (new Adjuster (M("TP_WAVELET_EDGEDETECT"), 0, 100, 1, 90));
|
||||
edgedetect->setAdjusterListener (this);
|
||||
edgedetect->set_tooltip_text (M("TP_WAVELET_EDGEDETECT_TOOLTIP"));
|
||||
edgBox->pack_start(*edgedetect);
|
||||
|
||||
edgedetectthr = Gtk::manage (new Adjuster (M("TP_WAVELET_EDGEDETECTTHR"), 0, 100, 1, 20));
|
||||
edgedetectthr->setAdjusterListener (this);
|
||||
edgedetectthr->set_tooltip_text (M("TP_WAVELET_EDGEDETECTTHR_TOOLTIP"));
|
||||
edgBox->pack_start(*edgedetectthr);
|
||||
|
||||
|
||||
edgedetectthr2 = Gtk::manage (new Adjuster (M("TP_WAVELET_EDGEDETECTTHR2"), -10, 100, 1, 0));
|
||||
edgedetectthr2->setAdjusterListener (this);
|
||||
edgBox->pack_start(*edgedetectthr2);
|
||||
|
||||
|
||||
separatoredge = Gtk::manage (new Gtk::HSeparator());
|
||||
|
||||
edgBox->pack_start(*separatoredge, Gtk::PACK_SHRINK, 2);
|
||||
|
||||
lipst = Gtk::manage (new Gtk::CheckButton (M("TP_WAVELET_LIPST")));
|
||||
lipst->set_active (true);
|
||||
lipstConn = lipst->signal_toggled().connect( sigc::mem_fun(*this, &Wavelet::lipstToggled) );
|
||||
// lipst->set_tooltip_text (M("TP_WAVELET_LIPST_TOOLTIP"));
|
||||
edgBox->pack_start(*lipst);
|
||||
|
||||
edgesensi = Gtk::manage (new Adjuster (M("TP_WAVELET_EDGESENSI"), 0, 100, 1, 60));
|
||||
edgesensi->setAdjusterListener (this);
|
||||
edgBox->pack_start(*edgesensi);
|
||||
|
||||
|
||||
edgeampli = Gtk::manage (new Adjuster (M("TP_WAVELET_EDGEAMPLI"), 0, 100, 1, 10));
|
||||
edgeampli->setAdjusterListener (this);
|
||||
edgBox->pack_start(*edgeampli);
|
||||
|
||||
|
||||
Gtk::VBox * ctboxES = Gtk::manage (new Gtk::VBox());
|
||||
Gtk::VBox* const ctboxES = Gtk::manage (new Gtk::VBox());
|
||||
|
||||
ctboxES->set_spacing(2);
|
||||
|
||||
ctboxNP = Gtk::manage (new Gtk::HBox());
|
||||
|
||||
labmNP = Gtk::manage (new Gtk::Label (M("TP_WAVELET_NPTYPE") + ":"));
|
||||
Gtk::HBox* const ctboxNP = Gtk::manage(new Gtk::HBox());
|
||||
ctboxNP->pack_start (*labmNP, Gtk::PACK_SHRINK, 1);
|
||||
|
||||
NPmethod = Gtk::manage (new MyComboBoxText ());
|
||||
NPmethod->append (M("TP_WAVELET_NPNONE"));
|
||||
NPmethod->append (M("TP_WAVELET_NPLOW"));
|
||||
NPmethod->append (M("TP_WAVELET_NPHIGH"));
|
||||
@ -560,24 +577,39 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
||||
// Gamut
|
||||
Gtk::VBox * conBox = Gtk::manage (new ToolParamBlock());
|
||||
|
||||
median = Gtk::manage (new Gtk::CheckButton (M("TP_WAVELET_MEDI")));
|
||||
median->set_active (true);
|
||||
medianConn = median->signal_toggled().connect( sigc::mem_fun(*this, &Wavelet::medianToggled) );
|
||||
conBox->pack_start(*median);
|
||||
|
||||
hueskin = Gtk::manage (new ThresholdAdjuster (M("TP_WAVELET_HUESKIN"), -314., 314., -5., 25., 170., 120., 0, false));
|
||||
hueskin->set_tooltip_markup (M("TP_WAVELET_HUESKIN_TOOLTIP"));
|
||||
|
||||
//from -PI to +PI (radians) convert to hsv and draw bottombar
|
||||
const std::vector<GradientMilestone> milestones = {
|
||||
makeHsvGm(0.0000, 0.4199f, 0.5f, 0.5f), // hsv: 0.4199 rad: -3.14
|
||||
makeHsvGm(0.0540, 0.5000f, 0.5f, 0.5f), // hsv: 0.5 rad: -2.8
|
||||
makeHsvGm(0.1336, 0.6000f, 0.5f, 0.5f), // hsv: 0.60 rad: -2.3
|
||||
makeHsvGm(0.3567, 0.7500f, 0.5f, 0.5f), // hsv: 0.75 rad: -0.9
|
||||
makeHsvGm(0.4363, 0.8560f, 0.5f, 0.5f), // hsv: 0.856 rad: -0.4
|
||||
makeHsvGm(0.4841, 0.9200f, 0.5f, 0.5f), // hsv: 0.92 rad: -0.1
|
||||
makeHsvGm(0.5000, 0.9300f, 0.5f, 0.5f), // hsv: 0.93 rad: 0
|
||||
makeHsvGm(0.5366, 0.9600f, 0.5f, 0.5f), // hsv: 0.96 rad: 0.25
|
||||
makeHsvGm(0.5955, 1.0000f, 0.5f, 0.5f), // hsv: 1. rad: 0.6
|
||||
makeHsvGm(0.6911, 0.0675f, 0.5f, 0.5f), // hsv: 0.0675 rad: 1.2
|
||||
makeHsvGm(0.7229, 0.0900f, 0.5f, 0.5f), // hsv: 0.09 rad: 1.4
|
||||
makeHsvGm(0.7707, 0.1700f, 0.5f, 0.5f), // hsv: 0.17 rad: 1.7
|
||||
makeHsvGm(0.8503, 0.2650f, 0.5f, 0.5f), // hsv: 0.265 rad: 2.1
|
||||
makeHsvGm(0.8981, 0.3240f, 0.5f, 0.5f), // hsv: 0.324 rad: 2.5
|
||||
makeHsvGm(1.0000, 0.4197f, 0.5f, 0.5f) // hsv: 0.419 rad: 3.14
|
||||
};
|
||||
|
||||
hueskin->setBgGradient(milestones);
|
||||
conBox->pack_start(*hueskin);
|
||||
hueskin->setAdjusterListener (this);
|
||||
|
||||
skinprotect = Gtk::manage ( new Adjuster (M("TP_WAVELET_SKIN"), -100, 100, 1, 0.) );
|
||||
skinprotect->setAdjusterListener(this);
|
||||
conBox->pack_start(*skinprotect);
|
||||
skinprotect->set_tooltip_markup (M("TP_WAVELET_SKIN_TOOLTIP"));
|
||||
|
||||
curveEditorGAM = new CurveEditorGroup (options.lastWaveletCurvesDir);
|
||||
curveEditorGAM->setCurveListener (this);
|
||||
|
||||
Chshape = static_cast<FlatCurveEditor*>(curveEditorGAM->addCurve(CT_Flat, M("TP_WAVELET_CURVEEDITOR_CH")));
|
||||
@ -588,7 +620,6 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
||||
|
||||
conBox->pack_start (*curveEditorGAM, Gtk::PACK_SHRINK, 4);
|
||||
|
||||
avoid = Gtk::manage (new Gtk::CheckButton (M("TP_WAVELET_AVOID")));
|
||||
avoid->set_active (true);
|
||||
avoidConn = avoid->signal_toggled().connect( sigc::mem_fun(*this, &Wavelet::avoidToggled) );
|
||||
conBox->pack_start(*avoid);
|
||||
@ -596,128 +627,106 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
||||
// Residual Image
|
||||
Gtk::VBox * resBox = Gtk::manage (new ToolParamBlock());
|
||||
|
||||
rescon = Gtk::manage (new Adjuster (M("TP_WAVELET_RESCON"), -100, 100, 1, 0));
|
||||
rescon->setAdjusterListener (this);
|
||||
resBox->pack_start(*rescon, Gtk::PACK_SHRINK);
|
||||
|
||||
thr = Gtk::manage (new Adjuster (M("TP_WAVELET_THR"), 0, 100, 1, 35));
|
||||
resBox->pack_start(*thr);
|
||||
thr->setAdjusterListener (this);
|
||||
|
||||
resconH = Gtk::manage (new Adjuster (M("TP_WAVELET_RESCONH"), -100, 100, 1, 0));
|
||||
resconH->setAdjusterListener (this);
|
||||
resBox->pack_start(*resconH, Gtk::PACK_SHRINK);
|
||||
|
||||
thrH = Gtk::manage (new Adjuster (M("TP_WAVELET_THRH"), 0, 100, 1, 65));
|
||||
thrH->setAdjusterListener (this);
|
||||
resBox->pack_start(*thrH, Gtk::PACK_SHRINK);
|
||||
|
||||
contrast = Gtk::manage (new Adjuster (M("TP_WAVELET_CONTRA"), -100, 100, 1, 0));
|
||||
contrast->set_tooltip_text (M("TP_WAVELET_CONTRA_TOOLTIP"));
|
||||
contrast->setAdjusterListener (this);
|
||||
resBox->pack_start(*contrast); //keep the possibility to reinstall
|
||||
|
||||
reschro = Gtk::manage (new Adjuster (M("TP_WAVELET_RESCHRO"), -100, 100, 1, 0));
|
||||
reschro->setAdjusterListener (this);
|
||||
resBox->pack_start(*reschro);
|
||||
|
||||
|
||||
ctboxTM = Gtk::manage (new Gtk::HBox ());
|
||||
labmTM = Gtk::manage (new Gtk::Label (M("TP_WAVELET_TMTYPE") + ":"));
|
||||
Gtk::Label* const labmTM = Gtk::manage(new Gtk::Label(M("TP_WAVELET_TMTYPE") + ":"));
|
||||
Gtk::HBox* const ctboxTM = Gtk::manage(new Gtk::HBox());
|
||||
ctboxTM->pack_start (*labmTM, Gtk::PACK_SHRINK, 1);
|
||||
|
||||
Gtk::HSeparator *separatorR0 = Gtk::manage (new Gtk::HSeparator());
|
||||
Gtk::HSeparator* const separatorR0 = Gtk::manage (new Gtk::HSeparator());
|
||||
resBox->pack_start(*separatorR0, Gtk::PACK_SHRINK, 2);
|
||||
|
||||
TMmethod = Gtk::manage (new MyComboBoxText ());
|
||||
TMmethod->append (M("TP_WAVELET_COMPCONT"));
|
||||
TMmethod->append (M("TP_WAVELET_COMPTM"));
|
||||
TMmethodconn = TMmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::TMmethodChanged) );
|
||||
ctboxTM->pack_start(*TMmethod);
|
||||
resBox->pack_start (*ctboxTM);
|
||||
|
||||
tmrs = Gtk::manage(new Adjuster (M("TP_WAVELET_TMSTRENGTH"), -1.0, 2.0, 0.01, 0.0));
|
||||
tmrs->set_tooltip_text (M("TP_WAVELET_TMSTRENGTH_TOOLTIP"));
|
||||
|
||||
resBox->pack_start(*tmrs);
|
||||
tmrs->setAdjusterListener (this);
|
||||
|
||||
gamma = Gtk::manage(new Adjuster (M("TP_WAVELET_COMPGAMMA"), 0.4, 2.0, 0.01, 1.0));
|
||||
gamma->set_tooltip_text (M("TP_WAVELET_COMPGAMMA_TOOLTIP"));
|
||||
resBox->pack_start(*gamma);
|
||||
gamma->setAdjusterListener (this);
|
||||
|
||||
Gtk::HSeparator *separatorR1 = Gtk::manage (new Gtk::HSeparator());
|
||||
Gtk::HSeparator* const separatorR1 = Gtk::manage (new Gtk::HSeparator());
|
||||
resBox->pack_start(*separatorR1, Gtk::PACK_SHRINK, 2);
|
||||
|
||||
hueskin2 = Gtk::manage (new ThresholdAdjuster (M("TP_WAVELET_HUESKY"), -314., 314., -260., -250, -130., -140., 0, false));
|
||||
hueskin2->set_tooltip_markup (M("TP_WAVELET_HUESKY_TOOLTIP"));
|
||||
hueskin2->setBgGradient(milestones);
|
||||
resBox->pack_start(*hueskin2);
|
||||
hueskin2->setAdjusterListener (this);
|
||||
|
||||
sky = Gtk::manage (new Adjuster (M("TP_WAVELET_SKY"), -100., 100.0, 1., 0.));
|
||||
sky->set_tooltip_text (M("TP_WAVELET_SKY_TOOLTIP"));
|
||||
sky->setAdjusterListener (this);
|
||||
|
||||
resBox->pack_start(*sky);
|
||||
|
||||
// whole hue range
|
||||
milestones.clear();
|
||||
const std::vector<GradientMilestone> milestones3 = makeWholeHueRange();
|
||||
|
||||
for (int i = 0; i < 7; i++) {
|
||||
float R, G, B;
|
||||
float x = float(i) * (1.0f / 6.0);
|
||||
Color::hsv2rgb01(x, 0.5f, 0.5f, R, G, B);
|
||||
milestones.push_back( GradientMilestone(double(x), double(R), double(G), double(B)) );
|
||||
}
|
||||
|
||||
curveEditorRES = new CurveEditorGroup (options.lastWaveletCurvesDir);
|
||||
curveEditorRES->setCurveListener (this);
|
||||
|
||||
hhshape = static_cast<FlatCurveEditor*>(curveEditorRES->addCurve(CT_Flat, M("TP_WAVELET_CURVEEDITOR_HH")));
|
||||
hhshape->setTooltip(M("TP_WAVELET_CURVEEDITOR_HH_TOOLTIP"));
|
||||
hhshape->setCurveColorProvider(this, 5);
|
||||
curveEditorRES->curveListComplete();
|
||||
hhshape->setBottomBarBgGradient(milestones);
|
||||
hhshape->setBottomBarBgGradient(milestones3);
|
||||
|
||||
resBox->pack_start (*curveEditorRES, Gtk::PACK_SHRINK, 4);
|
||||
|
||||
// Toning and Color Balance
|
||||
Gtk::HSeparator *separatorCB = Gtk::manage (new Gtk::HSeparator());
|
||||
Gtk::HSeparator* const separatorCB = Gtk::manage (new Gtk::HSeparator());
|
||||
|
||||
Gtk::VBox *chanMixerHLBox = Gtk::manage (new Gtk::VBox());
|
||||
Gtk::VBox *chanMixerMidBox = Gtk::manage (new Gtk::VBox());
|
||||
Gtk::VBox *chanMixerShadowsBox = Gtk::manage (new Gtk::VBox());
|
||||
Gtk::VBox* const chanMixerHLBox = Gtk::manage (new Gtk::VBox());
|
||||
Gtk::VBox* const chanMixerMidBox = Gtk::manage (new Gtk::VBox());
|
||||
Gtk::VBox* const chanMixerShadowsBox = Gtk::manage (new Gtk::VBox());
|
||||
|
||||
cbenab = Gtk::manage (new Gtk::CheckButton (M("TP_WAVELET_CBENAB")));
|
||||
cbenab->set_active (true);
|
||||
cbenabConn = cbenab->signal_toggled().connect( sigc::mem_fun(*this, &Wavelet::cbenabToggled) );
|
||||
cbenab->set_tooltip_text (M("TP_WAVELET_CB_TOOLTIP"));
|
||||
|
||||
Gtk::Image* iblueR = Gtk::manage (new RTImage ("ajd-wb-temp1.png"));
|
||||
Gtk::Image* iyelL = Gtk::manage (new RTImage ("ajd-wb-temp2.png"));
|
||||
Gtk::Image* imagL = Gtk::manage (new RTImage ("ajd-wb-green1.png"));
|
||||
Gtk::Image* igreenR = Gtk::manage (new RTImage ("ajd-wb-green2.png"));
|
||||
Gtk::Image* const iblueR = Gtk::manage (new RTImage ("ajd-wb-temp1.png"));
|
||||
Gtk::Image* const iyelL = Gtk::manage (new RTImage ("ajd-wb-temp2.png"));
|
||||
Gtk::Image* const imagL = Gtk::manage (new RTImage ("ajd-wb-green1.png"));
|
||||
Gtk::Image* const igreenR = Gtk::manage (new RTImage ("ajd-wb-green2.png"));
|
||||
|
||||
Gtk::Image* iblueRm = Gtk::manage (new RTImage ("ajd-wb-temp1.png"));
|
||||
Gtk::Image* iyelLm = Gtk::manage (new RTImage ("ajd-wb-temp2.png"));
|
||||
Gtk::Image* imagLm = Gtk::manage (new RTImage ("ajd-wb-green1.png"));
|
||||
Gtk::Image* igreenRm = Gtk::manage (new RTImage ("ajd-wb-green2.png"));
|
||||
Gtk::Image* const iblueRm = Gtk::manage (new RTImage ("ajd-wb-temp1.png"));
|
||||
Gtk::Image* const iyelLm = Gtk::manage (new RTImage ("ajd-wb-temp2.png"));
|
||||
Gtk::Image* const imagLm = Gtk::manage (new RTImage ("ajd-wb-green1.png"));
|
||||
Gtk::Image* const igreenRm = Gtk::manage (new RTImage ("ajd-wb-green2.png"));
|
||||
|
||||
Gtk::Image* iblueRh = Gtk::manage (new RTImage ("ajd-wb-temp1.png"));
|
||||
Gtk::Image* iyelLh = Gtk::manage (new RTImage ("ajd-wb-temp2.png"));
|
||||
Gtk::Image* imagLh = Gtk::manage (new RTImage ("ajd-wb-green1.png"));
|
||||
Gtk::Image* igreenRh = Gtk::manage (new RTImage ("ajd-wb-green2.png"));
|
||||
Gtk::Image* const iblueRh = Gtk::manage (new RTImage ("ajd-wb-temp1.png"));
|
||||
Gtk::Image* const iyelLh = Gtk::manage (new RTImage ("ajd-wb-temp2.png"));
|
||||
Gtk::Image* const imagLh = Gtk::manage (new RTImage ("ajd-wb-green1.png"));
|
||||
Gtk::Image* const igreenRh = Gtk::manage (new RTImage ("ajd-wb-green2.png"));
|
||||
|
||||
greenhigh = Gtk::manage (new Adjuster ("", -100., 100., 1., 0., igreenRh, imagLh));
|
||||
bluehigh = Gtk::manage (new Adjuster ("", -100., 100., 1., 0., iblueRh, iyelLh));
|
||||
|
||||
greenmed = Gtk::manage (new Adjuster ("", -100., 100., 1., 0., igreenRm, imagLm));
|
||||
bluemed = Gtk::manage (new Adjuster ("", -100., 100., 1., 0. , iblueRm , iyelLm));
|
||||
|
||||
greenlow = Gtk::manage (new Adjuster ("", -100., 100., 1., 0., igreenR, imagL));
|
||||
bluelow = Gtk::manage (new Adjuster ("", -100., 100., 1., 0., iblueR , iyelL));
|
||||
bluehigh = Gtk::manage (new Adjuster ("", -100., 100., 1., 0., iblueRh, iyelLh));
|
||||
greenmed = Gtk::manage (new Adjuster ("", -100., 100., 1., 0., igreenRm, imagLm));
|
||||
bluemed = Gtk::manage (new Adjuster ("", -100., 100., 1., 0. , iblueRm , iyelLm));
|
||||
greenlow = Gtk::manage (new Adjuster ("", -100., 100., 1., 0., igreenR, imagL));
|
||||
bluelow = Gtk::manage (new Adjuster ("", -100., 100., 1., 0., iblueR , iyelL));
|
||||
|
||||
chanMixerHLBox->pack_start (*greenhigh);
|
||||
chanMixerHLBox->pack_start (*bluehigh);
|
||||
@ -735,10 +744,6 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
||||
|
||||
resBox->pack_start(*separatorCB, Gtk::PACK_SHRINK);
|
||||
|
||||
chanMixerHLFrame = Gtk::manage (new Gtk::Frame(M("TP_COLORTONING_HIGHLIGHT")));
|
||||
chanMixerMidFrame = Gtk::manage (new Gtk::Frame(M("TP_COLORTONING_MIDTONES")));
|
||||
chanMixerShadowsFrame = Gtk::manage (new Gtk::Frame(M("TP_COLORTONING_SHADOWS")));
|
||||
|
||||
chanMixerHLFrame->add(*chanMixerHLBox);
|
||||
chanMixerMidFrame->add(*chanMixerMidBox);
|
||||
chanMixerShadowsFrame->add(*chanMixerShadowsBox);
|
||||
@ -748,12 +753,9 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
||||
resBox->pack_start(*chanMixerMidFrame, Gtk::PACK_SHRINK);
|
||||
resBox->pack_start(*chanMixerShadowsFrame, Gtk::PACK_SHRINK);
|
||||
|
||||
// Reset sliders
|
||||
neutrHBox = Gtk::manage (new Gtk::HBox ());
|
||||
|
||||
neutral = Gtk::manage (new Gtk::Button (M("TP_COLORTONING_NEUTRAL")));
|
||||
//RTImage *resetImg = Gtk::manage (new RTImage ("gtk-undo-ltr-small.png", "gtk-undo-rtl-small.png"));
|
||||
//neutral->set_image(*resetImg);
|
||||
Gtk::Button* const neutral = Gtk::manage(new Gtk::Button(M("TP_COLORTONING_NEUTRAL")));
|
||||
neutral->set_tooltip_text (M("TP_COLORTONING_NEUTRAL_TIP"));
|
||||
neutralconn = neutral->signal_pressed().connect( sigc::mem_fun(*this, &Wavelet::neutral_pressed) );
|
||||
neutral->show();
|
||||
@ -762,18 +764,16 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
||||
resBox->pack_start (*neutrHBox);
|
||||
|
||||
// Final Touchup
|
||||
Gtk::VBox * ctboxBA = Gtk::manage (new Gtk::VBox());
|
||||
Gtk::VBox* const ctboxBA = Gtk::manage (new Gtk::VBox());
|
||||
|
||||
ctboxBA->set_spacing(2);
|
||||
|
||||
//Gtk::HSeparator *separatorfin = Gtk::manage (new Gtk::HSeparator());
|
||||
//ctboxBA->pack_start(*separatorfin, Gtk::PACK_SHRINK, 2);
|
||||
ctboxFI = Gtk::manage (new Gtk::HBox());
|
||||
|
||||
labmBA = Gtk::manage (new Gtk::Label (M("TP_WAVELET_BATYPE") + ":"));
|
||||
Gtk::Label* const labmBA = Gtk::manage(new Gtk::Label(M("TP_WAVELET_BATYPE") + ":"));
|
||||
Gtk::HBox* const ctboxFI = Gtk::manage(new Gtk::HBox());
|
||||
ctboxFI->pack_start (*labmBA, Gtk::PACK_SHRINK, 1);
|
||||
|
||||
BAmethod = Gtk::manage (new MyComboBoxText ());
|
||||
BAmethod->append (M("TP_WAVELET_BANONE"));
|
||||
BAmethod->append (M("TP_WAVELET_BASLI"));
|
||||
BAmethod->append (M("TP_WAVELET_BACUR"));
|
||||
@ -781,39 +781,30 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
||||
ctboxFI->pack_start(*BAmethod);
|
||||
ctboxBA->pack_start(*ctboxFI);
|
||||
|
||||
balance = Gtk::manage (new Adjuster (M("TP_WAVELET_BALANCE"), -30, 100, 1, 0));
|
||||
balance->setAdjusterListener (this);
|
||||
balance->set_tooltip_text (M("TP_WAVELET_BALANCE_TOOLTIP"));
|
||||
std::vector<GradientMilestone> milestonesW;
|
||||
|
||||
milestonesW.clear();
|
||||
milestonesW.push_back( GradientMilestone(0., 0., 0., 0.) );
|
||||
milestonesW.push_back( GradientMilestone(1., 1., 1., 1.) );
|
||||
|
||||
opacityCurveEditorW = new CurveEditorGroup (options.lastWaveletCurvesDir, M("TP_WAVELET_OPACITYW"));
|
||||
opacityCurveEditorW->setCurveListener (this);
|
||||
|
||||
rtengine::WaveletParams::getDefaultOpacityCurveW(defaultCurve);
|
||||
opacityShape = static_cast<FlatCurveEditor*>(opacityCurveEditorW->addCurve(CT_Flat, "", nullptr, false));
|
||||
opacityShape = static_cast<FlatCurveEditor*>(opacityCurveEditorW->addCurve(CT_Flat, "", nullptr, false, false));
|
||||
opacityShape->setIdentityValue(0.);
|
||||
opacityShape->setResetCurve(FlatCurveType(defaultCurve.at(0)), defaultCurve);
|
||||
opacityShape->setBottomBarBgGradient(milestonesW);
|
||||
opacityShape->setBottomBarBgGradient(milestones2);
|
||||
|
||||
// This will add the reset button at the end of the curveType buttons
|
||||
opacityCurveEditorW->curveListComplete();
|
||||
opacityCurveEditorW->show();
|
||||
|
||||
iter = Gtk::manage (new Adjuster (M("TP_WAVELET_ITER"), -3, 3, 1, 0));
|
||||
iter->setAdjusterListener (this);
|
||||
iter->set_tooltip_text (M("TP_WAVELET_ITER_TOOLTIP"));
|
||||
|
||||
Gtk::HSeparator *separatorbalend = Gtk::manage (new Gtk::HSeparator());
|
||||
Gtk::HSeparator* const separatorbalend = Gtk::manage (new Gtk::HSeparator());
|
||||
|
||||
opacityCurveEditorWL = new CurveEditorGroup (options.lastWaveletCurvesDir, M("TP_WAVELET_OPACITYWL"));
|
||||
opacityCurveEditorWL->setCurveListener (this);
|
||||
|
||||
rtengine::WaveletParams::getDefaultOpacityCurveWL(defaultCurve);
|
||||
opacityShapeWL = static_cast<FlatCurveEditor*>(opacityCurveEditorWL->addCurve(CT_Flat, "", nullptr, false));
|
||||
opacityShapeWL = static_cast<FlatCurveEditor*>(opacityCurveEditorWL->addCurve(CT_Flat, "", nullptr, false, false));
|
||||
opacityShapeWL->setIdentityValue(0.);
|
||||
opacityShapeWL->setResetCurve(FlatCurveType(defaultCurve.at(0)), defaultCurve);
|
||||
opacityShapeWL->setTooltip(M("TP_WAVELET_OPACITYWL_TOOLTIP"));
|
||||
@ -822,21 +813,15 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
||||
opacityCurveEditorWL->curveListComplete();
|
||||
opacityCurveEditorWL->show();
|
||||
|
||||
curveEditorG = new CurveEditorGroup (options.lastWaveletCurvesDir, M("TP_WAVELET_CONTEDIT"));
|
||||
curveEditorG->setCurveListener (this);
|
||||
|
||||
clshape = static_cast<DiagonalCurveEditor*>(curveEditorG->addCurve(CT_Diagonal, M("TP_WAVELET_CURVEEDITOR_CL")));
|
||||
clshape->setTooltip(M("TP_WAVELET_CURVEEDITOR_CL_TOOLTIP"));
|
||||
std::vector<GradientMilestone> milestones22;
|
||||
|
||||
milestones22.push_back( GradientMilestone(0., 0., 0., 0.) );
|
||||
milestones22.push_back( GradientMilestone(1., 1., 1., 1.) );
|
||||
clshape->setBottomBarBgGradient(milestones22);
|
||||
clshape->setLeftBarBgGradient(milestones22);
|
||||
clshape->setBottomBarBgGradient(milestones2);
|
||||
clshape->setLeftBarBgGradient(milestones2);
|
||||
|
||||
curveEditorG->curveListComplete();
|
||||
|
||||
tmr = Gtk::manage (new Gtk::CheckButton (M("TP_WAVELET_BALCHRO")));
|
||||
tmr->set_active (true);
|
||||
tmr->set_tooltip_text (M("TP_WAVELET_BALCHRO_TOOLTIP"));
|
||||
tmrConn = tmr->signal_toggled().connect( sigc::mem_fun(*this, &Wavelet::tmrToggled) );
|
||||
|
352
rtgui/wavelet.h
352
rtgui/wavelet.h
@ -17,8 +17,7 @@
|
||||
* 2014 Jacques Desmis <jdesmis@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef WAVELET_H_INCLUDED
|
||||
#define WAVELET_H_INCLUDED
|
||||
#pragma once
|
||||
|
||||
#include <gtkmm.h>
|
||||
#include "adjuster.h"
|
||||
@ -30,208 +29,15 @@
|
||||
#include "guiutils.h"
|
||||
#include "options.h"
|
||||
|
||||
class Wavelet : public ToolParamBlock, public ThresholdAdjusterListener, public AdjusterListener, public CurveListener, public ColorProvider, public rtengine::WaveletListener, public FoldableToolPanel
|
||||
class Wavelet :
|
||||
public ToolParamBlock,
|
||||
public ThresholdAdjusterListener,
|
||||
public AdjusterListener,
|
||||
public CurveListener,
|
||||
public ColorProvider,
|
||||
public rtengine::WaveletListener,
|
||||
public FoldableToolPanel
|
||||
{
|
||||
protected:
|
||||
Glib::RefPtr<Gtk::Tooltip> bgTTips;
|
||||
Glib::RefPtr<Gtk::Tooltip> srTTips;
|
||||
Glib::RefPtr<Gdk::Pixbuf> bgPixbuf;
|
||||
Glib::RefPtr<Gdk::Pixbuf> srPixbuf;
|
||||
CurveEditorGroup* curveEditorG;
|
||||
|
||||
CurveEditorGroup* CCWcurveEditorG;
|
||||
CurveEditorGroup* curveEditorRES;
|
||||
CurveEditorGroup* curveEditorGAM;
|
||||
Gtk::HSeparator* colorSep;
|
||||
Gtk::HSeparator* separator3;
|
||||
Gtk::HSeparator* separatorCB;
|
||||
Gtk::HSeparator* separatorNeutral;
|
||||
Gtk::HSeparator* separatoredge;
|
||||
|
||||
CurveEditorGroup* opaCurveEditorG;
|
||||
FlatCurveEditor* opacityShapeRG;
|
||||
CurveEditorGroup* opacityCurveEditorG;
|
||||
FlatCurveEditor* opacityShapeBY;
|
||||
CurveEditorGroup* opacityCurveEditorW;
|
||||
CurveEditorGroup* opacityCurveEditorWL;
|
||||
FlatCurveEditor* opacityShape;
|
||||
FlatCurveEditor* opacityShapeWL;
|
||||
FlatCurveEditor* hhshape;
|
||||
FlatCurveEditor* Chshape;
|
||||
DiagonalCurveEditor* clshape;
|
||||
Gtk::VBox* chanMixerBox;
|
||||
|
||||
FlatCurveEditor* ccshape;
|
||||
Gtk::CheckButton * display;
|
||||
Gtk::CheckButton * displaylevel;
|
||||
Gtk::CheckButton * displaychro;
|
||||
Gtk::CheckButton * displaygam;
|
||||
Gtk::CheckButton * displayres;
|
||||
Gtk::CheckButton * median;
|
||||
Gtk::CheckButton * medianlev;
|
||||
Gtk::CheckButton * linkedg;
|
||||
Gtk::CheckButton * cbenab;
|
||||
Gtk::CheckButton * lipst;
|
||||
Gtk::CheckButton * avoid;
|
||||
Gtk::CheckButton * tmr;
|
||||
|
||||
Gtk::Button * neutralchButton;
|
||||
Adjuster* correction[9];
|
||||
Adjuster* correctionch[9];
|
||||
Adjuster* rescon;
|
||||
Adjuster* resconH;
|
||||
Adjuster* reschro;
|
||||
Adjuster* tmrs;
|
||||
Adjuster* gamma;
|
||||
Adjuster* sup;
|
||||
Adjuster* sky;
|
||||
Adjuster* thres;
|
||||
Adjuster* chroma;
|
||||
Adjuster* chro;
|
||||
Adjuster* contrast;
|
||||
Adjuster* thr;
|
||||
Adjuster* thrH;
|
||||
Adjuster* skinprotect;
|
||||
Adjuster* edgrad;
|
||||
Adjuster* edgval;
|
||||
Adjuster* edgthresh;
|
||||
Adjuster* strength;
|
||||
Adjuster* balance;
|
||||
Adjuster* iter;
|
||||
Adjuster* greenlow;
|
||||
Adjuster* bluelow;
|
||||
Adjuster* greenmed;
|
||||
Adjuster* bluemed;
|
||||
Adjuster* greenhigh;
|
||||
Adjuster* bluehigh;
|
||||
|
||||
ThresholdAdjuster* hueskin;
|
||||
ThresholdAdjuster* hueskin2;
|
||||
ThresholdAdjuster* hllev;
|
||||
ThresholdAdjuster* bllev;
|
||||
ThresholdAdjuster* pastlev;
|
||||
ThresholdAdjuster* satlev;
|
||||
ThresholdAdjuster* edgcont;
|
||||
ThresholdAdjuster* level0noise;
|
||||
ThresholdAdjuster* level1noise;
|
||||
ThresholdAdjuster* level2noise;
|
||||
ThresholdAdjuster* level3noise;
|
||||
|
||||
Adjuster* threshold;
|
||||
Adjuster* threshold2;
|
||||
Adjuster* edgedetect;
|
||||
Adjuster* edgedetectthr;
|
||||
Adjuster* edgedetectthr2;
|
||||
Adjuster* edgesensi;
|
||||
Adjuster* edgeampli;
|
||||
MyComboBoxText* Lmethod;
|
||||
sigc::connection Lmethodconn;
|
||||
MyComboBoxText* CHmethod;
|
||||
sigc::connection CHmethodconn;
|
||||
MyComboBoxText* CHSLmethod;
|
||||
sigc::connection CHSLmethodconn;
|
||||
MyComboBoxText* EDmethod;
|
||||
sigc::connection EDmethodconn;
|
||||
MyComboBoxText* BAmethod;
|
||||
sigc::connection BAmethodconn;
|
||||
MyComboBoxText* NPmethod;
|
||||
sigc::connection NPmethodconn;
|
||||
MyComboBoxText* TMmethod;
|
||||
sigc::connection TMmethodconn;
|
||||
MyComboBoxText* HSmethod;
|
||||
sigc::connection HSmethodconn;
|
||||
MyComboBoxText* CLmethod;
|
||||
sigc::connection CLmethodconn;
|
||||
MyComboBoxText* Backmethod;
|
||||
sigc::connection Backmethodconn;
|
||||
MyComboBoxText* Tilesmethod;
|
||||
sigc::connection Tilesmethodconn;
|
||||
MyComboBoxText* daubcoeffmethod;
|
||||
sigc::connection daubcoeffmethodconn;
|
||||
MyComboBoxText* Dirmethod;
|
||||
sigc::connection Dirmethodconn;
|
||||
MyComboBoxText* Medgreinf;
|
||||
sigc::connection MedgreinfConn;
|
||||
Gtk::Frame* settingsFrame;
|
||||
Gtk::Frame* toningFrame;
|
||||
Gtk::Frame* residualFrame;
|
||||
Gtk::Frame* dispFrame;
|
||||
Gtk::Frame* levelFrame;
|
||||
Gtk::Frame* chromaFrame;
|
||||
Gtk::Frame* controlFrame;
|
||||
Gtk::Frame* edgeFrame;
|
||||
Gtk::Frame* noiseFrame;
|
||||
Gtk::Frame* contrastSHFrame;
|
||||
Gtk::Frame* finalFrame;
|
||||
Gtk::Frame *chanMixerHLFrame;
|
||||
Gtk::Frame *chanMixerMidFrame;
|
||||
Gtk::Frame *chanMixerShadowsFrame;
|
||||
Gtk::Frame *dFrame;
|
||||
|
||||
Gtk::Label* colLabel;
|
||||
Gtk::Label* interLabel;
|
||||
Gtk::Label* wavLabels;
|
||||
Gtk::Label* hsmethodLabel;
|
||||
Gtk::Label* daubcoeffLabel;
|
||||
Gtk::Label* ColorBalanceLabel;
|
||||
Gtk::Label* labmC;
|
||||
Gtk::Label* labmch;
|
||||
Gtk::Label* labmED;
|
||||
Gtk::Label* labmTM;
|
||||
Gtk::Label* labmBA;
|
||||
Gtk::Label* labmNP;
|
||||
Gtk::Label* labmedgr;
|
||||
Gtk::Label* labmednois;
|
||||
MyExpander* expchroma;
|
||||
MyExpander* expcontrast;
|
||||
MyExpander* expedge;
|
||||
MyExpander* expfinal;
|
||||
MyExpander* expgamut;
|
||||
MyExpander* expnoise;
|
||||
MyExpander* expresid;
|
||||
MyExpander* expsettings;
|
||||
MyExpander* exptoning;
|
||||
Gtk::HBox* ctboxCB;
|
||||
Gtk::HBox* ctboxCH;
|
||||
Gtk::HBox* ctboxED;
|
||||
Gtk::HBox* ctboxTM;
|
||||
Gtk::HBox* hbresid;
|
||||
Gtk::HBox* backgroundHBox;
|
||||
Gtk::HBox* daubcoeffHBox;
|
||||
Gtk::HBox* hsmethodHBox;
|
||||
Gtk::HBox* levdirMainHBox;
|
||||
Gtk::HBox* levdirSubHBox;
|
||||
Gtk::HBox* tilesizeHBox;
|
||||
|
||||
Gtk::HBox* ctboxFI;
|
||||
Gtk::HBox* ctboxNP;
|
||||
Gtk::HBox* ctboxch;
|
||||
Gtk::HBox* edbox;
|
||||
Gtk::HBox* ednoisbox;
|
||||
Gtk::HBox* eddebox;
|
||||
Gtk::VBox* settingsVBox;
|
||||
Gtk::VBox* contrastSHVBox;
|
||||
Gtk::Label* tilesizeLabel;
|
||||
Gtk::Label* levdirMainLabel;
|
||||
Gtk::Label* backgroundLabel;
|
||||
Gtk::Button* neutral;
|
||||
Gtk::HBox* neutrHBox;
|
||||
|
||||
sigc::connection enableChromaConn, enableContrastConn, enableEdgeConn, enableFinalConn;
|
||||
sigc::connection enableNoiseConn, enableResidConn, enableToningConn;
|
||||
sigc::connection expConn, medianConn, avoidConn, tmrConn, medianlevConn, linkedgConn, lipstConn, cbenabConn, neutralconn;
|
||||
sigc::connection neutralPressedConn;
|
||||
sigc::connection contrastPlusPressedConn;
|
||||
sigc::connection contrastMinusPressedConn;
|
||||
sigc::connection neutralchPressedConn;
|
||||
|
||||
bool lastdisplay, lastdisplaygam, lastdisplayres, lastdisplaychro, lastdisplaylevel, lastmedian, lastmedianlev, lastlinkedg, lastavoid, lastlipst, lasttmr, lastcbenab;
|
||||
int nextnlevel;
|
||||
double tr;
|
||||
double br;
|
||||
double tl;
|
||||
double bl;
|
||||
|
||||
public:
|
||||
Wavelet ();
|
||||
virtual ~Wavelet ();
|
||||
@ -251,7 +57,6 @@ public:
|
||||
void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr);
|
||||
void writeOptions (std::vector<int> &tpOpen);
|
||||
|
||||
|
||||
private:
|
||||
void foldAllButMe (GdkEventButton* event, MyExpander *expander);
|
||||
|
||||
@ -306,8 +111,141 @@ private:
|
||||
void cbenabUpdateUI ();
|
||||
void lipstUpdateUI ();
|
||||
|
||||
|
||||
void enableToggled(MyExpander *expander);
|
||||
};
|
||||
|
||||
#endif
|
||||
CurveEditorGroup* const curveEditorG;
|
||||
|
||||
CurveEditorGroup* const CCWcurveEditorG;
|
||||
CurveEditorGroup* const curveEditorRES;
|
||||
CurveEditorGroup* const curveEditorGAM;
|
||||
Gtk::HSeparator* const separatorNeutral;
|
||||
Gtk::HSeparator* const separatoredge;
|
||||
|
||||
CurveEditorGroup* const opaCurveEditorG;
|
||||
FlatCurveEditor* opacityShapeRG;
|
||||
CurveEditorGroup* const opacityCurveEditorG;
|
||||
FlatCurveEditor* opacityShapeBY;
|
||||
CurveEditorGroup* const opacityCurveEditorW;
|
||||
CurveEditorGroup* const opacityCurveEditorWL;
|
||||
FlatCurveEditor* opacityShape;
|
||||
FlatCurveEditor* opacityShapeWL;
|
||||
FlatCurveEditor* hhshape;
|
||||
FlatCurveEditor* Chshape;
|
||||
DiagonalCurveEditor* clshape;
|
||||
|
||||
FlatCurveEditor* ccshape;
|
||||
Gtk::CheckButton* const median;
|
||||
Gtk::CheckButton* const medianlev;
|
||||
Gtk::CheckButton* const linkedg;
|
||||
Gtk::CheckButton* const cbenab;
|
||||
Gtk::CheckButton* const lipst;
|
||||
Gtk::CheckButton* const avoid;
|
||||
Gtk::CheckButton* const tmr;
|
||||
|
||||
Gtk::Button* const neutralchButton;
|
||||
Adjuster* correction[9];
|
||||
Adjuster* correctionch[9];
|
||||
Adjuster* const rescon;
|
||||
Adjuster* const resconH;
|
||||
Adjuster* const reschro;
|
||||
Adjuster* const tmrs;
|
||||
Adjuster* const gamma;
|
||||
Adjuster* const sup;
|
||||
Adjuster* const sky;
|
||||
Adjuster* const thres;
|
||||
Adjuster* const chroma;
|
||||
Adjuster* const chro;
|
||||
Adjuster* const contrast;
|
||||
Adjuster* const thr;
|
||||
Adjuster* const thrH;
|
||||
Adjuster* const skinprotect;
|
||||
Adjuster* const edgrad;
|
||||
Adjuster* const edgval;
|
||||
Adjuster* const edgthresh;
|
||||
Adjuster* const strength;
|
||||
Adjuster* const balance;
|
||||
Adjuster* const iter;
|
||||
Adjuster* greenlow;
|
||||
Adjuster* bluelow;
|
||||
Adjuster* greenmed;
|
||||
Adjuster* bluemed;
|
||||
Adjuster* greenhigh;
|
||||
Adjuster* bluehigh;
|
||||
|
||||
ThresholdAdjuster* const hueskin;
|
||||
ThresholdAdjuster* const hueskin2;
|
||||
ThresholdAdjuster* const hllev;
|
||||
ThresholdAdjuster* const bllev;
|
||||
ThresholdAdjuster* const pastlev;
|
||||
ThresholdAdjuster* const satlev;
|
||||
ThresholdAdjuster* const edgcont;
|
||||
ThresholdAdjuster* const level0noise;
|
||||
ThresholdAdjuster* const level1noise;
|
||||
ThresholdAdjuster* const level2noise;
|
||||
ThresholdAdjuster* const level3noise;
|
||||
|
||||
Adjuster* const threshold;
|
||||
Adjuster* const threshold2;
|
||||
Adjuster* const edgedetect;
|
||||
Adjuster* const edgedetectthr;
|
||||
Adjuster* const edgedetectthr2;
|
||||
Adjuster* const edgesensi;
|
||||
Adjuster* const edgeampli;
|
||||
MyComboBoxText* const Lmethod;
|
||||
sigc::connection Lmethodconn;
|
||||
MyComboBoxText* const CHmethod;
|
||||
sigc::connection CHmethodconn;
|
||||
MyComboBoxText* const CHSLmethod;
|
||||
sigc::connection CHSLmethodconn;
|
||||
MyComboBoxText* const EDmethod;
|
||||
sigc::connection EDmethodconn;
|
||||
MyComboBoxText* const BAmethod;
|
||||
sigc::connection BAmethodconn;
|
||||
MyComboBoxText* const NPmethod;
|
||||
sigc::connection NPmethodconn;
|
||||
MyComboBoxText* const TMmethod;
|
||||
sigc::connection TMmethodconn;
|
||||
MyComboBoxText* const HSmethod;
|
||||
sigc::connection HSmethodconn;
|
||||
MyComboBoxText* const CLmethod;
|
||||
sigc::connection CLmethodconn;
|
||||
MyComboBoxText* const Backmethod;
|
||||
sigc::connection Backmethodconn;
|
||||
MyComboBoxText* const Tilesmethod;
|
||||
sigc::connection Tilesmethodconn;
|
||||
MyComboBoxText* const daubcoeffmethod;
|
||||
sigc::connection daubcoeffmethodconn;
|
||||
MyComboBoxText* const Dirmethod;
|
||||
sigc::connection Dirmethodconn;
|
||||
MyComboBoxText* const Medgreinf;
|
||||
sigc::connection MedgreinfConn;
|
||||
Gtk::Frame* const chanMixerHLFrame;
|
||||
Gtk::Frame* const chanMixerMidFrame;
|
||||
Gtk::Frame* const chanMixerShadowsFrame;
|
||||
|
||||
Gtk::Label* const wavLabels;
|
||||
Gtk::Label* const labmC;
|
||||
Gtk::Label* const labmNP;
|
||||
MyExpander* const expchroma;
|
||||
MyExpander* const expcontrast;
|
||||
MyExpander* const expedge;
|
||||
MyExpander* const expfinal;
|
||||
MyExpander* const expgamut;
|
||||
MyExpander* const expnoise;
|
||||
MyExpander* const expresid;
|
||||
MyExpander* const expsettings;
|
||||
MyExpander* const exptoning;
|
||||
|
||||
Gtk::HBox* const neutrHBox;
|
||||
|
||||
sigc::connection enableChromaConn, enableContrastConn, enableEdgeConn, enableFinalConn;
|
||||
sigc::connection enableNoiseConn, enableResidConn, enableToningConn;
|
||||
sigc::connection medianConn, avoidConn, tmrConn, medianlevConn, linkedgConn, lipstConn, cbenabConn, neutralconn;
|
||||
sigc::connection neutralPressedConn;
|
||||
sigc::connection contrastPlusPressedConn;
|
||||
sigc::connection contrastMinusPressedConn;
|
||||
sigc::connection neutralchPressedConn;
|
||||
|
||||
bool lastmedian, lastmedianlev, lastlinkedg, lastavoid, lastlipst, lasttmr, lastcbenab;
|
||||
int nextnlevel;
|
||||
};
|
||||
|
@ -151,6 +151,7 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, "whitebalance", M("TP_WB
|
||||
{
|
||||
|
||||
Gtk::HBox* hbox = Gtk::manage (new Gtk::HBox ());
|
||||
hbox->set_spacing(4);
|
||||
hbox->show ();
|
||||
Gtk::Label* lab = Gtk::manage (new Gtk::Label (M("TP_WBALANCE_METHOD")));
|
||||
lab->show ();
|
||||
@ -238,14 +239,19 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, "whitebalance", M("TP_WB
|
||||
method->pack_start(methodColumns.colIcon, false);
|
||||
method->pack_start(methodColumns.colLabel, true);
|
||||
|
||||
std::vector<Gtk::CellRenderer*> cells = method->get_cells();
|
||||
Gtk::CellRendererText* cellRenderer = dynamic_cast<Gtk::CellRendererText*>(cells.at(1));
|
||||
cellRenderer->property_ellipsize() = Pango::ELLIPSIZE_MIDDLE;
|
||||
|
||||
method->set_active (0); // Camera
|
||||
method->show ();
|
||||
hbox->pack_start (*lab, Gtk::PACK_SHRINK, 4);
|
||||
hbox->pack_start (*lab, Gtk::PACK_SHRINK, 0);
|
||||
hbox->pack_start (*method);
|
||||
pack_start (*hbox, Gtk::PACK_SHRINK, 4);
|
||||
pack_start (*hbox, Gtk::PACK_SHRINK, 0);
|
||||
opt = 0;
|
||||
|
||||
Gtk::HBox* spotbox = Gtk::manage (new Gtk::HBox ());
|
||||
spotbox->set_spacing(4);
|
||||
spotbox->show ();
|
||||
|
||||
spotbutton = Gtk::manage (new Gtk::Button ());
|
||||
@ -292,10 +298,10 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, "whitebalance", M("TP_WB
|
||||
spotsize->set_active(4);
|
||||
}
|
||||
|
||||
spotbox->pack_end (*spotsize, Gtk::PACK_EXPAND_WIDGET, 4);
|
||||
spotbox->pack_end (*slab, Gtk::PACK_SHRINK, 4);
|
||||
spotbox->pack_end (*spotsize, Gtk::PACK_EXPAND_WIDGET, 0);
|
||||
spotbox->pack_end (*slab, Gtk::PACK_SHRINK, 0);
|
||||
|
||||
pack_start (*spotbox, Gtk::PACK_SHRINK, 4);
|
||||
pack_start (*spotbox, Gtk::PACK_SHRINK, 0);
|
||||
|
||||
Gtk::Image* itempL = Gtk::manage (new RTImage ("ajd-wb-temp1.png"));
|
||||
Gtk::Image* itempR = Gtk::manage (new RTImage ("ajd-wb-temp2.png"));
|
||||
|
Loading…
x
Reference in New Issue
Block a user