Patch from issue 1267: "New Threshold curve widget", used in USM Sharpening and Vibrance

This commit is contained in:
natureh
2012-06-19 23:01:25 +02:00
parent b5176679b8
commit a9286155e8
49 changed files with 5685 additions and 4202 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -803,6 +803,13 @@ SAVEDLG_SAVEIMMEDIATELY;Save immediately
SAVEDLG_SAVESPP;Save processing parameters with image
SAVEDLG_TIFFFILTER;TIFF files
SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF
THRESHOLDSELECTOR_B;Bottom
THRESHOLDSELECTOR_BL;Bottom-left
THRESHOLDSELECTOR_BR;Bottom-right
THRESHOLDSELECTOR_HINT;Hold the <b>Shift</b> key to move individual control points.
THRESHOLDSELECTOR_T;Top
THRESHOLDSELECTOR_TL;Top-left
THRESHOLDSELECTOR_TR;Top-right
TOOLBAR_TOOLTIP_CROP;<b>Crop</b> selection.\nShortcut: <b>c</b>
TOOLBAR_TOOLTIP_HAND;Hand tool.\nShortcut: <b>h</b>
TOOLBAR_TOOLTIP_STRAIGHTEN;<b>Straighten</b> / <b>fine rotation</b>.\nShortcut: <b>s</b>\n\nIndicate the vertical or horizontal by drawing a guide line over the image preview. Angle of rotation will be shown next to the guide line. Center of rotation is the geometrical center of the image.
@@ -1067,7 +1074,7 @@ TP_VIBRANCE_LABEL;Vibrance
TP_VIBRANCE_PASTELS;Pastel tones
TP_VIBRANCE_PASTSATTOG;Link pastel and saturated tones
TP_VIBRANCE_PROTECTSKINS;Protect skin tones
TP_VIBRANCE_PSTHRESHOLD;Pastel/Saturated tone threshold
TP_VIBRANCE_PSTHRESHOLD;Pastel/Saturated tone differential threshold
TP_VIBRANCE_SATURATED;Saturated tones
TP_VIGNETTING_AMOUNT;Amount
TP_VIGNETTING_CENTER;Center

View File

@@ -1,226 +1,226 @@
[Version]
AppVersion=4.0.9
Version=301
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0
Compensation=0
Brightness=0
Contrast=20
Saturation=0
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=1;0;0;0.04;0.03;0.17684498029510265;0.21732319394192093;0.70232558139534862;0.74883720930232545;1;1;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=0
Saturation=-100
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=0;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=512
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=75
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=false
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=false
Luma=5
Chroma=5
Gamma=2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=3
Mult1=1
Mult2=1
Mult3=1
Mult4=0.2
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true
[Version]
AppVersion=4.0.9
Version=302
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0
Compensation=0
Brightness=0
Contrast=20
Saturation=0
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=1;0;0;0.04;0.03;0.17684498029510265;0.21732319394192093;0.70232558139534862;0.74883720930232545;1;1;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=0
Saturation=-100
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=0;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=20;80;2000;1200;
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=1;75;
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=false
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=false
Luma=5
Chroma=5
Gamma=2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=3
Mult1=1
Mult2=1
Mult3=1
Mult4=0.2
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true

View File

@@ -1,226 +1,226 @@
[Version]
AppVersion=4.0.9
Version=301
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0.0000
Compensation=0
Brightness=0
Contrast=20
Saturation=0
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=1;0;0;0.45754265471370759;0.57906737998843294;1;1;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=0
Saturation=-100
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=3;0;0;0.84892086330935235;0.69064748201438808;1;1;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=512
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=75
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=false
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=false
Luma=5
Chroma=5
Gamma=2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=3
Mult1=1
Mult2=1
Mult3=1
Mult4=0.2
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true
[Version]
AppVersion=4.0.9
Version=302
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0.0000
Compensation=0
Brightness=0
Contrast=20
Saturation=0
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=1;0;0;0.45754265471370759;0.57906737998843294;1;1;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=0
Saturation=-100
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=3;0;0;0.84892086330935235;0.69064748201438808;1;1;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=20;80;2000;1200;
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=1;75;
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=false
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=false
Luma=5
Chroma=5
Gamma=2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=3
Mult1=1
Mult2=1
Mult3=1
Mult4=0.2
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true

View File

@@ -1,226 +1,226 @@
[Version]
AppVersion=4.0.9
Version=301
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0.0000
Compensation=0
Brightness=0
Contrast=0
Saturation=0
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=0;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=-25
Saturation=-100
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=2;0.25;0.5;0.75;50;12;-12;-50;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=512
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=75
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=false
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=false
Luma=5
Chroma=5
Gamma=2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=3
Mult1=1
Mult2=1
Mult3=1
Mult4=0.2
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true
[Version]
AppVersion=4.0.9
Version=302
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0.0000
Compensation=0
Brightness=0
Contrast=0
Saturation=0
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=0;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=-25
Saturation=-100
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=2;0.25;0.5;0.75;50;12;-12;-50;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=20;80;2000;1200;
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=1;75;
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=false
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=false
Luma=5
Chroma=5
Gamma=2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=3
Mult1=1
Mult2=1
Mult3=1
Mult4=0.2
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true

View File

@@ -1,226 +1,226 @@
[Version]
AppVersion=4.0.9
Version=301
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0.0000
Compensation=0
Brightness=0
Contrast=0
Saturation=0
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=0;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=-35
Saturation=-100
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=3;0;0;0.18623481781376497;0.028340080971659902;0.50607287449392713;0.50607287449392713;0.77732793522267185;0.97975708502024295;1;1;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=512
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=75
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=false
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=false
Luma=5
Chroma=5
Gamma=2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=3
Mult1=1
Mult2=1
Mult3=1
Mult4=0.2
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true
[Version]
AppVersion=4.0.9
Version=302
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0.0000
Compensation=0
Brightness=0
Contrast=0
Saturation=0
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=0;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=-35
Saturation=-100
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=3;0;0;0.18623481781376497;0.028340080971659902;0.50607287449392713;0.50607287449392713;0.77732793522267185;0.97975708502024295;1;1;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=20;80;2000;1200;
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=1;75;
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=false
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=false
Luma=5
Chroma=5
Gamma=2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=3
Mult1=1
Mult2=1
Mult3=1
Mult4=0.2
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true

View File

@@ -1,226 +1,226 @@
[Version]
AppVersion=4.0.9
Version=301
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0.0000
Compensation=0
Brightness=0
Contrast=20
Saturation=5
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=0;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=0
Saturation=5
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=0;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=512
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=75
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=true
Threshold=80
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=true
Luma=0
Chroma=15
Gamma=1.2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=1
Mult1=2
Mult2=1
Mult3=1
Mult4=0.5
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true
[Version]
AppVersion=4.0.9
Version=302
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0.0000
Compensation=0
Brightness=0
Contrast=20
Saturation=5
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=0;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=0
Saturation=5
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=0;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=20;80;2000;1200;
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=1;75;
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=true
Threshold=80
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=true
Luma=0
Chroma=15
Gamma=1.2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=1
Mult1=2
Mult2=1
Mult3=1
Mult4=0.5
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true

View File

@@ -1,226 +1,226 @@
[Version]
AppVersion=4.0.9
Version=301
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0.0000
Compensation=0
Brightness=0
Contrast=20
Saturation=5
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=0;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=0
Saturation=5
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=0;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=512
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=75
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=true
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=true
Luma=0
Chroma=5
Gamma=1.2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=1
Mult1=2
Mult2=1
Mult3=1
Mult4=0.5
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true
[Version]
AppVersion=4.0.9
Version=302
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0.0000
Compensation=0
Brightness=0
Contrast=20
Saturation=5
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=0;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=0
Saturation=5
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=0;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=20;80;2000;1200;
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=1;75;
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=true
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=true
Luma=0
Chroma=5
Gamma=1.2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=1
Mult1=2
Mult2=1
Mult3=1
Mult4=0.5
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true

View File

@@ -1,226 +1,226 @@
[Version]
AppVersion=4.0.9
Version=301
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0.0000
Compensation=0
Brightness=0
Contrast=0
Saturation=5
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=0;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=0
Saturation=5
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=0;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=512
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=75
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=false
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=false
Luma=5
Chroma=5
Gamma=2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=3
Mult1=1
Mult2=1
Mult3=1
Mult4=0.2
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true
[Version]
AppVersion=4.0.9
Version=302
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0.0000
Compensation=0
Brightness=0
Contrast=0
Saturation=5
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=0;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=0
Saturation=5
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=0;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=20;80;2000;1200;
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=1;75;
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=false
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=false
Luma=5
Chroma=5
Gamma=2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=3
Mult1=1
Mult2=1
Mult3=1
Mult4=0.2
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true

View File

@@ -1,226 +1,226 @@
[Version]
AppVersion=4.0.9
Version=301
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0.0000
Compensation=0
Brightness=0
Contrast=0
Saturation=-10
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=2;0.10500000000000001;0.25;0.75;15;60;30;-70;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=5
Saturation=-10
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=0;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=512
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=75
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=false
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=false
Luma=5
Chroma=5
Gamma=2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=3
Mult1=1
Mult2=1
Mult3=1
Mult4=0.2
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true
[Version]
AppVersion=4.0.9
Version=302
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0.0000
Compensation=0
Brightness=0
Contrast=0
Saturation=-10
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=2;0.105;0.25;0.75;15;60;30;-70;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=5
Saturation=-10
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=0;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=20;80;2000;1200;
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=1;75;
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=false
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=false
Luma=5
Chroma=5
Gamma=2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=3
Mult1=1
Mult2=1
Mult3=1
Mult4=0.2
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true

View File

@@ -1,226 +1,226 @@
[Version]
AppVersion=4.0.9
Version=301
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0.0000
Compensation=0
Brightness=0
Contrast=20
Saturation=0
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=1;0;0;0.040000000000000015;0.029999999999999995;0.17684498029510265;0.21732319394192093;0.70232558139534862;0.74883720930232545;1;1;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=0
Saturation=0
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=0;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=512
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=75
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=false
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=false
Luma=5
Chroma=5
Gamma=2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=3
Mult1=1
Mult2=1
Mult3=1
Mult4=0.2
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true
[Version]
AppVersion=4.0.9
Version=302
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0.0000
Compensation=0
Brightness=0
Contrast=20
Saturation=0
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=1;0;0;0.04;0.03;0.17684498029510265;0.21732319394192093;0.70232558139534862;0.74883720930232545;1;1;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=0
Saturation=0
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=0;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=20;80;2000;1200;
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=1;75;
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=false
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=false
Luma=5
Chroma=5
Gamma=2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=3
Mult1=1
Mult2=1
Mult3=1
Mult4=0.2
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true

View File

@@ -1,226 +1,226 @@
[Version]
AppVersion=4.0.9
Version=301
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0.0000
Compensation=0
Brightness=0
Contrast=20
Saturation=5
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=1;0;0;0.45754265471370759;0.57906737998843294;1;1;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=0
Saturation=5
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=3;0;0;0.84892086330935235;0.69064748201438808;1;1;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=512
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=75
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=false
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=false
Luma=5
Chroma=5
Gamma=2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=3
Mult1=1
Mult2=1
Mult3=1
Mult4=0.2
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true
[Version]
AppVersion=4.0.9
Version=302
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0.0000
Compensation=0
Brightness=0
Contrast=20
Saturation=5
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=1;0;0;0.45754265471370759;0.57906737998843294;1;1;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=0
Saturation=5
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=3;0;0;0.84892086330935235;0.69064748201438808;1;1;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=20;80;2000;1200;
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=1;75;
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=false
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=false
Luma=5
Chroma=5
Gamma=2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=3
Mult1=1
Mult2=1
Mult3=1
Mult4=0.2
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true

View File

@@ -1,226 +1,226 @@
[Version]
AppVersion=4.0.9
Version=301
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=false
Clip=0
Compensation=0
Brightness=0
Contrast=0
Saturation=0
Black=0
HighlightCompr=0
HighlightComprThreshold=0
ShadowCompr=50
Curve=0;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=0
Saturation=0
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=0;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=512
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=75
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=false
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=false
Luma=5
Chroma=5
Gamma=2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=false
Mult0=1
Mult1=1
Mult2=1
Mult3=1
Mult4=0.2
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true
[Version]
AppVersion=4.0.9
Version=302
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=false
Clip=0
Compensation=0
Brightness=0
Contrast=0
Saturation=0
Black=0
HighlightCompr=0
HighlightComprThreshold=0
ShadowCompr=50
Curve=0;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=0
Saturation=0
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=0;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=20;80;2000;1200;
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=1;75;
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=false
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=false
Luma=5
Chroma=5
Gamma=2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=false
Mult0=1
Mult1=1
Mult2=1
Mult3=1
Mult4=0.2
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true

View File

@@ -1,226 +1,226 @@
[Version]
AppVersion=4.0.9
Version=301
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0.0000
Compensation=0
Brightness=0
Contrast=0
Saturation=0
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=0;
[Channel Mixer]
Red=120;-10;-10;
Green=-10;120;-10;
Blue=-10;-10;120;
[Luminance Curve]
Brightness=0
Contrast=10
Saturation=5
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=0;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=512
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=75
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=false
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=false
Luma=5
Chroma=5
Gamma=2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=3
Mult1=1.8
Mult2=1.3
Mult3=1
Mult4=0.2
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true
[Version]
AppVersion=4.0.9
Version=302
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0.0000
Compensation=0
Brightness=0
Contrast=0
Saturation=0
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=0;
[Channel Mixer]
Red=120;-10;-10;
Green=-10;120;-10;
Blue=-10;-10;120;
[Luminance Curve]
Brightness=0
Contrast=10
Saturation=5
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=0;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=20;80;2000;1200;
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=false
Pastels=50
Saturated=50
PSThreshold=1;75;
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=false
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=false
Luma=5
Chroma=5
Gamma=2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=3
Mult1=1.8
Mult2=1.3
Mult3=1
Mult4=0.2
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true

View File

@@ -1,226 +1,226 @@
[Version]
AppVersion=4.0.9
Version=301
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0.0000
Compensation=0
Brightness=0
Contrast=0
Saturation=0
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=0;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=10
Saturation=5
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=0;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=512
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=true
Pastels=50
Saturated=50
PSThreshold=75
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=false
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=false
Luma=5
Chroma=5
Gamma=2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=3
Mult1=1.8
Mult2=1.3
Mult3=1
Mult4=0.2
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true
[Version]
AppVersion=4.0.9
Version=302
[General]
Rank=0
ColorLabel=0
InTrash=false
[Exposure]
Auto=true
Clip=0.0000
Compensation=0
Brightness=0
Contrast=0
Saturation=0
Black=0
HighlightCompr=0
HighlightComprThreshold=33
ShadowCompr=50
Curve=0;
[Channel Mixer]
Red=100;0;0;
Green=0;100;0;
Blue=0;0;100;
[Luminance Curve]
Brightness=0
Contrast=10
Saturation=5
AvoidColorClipping=false
SaturationLimiter=false
SaturationLimit=50
LCurve=0;
aCurve=0;
bCurve=0;
[Sharpening]
Enabled=false
Method=usm
Radius=0.5
Amount=125
Threshold=20;80;2000;1200;
OnlyEdges=false
EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
DeconvRadius=0.75
DeconvAmount=75
DeconvDamping=20
DeconvIterations=30
[Vibrance]
Enabled=true
Pastels=50
Saturated=50
PSThreshold=1;75;
ProtectSkins=false
AvoidColorShift=true
PastSatTog=true
[SharpenEdge]
Enabled=false
Passes=2
Strength=50
ThreeChannels=false
[SharpenMicro]
Enabled=false
Matrix=false
Strength=20
Uniformity=50
[White Balance]
Setting=Camera
Temperature=5745
Green=1.0
[Impulse Denoising]
Enabled=false
Threshold=50
[Defringing]
Enabled=false
Radius=2.0
Threshold=25
[Directional Pyramid Denoising]
Enabled=false
Luma=5
Chroma=5
Gamma=2
[EPD]
Enabled=false
Strength=0.25
EdgeStopping=1.4
Scale=1
ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
HighQuality=false
Highlights=10
HighlightTonalWidth=80
Shadows=10
ShadowTonalWidth=80
LocalContrast=0
Radius=30
[Crop]
Enabled=false
X=0
Y=0
W=7360
H=4912
FixedRatio=false
Ratio=3:2
Orientation=Landscape
Guide=None
[Coarse Transformation]
Rotate=0
HorizontalFlip=false
VerticalFlip=false
[Common Properties for Transformations]
AutoFill=true
[Rotation]
Degree=0
[Distortion]
Amount=0
[LensProfile]
LCPFile=
UseDistortion=true
UseVignette=true
UseCA=false
[Perspective]
Horizontal=0
Vertical=0
[CACorrection]
Red=0
Blue=0
[Vignetting Correction]
Amount=0
Radius=50
Strength=1
CenterX=0
CenterY=0
[HLRecovery]
Enabled=false
Method=Blend
[Resize]
Enabled=false
Scale=1
AppliesTo=Cropped area
Method=Lanczos
DataSpecified=3
Width=900
Height=900
[Color Management]
InputProfile=(cameraICC)
BlendCMSMatrix=true
WorkingProfile=sRGB
OutputProfile=No ICM: sRGB output
Gammafree=default
Freegamma=false
GammaValue=2.22
GammaSlope=4.5
[Directional Pyramid Equalizer]
Enabled=true
Mult0=3
Mult1=1.8
Mult2=1.3
Mult3=1
Mult4=0.2
[HSV Equalizer]
HCurve=0;
SCurve=0;
VCurve=0;
[RGB Curves]
rCurve=0;
gCurve=0;
bCurve=0;
[RAW]
DarkFrame=
DarkFrameAuto=false
FlatFieldFile=
FlatFieldAutoSelect=false
FlatFieldBlurRadius=32
FlatFieldBlurType=Area Flatfield
CA=false
CARed=0
CABlue=0
HotDeadPixels=false
HotDeadPixelThresh=40
LineDenoise=0
GreenEqThreshold=0
CcSteps=0
Method=amaze
DCBIterations=2
DCBEnhance=false
ALLEnhance=false
PreExposure=1
PrePreserv=0
PreBlackzero=0
PreBlackone=0
PreBlacktwo=0
PreBlackthree=0
PreTwoGreen=true

View File

@@ -175,6 +175,14 @@ style "clearlooks-scale" {
}
}
style "clearlooks-thresholdselector" {
bg[ACTIVE] = shade (2.25, @rt_bg_color)
bg[PRELIGHT] = shade (3.00, @rt_bg_color)
fg[PRELIGHT] = shade (1.30, @rt_fg_color)
}
style "clearlooks-vscale" {
engine "clearlooks" {
@@ -464,6 +472,7 @@ widget "*.partialPasteHeader.*" style "clearlooks-frame_title"
widget "*.partialPasteHeaderSep" style "clearlooks-partialPasteHeaderSep"
widget "*.histButton" style "clearlooks-histButton"
widget "*.FramelessSpinButton" style "clearlooks-framelessspinbutton"
widget "*.ThresholdSelector" style "clearlooks-thresholdselector"
# The window of the tooltip is called "gtk-tooltip"
##################################################################

View File

@@ -175,6 +175,14 @@ style "clearlooks-scale" {
}
}
style "clearlooks-thresholdselector" {
bg[ACTIVE] = shade (1.35, @rt_bg_color)
bg[PRELIGHT] = shade (1.70, @rt_bg_color)
fg[PRELIGHT] = shade (1.30, @rt_fg_color)
}
style "clearlooks-vscale" {
engine "clearlooks" {
@@ -464,6 +472,7 @@ widget "*.partialPasteHeader.*" style "clearlooks-frame_title"
widget "*.partialPasteHeaderSep" style "clearlooks-partialPasteHeaderSep"
widget "*.histButton" style "clearlooks-histButton"
widget "*.FramelessSpinButton" style "clearlooks-framelessspinbutton"
widget "*.ThresholdSelector" style "clearlooks-thresholdselector"
# The window of the tooltip is called "gtk-tooltip"
##################################################################

View File

@@ -175,6 +175,15 @@ style "clearlooks-scale" {
}
}
style "clearlooks-thresholdselector" {
bg[ACTIVE] = shade (1.45, @rt_bg_color)
bg[PRELIGHT] = shade (1.70, @rt_bg_color)
bg[SELECTED] = shade (2.00, @rt_bg_color)
fg[PRELIGHT] = shade (1.30, @rt_fg_color)
}
style "clearlooks-vscale" {
engine "clearlooks" {
@@ -475,6 +484,7 @@ widget "*.partialPasteHeader.*" style "clearlooks-frame_title"
widget "*.partialPasteHeaderSep" style "clearlooks-partialPasteHeaderSep"
widget "*.histButton" style "clearlooks-histButton"
widget "*.FramelessSpinButton" style "clearlooks-framelessspinbutton"
widget "*.ThresholdSelector" style "clearlooks-thresholdselector"
# The window of the tooltip is called "gtk-tooltip"
##################################################################

View File

@@ -175,6 +175,12 @@ style "clearlooks-scale" {
}
}
style "clearlooks-thresholdselector" {
bg[ACTIVE] = shade (1.40, @rt_bg_color)
bg[PRELIGHT] = shade (1.70, @rt_bg_color)
}
style "clearlooks-vscale" {
engine "clearlooks" {
@@ -464,6 +470,7 @@ widget "*.partialPasteHeader.*" style "clearlooks-frame_title"
widget "*.partialPasteHeaderSep" style "clearlooks-partialPasteHeaderSep"
widget "*.histButton" style "clearlooks-histButton"
widget "*.FramelessSpinButton" style "clearlooks-framelessspinbutton"
widget "*.ThresholdSelector" style "clearlooks-thresholdselector"
# The window of the tooltip is called "gtk-tooltip"
##################################################################

View File

@@ -175,6 +175,12 @@ style "clearlooks-scale" {
}
}
style "clearlooks-thresholdselector" {
bg[ACTIVE] = shade (1.40, @rt_bg_color)
bg[PRELIGHT] = shade (1.70, @rt_bg_color)
}
style "clearlooks-vscale" {
engine "clearlooks" {
@@ -464,6 +470,7 @@ widget "*.partialPasteHeader.*" style "clearlooks-frame_title"
widget "*.partialPasteHeaderSep" style "clearlooks-partialPasteHeaderSep"
widget "*.histButton" style "clearlooks-histButton"
widget "*.FramelessSpinButton" style "clearlooks-framelessspinbutton"
widget "*.ThresholdSelector" style "clearlooks-thresholdselector"
# The window of the tooltip is called "gtk-tooltip"
##################################################################

View File

@@ -175,6 +175,12 @@ style "clearlooks-scale" {
}
}
style "clearlooks-thresholdselector" {
bg[ACTIVE] = shade (1.40, @rt_bg_color)
bg[PRELIGHT] = shade (1.70, @rt_bg_color)
}
style "clearlooks-vscale" {
engine "clearlooks" {
@@ -464,6 +470,7 @@ widget "*.partialPasteHeader.*" style "clearlooks-frame_title"
widget "*.partialPasteHeaderSep" style "clearlooks-partialPasteHeaderSep"
widget "*.histButton" style "clearlooks-histButton"
widget "*.FramelessSpinButton" style "clearlooks-framelessspinbutton"
widget "*.ThresholdSelector" style "clearlooks-thresholdselector"
# The window of the tooltip is called "gtk-tooltip"
##################################################################

View File

@@ -177,6 +177,12 @@ style "clearlooks-scale" {
}
}
style "clearlooks-thresholdselector" {
bg[ACTIVE] = shade (1.20, @rt_bg_color)
bg[PRELIGHT] = shade (1.50, @rt_bg_color)
}
style "clearlooks-vscale" {
engine "clearlooks" {
@@ -815,6 +821,7 @@ widget "*.partialPasteHeader.*" style "clearlooks-frame_title"
widget "*.partialPasteHeaderSep" style "clearlooks-partialPasteHeaderSep"
widget "*.histButton" style "clearlooks-histButton"
widget "*.FramelessSpinButton" style "clearlooks-framelessspinbutton"
widget "*.ThresholdSelector" style "clearlooks-thresholdselector"
# The window of the tooltip is called "gtk-tooltip"
##################################################################

View File

@@ -175,6 +175,12 @@ style "clearlooks-scale" {
}
}
style "clearlooks-thresholdselector" {
bg[ACTIVE] = shade (1.20, @rt_bg_color)
bg[PRELIGHT] = shade (1.50, @rt_bg_color)
}
style "clearlooks-vscale" {
engine "clearlooks" {
@@ -465,6 +471,7 @@ widget "*.partialPasteHeader.*" style "clearlooks-frame_title"
widget "*.partialPasteHeaderSep" style "clearlooks-partialPasteHeaderSep"
widget "*.histButton" style "clearlooks-histButton"
widget "*.FramelessSpinButton" style "clearlooks-framelessspinbutton"
widget "*.ThresholdSelector" style "clearlooks-thresholdselector"
# The window of the tooltip is called "gtk-tooltip"
##################################################################

View File

@@ -175,6 +175,12 @@ style "clearlooks-scale" {
}
}
style "clearlooks-thresholdselector" {
bg[ACTIVE] = shade (1.15, @rt_bg_color)
bg[PRELIGHT] = shade (1.40, @rt_bg_color)
}
style "clearlooks-vscale" {
engine "clearlooks" {
@@ -465,6 +471,7 @@ widget "*.partialPasteHeader.*" style "clearlooks-frame_title"
widget "*.partialPasteHeaderSep" style "clearlooks-partialPasteHeaderSep"
widget "*.histButton" style "clearlooks-histButton"
widget "*.FramelessSpinButton" style "clearlooks-framelessspinbutton"
widget "*.ThresholdSelector" style "clearlooks-thresholdselector"
# The window of the tooltip is called "gtk-tooltip"
##################################################################

View File

@@ -175,6 +175,12 @@ style "clearlooks-scale" {
}
}
style "clearlooks-thresholdselector" {
bg[ACTIVE] = shade (1.15, @rt_bg_color)
bg[PRELIGHT] = shade (1.40, @rt_bg_color)
}
style "clearlooks-vscale" {
engine "clearlooks" {
@@ -452,6 +458,7 @@ widget "*.partialPasteHeader.*" style "clearlooks-frame_title"
widget "*.partialPasteHeaderSep" style "clearlooks-partialPasteHeaderSep"
widget "*.histButton" style "clearlooks-histButton"
widget "*.FramelessSpinButton" style "clearlooks-framelessspinbutton"
widget "*.ThresholdSelector" style "clearlooks-thresholdselector"
# The window of the tooltip is called "gtk-tooltip"
##################################################################

View File

@@ -158,6 +158,12 @@ style "clearlooks-scale" {
}
}
style "clearlooks-thresholdselector" {
bg[ACTIVE] = shade (1.15, @rt_bg_color)
bg[PRELIGHT] = shade (1.25, @rt_bg_color)
}
style "clearlooks-vscale" {
engine "clearlooks" {
@@ -405,6 +411,7 @@ widget "*.partialPasteHeader.*" style "clearlooks-frame_title"
widget "*.partialPasteHeaderSep" style "clearlooks-partialPasteHeaderSep"
widget "*.histButton" style "clearlooks-histButton"
widget "*.FramelessSpinButton" style "clearlooks-framelessspinbutton"
widget "*.ThresholdSelector" style "clearlooks-thresholdselector"
# The window of the tooltip is called "gtk-tooltip"
##################################################################

View File

@@ -176,10 +176,13 @@ void ImProcFunctions::sharpening (LabImage* lab, float** b2) {
#pragma omp for
for (int i=0; i<H; i++)
for (int j=0; j<W; j++) {
const float upperBound = 2000.f; // WARNING: Duplicated value, it's baaaaaad !
float diff = base[i][j] - b2[i][j];
if (ABS(diff)>params->sharpening.threshold) {
lab->L[i][j] = lab->L[i][j] + params->sharpening.amount * diff / 100.f;
}
float delta = params->sharpening.threshold.multiply<float, float, float>(
min(ABS(diff), upperBound), // X axis value = absolute value of the difference, truncated to the max value of this field
params->sharpening.amount * diff * 0.01f // Y axis max value
);
lab->L[i][j] = lab->L[i][j] + delta;
}
}
else
@@ -199,6 +202,7 @@ void ImProcFunctions::sharpenHaloCtrl (LabImage* lab, float** blurmap, float** b
float scale = (100.f - params->sharpening.halocontrol_amount) * 0.01f;
float sharpFac = params->sharpening.amount * 0.01f;
float** nL = base;
#pragma omp parallel for if (multiThread)
for (int i=2; i<H-2; i++) {
float max1=0, max2=0, min1=0, min2=0, maxn, minn, np1, np2, np3, min_, max_, labL;
@@ -224,16 +228,19 @@ void ImProcFunctions::sharpenHaloCtrl (LabImage* lab, float** blurmap, float** b
// deviation from the environment as measurement
float diff = nL[i][j] - blurmap[i][j];
if (ABS(diff) > params->sharpening.threshold) {
float newL = labL + sharpFac * diff;
// applying halo control
if (newL > max_)
newL = max_ + (newL-max_) * scale;
else if (newL < min_)
newL = min_ - (min_-newL) * scale;
const float upperBound = 2000.f; // WARNING: Duplicated value, it's baaaaaad !
float delta = params->sharpening.threshold.multiply<float, float, float>(
min(ABS(diff), upperBound), // X axis value = absolute value of the difference
sharpFac * diff // Y axis max value = sharpening.amount * signed difference
);
float newL = labL + delta;
// applying halo control
if (newL > max_)
newL = max_ + (newL-max_) * scale;
else if (newL < min_)
newL = min_ - (min_-newL) * scale;
lab->L[i][j] = newL;
}
lab->L[i][j] = newL;
}
}
}

View File

@@ -17,26 +17,27 @@
* You should have received a copy of the GNU General Public License
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
*/
#include "rt_math.h"
#include "rt_math.h"
#include "rtengine.h"
#include "improcfun.h"
#include "iccstore.h"
#include "mytime.h"
#include "rt_math.h"
#include "rt_math.h"
#include "../rtgui/thresholdselector.h"
#ifdef _OPENMP
#include <omp.h>
#endif
using namespace std;
using namespace std;
namespace rtengine {
using namespace procparams;
#define SAT(a,b,c) ((float)max(a,b,c)-(float)min(a,b,c))/(float)max(a,b,c)
#define SAT(a,b,c) ((float)max(a,b,c)-(float)min(a,b,c))/(float)max(a,b,c)
extern const Settings* settings;
@@ -2020,7 +2021,7 @@ void ImProcFunctions::vibrance (LabImage* lab) {
float chromaSatur = (float) params->vibrance.saturated / 100.0f;//
bool highlight = params->hlrecovery.enabled;//Get the value if "highlight reconstruction" is activated
//inverse matrix user select
double wip[3][3] = {
double wip[3][3] = {
{wiprof[0][0],wiprof[0][1],wiprof[0][2]},
{wiprof[1][0],wiprof[1][1],wiprof[1][2]},
{wiprof[2][0],wiprof[2][1],wiprof[2][2]}
@@ -2030,13 +2031,25 @@ void ImProcFunctions::vibrance (LabImage* lab) {
float sathue[5],sathue2[4];// adjust sat in function of hue
float correctionHue; // Munsell's correction
float limitpastelsatur;
float limitpastelsaturbottom;//TS_TOPRIGHT
int zone=0;
bool allwaysingamut=true;
limitpastelsatur=(float)params->vibrance.psthreshold / 100.0f;
// sur la ligne ci-dessous, on a acces aux valeurs du seuil via le champs 'value'
// psthreshold est un seuil simple commencant en bas, ce qui signifie que seuls TS_BOTTOMLEFT et TS_TOPLEFT
// sont exploitables
limitpastelsaturbottom=static_cast<float>(params->vibrance.psthreshold.value[ThresholdSelector::TS_BOTTOMLEFT]) / 100.0f;
limitpastelsatur=static_cast<float>(params->vibrance.psthreshold.value[ThresholdSelector::TS_TOPLEFT]) / 100.0f;
if (limitpastelsatur < 0.07) limitpastelsatur=0.07;
// if (limitpastelsaturbottom < 0.07) limitpastelsaturbottom=0.07;
float p0,p1,p2;//adapt limit of pyramid to psThreshold
float s0,s1,s2;
float maxdp=(limitpastelsatur-0.07)/4.0;
// float maxdp=(limitpastelsaturbottom-0.07)/4.0;
float maxds=(1.0-limitpastelsatur)/4.0;
p0=0.07+maxdp;
p1=0.07+2.0*maxdp;
@@ -2045,7 +2058,7 @@ void ImProcFunctions::vibrance (LabImage* lab) {
s1=limitpastelsatur + 2.0*maxds;
s2=limitpastelsatur + 3.0*maxds;
//if (settings->verbose) printf("vibrance: p0=%1.2f p1=%1.2f p2=%1.2f s0=%1.2f s1=%1.2f s2=%1.2f\n", p0,p1,p2,s0,s1,s2);
if (settings->verbose) printf("vibrance: p0=%1.2f p1=%1.2f p2=%1.2f s0=%1.2f s1=%1.2f s2=%1.2f\n", p0,p1,p2,s0,s1,s2);
if (settings->verbose) printf("vibrance: pastel=%f satur=%f limit= %1.2f\n",1.0+chromaPastel,1.0+chromaSatur, limitpastelsatur);
#pragma omp for schedule(dynamic, 10)
@@ -2176,23 +2189,35 @@ void ImProcFunctions::vibrance (LabImage* lab) {
if(saturation>0.0) {
float chmodpastel,chmodsat;
// We handle only positive values here
if (saturation < 0.07) chmodpastel = chromaPastel*satredu*sathue[4]; //neutral tones
else if (saturation < p0) chmodpastel = chromaPastel*satredu*sathue[0];
else if (saturation < p1) chmodpastel = chromaPastel*satredu*sathue[1];
else if (saturation < p2) chmodpastel = chromaPastel*satredu*sathue[2];
else if (saturation < limitpastelsatur) chmodpastel = chromaPastel*satredu*sathue[3];
else if (saturation < s0) chmodsat = chromaSatur*satredu*sathue2[0];
else if (saturation < s1) chmodsat = chromaSatur*satredu*sathue2[1];
else if (saturation < s2) chmodsat = chromaSatur*satredu*sathue2[2];
else chmodsat = chromaSatur*satredu*sathue2[3];
// variables to improve transitions
float p00=0.07;
float pa, pb;// transition = pa*saturation + pb
float chl00=chromaPastel*satredu*sathue[4];
float chl0=chromaPastel*satredu*sathue[0];
float chl1=chromaPastel*satredu*sathue[1];
float chl2=chromaPastel*satredu*sathue[2];
float chl3=chromaPastel*satredu*sathue[3];
float chs0=chromaSatur*satredu*sathue2[0];
float chs1=chromaSatur*satredu*sathue2[1];
float chs2=chromaSatur*satredu*sathue2[2];
float chs3=chromaSatur*satredu*sathue2[3];
float s3=1.0f;
// We handle only positive values here ; improve transitions
if (saturation < p00) chmodpastel = chl00 ; //neutral tones
else if (saturation < p0 ) { pa=(chl00- chl0)/(p00-p0);pb=chl00-pa*p00; chmodpastel = pa*saturation + pb;}
else if (saturation < p1) { pa=(chl0- chl1)/(p0-p1);pb=chl0-pa*p0; chmodpastel = pa*saturation + pb; }
else if (saturation < p2) { pa=(chl1- chl2)/(p1-p2);pb=chl1-pa*p1; chmodpastel = pa*saturation + pb; }
else if (saturation < limitpastelsatur) { pa=(chl2- chl3)/(p2-limitpastelsatur);pb=chl2-pa*p2; chmodpastel = pa*saturation + pb; }
else if (saturation < s0) { pa=(chl3 - chs0)/(limitpastelsatur-s0);pb=chl3-pa*limitpastelsatur; chmodsat = pa*saturation + pb; }
else if (saturation < s1) { pa=(chs0- chs1)/(s0-s1);pb=chs0-pa*s0; chmodsat = pa*saturation + pb; }
else if (saturation < s2) { pa=(chs1- chs2)/(s1-s2);pb=chs1-pa*s1; chmodsat = pa*saturation + pb; }
else { pa=(chs2- chs3)/(s2-s3);pb=chs2-pa*s2; chmodsat = pa*saturation + pb; }
if(chromaPastel != chromaSatur){
//if sliders pastels and saturated differents: tansition with linear interpolation between p2 and s0
float chromaPastel_a, chromaPastel_b, chromamean, chromaSatur_a, chromaSatur_b, newchromaPastel, newchromaSatur;
chromamean = (chromaSatur + chromaPastel)/2.0;
//modify the "mean" point in function of double threshold => differential transition
chromamean = (chromaSatur*limitpastelsatur + chromaPastel*limitpastelsaturbottom)/(limitpastelsaturbottom+limitpastelsatur);
chromaPastel_a = (chromaPastel-chromamean)/(p2-limitpastelsatur);
chromaPastel_b = chromaPastel-chromaPastel_a*p2;
if(saturation > p2 && saturation < limitpastelsatur) {

View File

@@ -163,18 +163,18 @@ void ProcParams::setDefaults () {
sharpenEdge.enabled = false;
sharpenEdge.passes = 2;
sharpenEdge.amount = 50.0;
sharpenEdge.amount = 50.0;
sharpenEdge.threechannels = false;
sharpenMicro.enabled = false;
sharpenMicro.amount = 20.0;
sharpenMicro.amount = 20.0;
sharpenMicro.uniformity = 50.0;
sharpenMicro.matrix = false;
sharpening.enabled = false;
sharpening.radius = 1.0;
sharpening.amount = 90;
sharpening.threshold = 768;
sharpening.threshold.setValues(20, 80, 2000, 1200);
sharpening.edgesonly = false;
sharpening.edges_radius = 3;
sharpening.edges_tolerance = 1000;
@@ -189,7 +189,7 @@ void ProcParams::setDefaults () {
vibrance.enabled = false;
vibrance.pastels = 0;
vibrance.saturated = 0;
vibrance.psthreshold = 75;
vibrance.psthreshold.setValues(1, 75);
vibrance.protectskins = false;
vibrance.avoidcolorshift = true;
vibrance.pastsattog = true;
@@ -425,7 +425,10 @@ int ProcParams::save (Glib::ustring fname, Glib::ustring fname2, ParamsEdited* p
if (!pedited || pedited->sharpening.method) keyFile.set_string ("Sharpening", "Method", sharpening.method);
if (!pedited || pedited->sharpening.radius) keyFile.set_double ("Sharpening", "Radius", sharpening.radius);
if (!pedited || pedited->sharpening.amount) keyFile.set_integer ("Sharpening", "Amount", sharpening.amount);
if (!pedited || pedited->sharpening.threshold) keyFile.set_integer ("Sharpening", "Threshold", sharpening.threshold);
if (!pedited || pedited->sharpening.threshold) {
Glib::ArrayHandle<int> thresh (sharpening.threshold.value, 4, Glib::OWNERSHIP_NONE);
keyFile.set_integer_list("Sharpening", "Threshold", thresh);
}
if (!pedited || pedited->sharpening.edgesonly) keyFile.set_boolean ("Sharpening", "OnlyEdges", sharpening.edgesonly);
if (!pedited || pedited->sharpening.edges_radius) keyFile.set_double ("Sharpening", "EdgedetectionRadius", sharpening.edges_radius);
if (!pedited || pedited->sharpening.edges_tolerance) keyFile.set_integer ("Sharpening", "EdgeTolerance", sharpening.edges_tolerance);
@@ -440,7 +443,10 @@ int ProcParams::save (Glib::ustring fname, Glib::ustring fname2, ParamsEdited* p
if (!pedited || pedited->vibrance.enabled) keyFile.set_boolean ("Vibrance", "Enabled", vibrance.enabled);
if (!pedited || pedited->vibrance.pastels) keyFile.set_integer ("Vibrance", "Pastels", vibrance.pastels);
if (!pedited || pedited->vibrance.saturated) keyFile.set_integer ("Vibrance", "Saturated", vibrance.saturated);
if (!pedited || pedited->vibrance.psthreshold) keyFile.set_integer ("Vibrance", "PSThreshold", vibrance.psthreshold);
if (!pedited || pedited->vibrance.psthreshold) {
Glib::ArrayHandle<int> thresh (vibrance.psthreshold.value, 2, Glib::OWNERSHIP_NONE);
keyFile.set_integer_list("Vibrance", "PSThreshold", thresh);
}
if (!pedited || pedited->vibrance.protectskins) keyFile.set_boolean ("Vibrance", "ProtectSkins", vibrance.protectskins);
if (!pedited || pedited->vibrance.avoidcolorshift) keyFile.set_boolean ("Vibrance", "AvoidColorShift", vibrance.avoidcolorshift);
if (!pedited || pedited->vibrance.pastsattog) keyFile.set_boolean ("Vibrance", "PastSatTog", vibrance.pastsattog);
@@ -789,7 +795,17 @@ if (keyFile.has_group ("Sharpening")) {
if (keyFile.has_key ("Sharpening", "Enabled")) { sharpening.enabled = keyFile.get_boolean ("Sharpening", "Enabled"); if (pedited) pedited->sharpening.enabled = true; }
if (keyFile.has_key ("Sharpening", "Radius")) { sharpening.radius = keyFile.get_double ("Sharpening", "Radius"); if (pedited) pedited->sharpening.radius = true; }
if (keyFile.has_key ("Sharpening", "Amount")) { sharpening.amount = keyFile.get_integer ("Sharpening", "Amount"); if (pedited) pedited->sharpening.amount = true; }
if (keyFile.has_key ("Sharpening", "Threshold")) { sharpening.threshold = keyFile.get_integer ("Sharpening", "Threshold"); if (pedited) pedited->sharpening.threshold = true; }
if (keyFile.has_key ("Sharpening", "Threshold")) {
if (ppVersion < 302) {
int thresh = min(keyFile.get_integer ("Sharpening", "Threshold"), 2000);
sharpening.threshold.setValues(thresh, thresh, 2000, 2000); // TODO: 2000 is the maximum value and is taken of rtgui/sharpening.cc ; should be changed by the tool modularization
}
else {
Glib::ArrayHandle<int> thresh = keyFile.get_integer_list ("Sharpening", "Threshold");
sharpening.threshold.setValues(thresh.data()[0], thresh.data()[1], min(thresh.data()[2], 2000), min(thresh.data()[3], 2000));
}
if (pedited) pedited->sharpening.threshold = true;
}
if (keyFile.has_key ("Sharpening", "OnlyEdges")) { sharpening.edgesonly = keyFile.get_boolean ("Sharpening", "OnlyEdges"); if (pedited) pedited->sharpening.edgesonly = true; }
if (keyFile.has_key ("Sharpening", "EdgedetectionRadius")) { sharpening.edges_radius = keyFile.get_double ("Sharpening", "EdgedetectionRadius"); if (pedited) pedited->sharpening.edges_radius = true; }
if (keyFile.has_key ("Sharpening", "EdgeTolerance")) { sharpening.edges_tolerance = keyFile.get_integer ("Sharpening", "EdgeTolerance"); if (pedited) pedited->sharpening.edges_tolerance = true; }
@@ -823,7 +839,17 @@ if (keyFile.has_group ("Vibrance")) {
if (keyFile.has_key ("Vibrance", "Enabled")) { vibrance.enabled = keyFile.get_boolean ("Vibrance", "Enabled"); if (pedited) pedited->vibrance.enabled = true; }
if (keyFile.has_key ("Vibrance", "Pastels")) { vibrance.pastels = keyFile.get_integer ("Vibrance", "Pastels"); if (pedited) pedited->vibrance.pastels = true; }
if (keyFile.has_key ("Vibrance", "Saturated")) { vibrance.saturated = keyFile.get_integer ("Vibrance", "Saturated"); if (pedited) pedited->vibrance.saturated = true; }
if (keyFile.has_key ("Vibrance", "PSThreshold")) { vibrance.psthreshold = keyFile.get_integer ("Vibrance", "PSThreshold"); if (pedited) pedited->vibrance.psthreshold = true; }
if (keyFile.has_key ("Vibrance", "PSThreshold")) {
if (ppVersion < 302) {
int thresh = keyFile.get_integer ("Vibrance", "PSThreshold");
vibrance.psthreshold.setValues(thresh, thresh);
}
else {
Glib::ArrayHandle<int> thresh = keyFile.get_integer_list ("Vibrance", "PSThreshold");
vibrance.psthreshold.setValues(thresh.data()[0], thresh.data()[1]);
}
if (pedited) pedited->vibrance.psthreshold = true;
}
if (keyFile.has_key ("Vibrance", "ProtectSkins")) { vibrance.protectskins = keyFile.get_boolean ("Vibrance", "ProtectSkins"); if (pedited) pedited->vibrance.protectskins = true; }
if (keyFile.has_key ("Vibrance", "AvoidColorShift")) { vibrance.avoidcolorshift = keyFile.get_boolean ("Vibrance", "AvoidColorShift"); if (pedited) pedited->vibrance.avoidcolorshift = true; }
if (keyFile.has_key ("Vibrance", "PastSatTog")) { vibrance.pastsattog = keyFile.get_boolean ("Vibrance", "PastSatTog"); if (pedited) pedited->vibrance.pastsattog = true; }
@@ -1128,6 +1154,7 @@ if (keyFile.has_group ("IPTC")) {
printf ("-->unknown exception!\n");
return 1;
}
return 0;
}
const Glib::ustring ColorManagementParams::NoICMString = Glib::ustring("No ICM: sRGB output");

View File

@@ -21,12 +21,159 @@
#include <glibmm.h>
#include <vector>
#include <cassert>
#include <cstdio>
#include <cmath>
class ParamsEdited;
namespace rtengine {
namespace procparams {
template <typename T>
class Threshold {
public:
T value[4];
protected:
bool initEq1;
bool _isDouble;
#ifndef NDEBUG
unsigned int part[5];
#endif
public:
Threshold (T val1, T val2, bool startAtOne) {
initEq1 = startAtOne;
value[0] = val1;
value[1] = val2;
value[2] = T(0);
value[3] = T(0);
_isDouble = false;
}
Threshold (T val1, T val2, T val3, T val4, bool startAtOne) {
initEq1 = startAtOne;
value[0] = val1;
value[1] = val2;
value[2] = val3;
value[3] = val4;
_isDouble = true;
}
// for convenience, since 'values' is public
void setValues(T val1, T val2) {
value[0] = val1;
value[1] = val2;
}
// for convenience, since 'values' is public
void setValues(T val1, T val2, T val3, T val4) {
value[0] = val1;
value[1] = val2;
value[2] = val3;
value[3] = val4;
}
bool isDouble() const { return _isDouble; }
// RT: Type of the returned value
// RV: Type of the value on the X axis
// RV2: Type of the maximum value on the Y axis
template <typename RT, typename RV, typename RV2>
RT multiply(RV x, RV2 yMax) const {
double val = double(x);
if (initEq1) {
if (_isDouble) {
if (val == double(value[2]) && double(value[2]) == double(value[3]))
// this handle the special case where the 2 right values are the same, then bottom one is sent back,
// useful if one wants to keep the bottom value even beyond the x max bound
return RT(0.);
if (val >= double(value[3]))
return RT(yMax);
if (val > double(value[2]))
return RT(double(yMax)*(val-double(value[2]))/(double(value[3])-double(value[2])));
}
if (val >= double(value[0]))
return RT(0);
if (val > double(value[1]))
return RT(double(yMax)*(1.-(val-double(value[0]))/(double(value[1])-double(value[0]))));
return RT(yMax);
}
else {
if (_isDouble) {
if (val == double(value[2]) && double(value[2]) == double(value[3]))
// this handle the special case where the 2 right values are the same, then top one is sent back,
// useful if one wants to keep the top value even beyond the x max bound
return RT(yMax);
if (val >= double(value[2]))
return RT(0);
if (val > double(value[3]))
return RT(double(yMax)*(1.-(val-double(value[3]))/(double(value[2])-double(value[3]))));
}
if (val >= double(value[1]))
return RT(yMax);
if (val > double(value[0]))
return RT(double(yMax)*(val-double(value[0]))/(double(value[1])-double(value[0])));
return RT(0);
}
}
// RT: Type of the returned value
// RV: Type of the value on the X axis
/*template <typename RT, typename RV>
RT getRatio(RV val) const {
double val = double(val);
if (initEq1) {
if (_isDouble) { // assuming that simple thresholds will be more frequent
if (val >= double(value[3]))
return RT(1);
if (val > double(value[2]))
return (val-double(value[2]))/(double(value[3])-double(value[2]));
}
if (val >= double(value[1]))
return RT(0);
if (val > double(value[0]))
return 1.-(val-double(value[0]))/(double(value[1])-double(value[0]));
return RT(1);
}
else {
if (_isDouble) { // assuming that simple thresholds will be more frequent
if (val >= double(value[3]))
return RT(0);
if (val > double(value[2]))
return 1.-(val-double(value[2]))/(double(value[3])-double(value[2]));
}
if (val >= double(value[1]))
return RT(1);
if (val > double(value[0]))
return (val-double(value[0]))/(double(value[1])-double(value[0]));
return RT(0);
}
}*/
Threshold<T> & operator= (const Threshold<T> &rhs) {
value[0] = rhs.value[0];
value[1] = rhs.value[1];
value[2] = rhs.value[2];
value[3] = rhs.value[3];
initEq1 = rhs.initEq1;
_isDouble = rhs._isDouble;
return *this;
}
bool operator== (const Threshold<T> &rhs) const {
if (_isDouble)
return fabs(value[0]-rhs.value[0])<1e-10
&& fabs(value[1]-rhs.value[1])<1e-10
&& fabs(value[2]-rhs.value[2])<1e-10
&& fabs(value[3]-rhs.value[3])<1e-10;
else
return fabs(value[0]-rhs.value[0])<1e-10
&& fabs(value[1]-rhs.value[1])<1e-10;
}
};
/**
* Parameters of the tone curve
*/
@@ -81,20 +228,22 @@ class RGBCurvesParams {
class SharpeningParams {
public:
bool enabled;
double radius;
int amount;
int threshold;
bool edgesonly;
double edges_radius;
int edges_tolerance;
bool halocontrol;
int halocontrol_amount;
Glib::ustring method;
int deconvamount;
double deconvradius;
int deconviter;
int deconvdamping;
bool enabled;
double radius;
int amount;
Threshold<int> threshold;
bool edgesonly;
double edges_radius;
int edges_tolerance;
bool halocontrol;
int halocontrol_amount;
Glib::ustring method;
int deconvamount;
double deconvradius;
int deconviter;
int deconvdamping;
SharpeningParams() : threshold(20, 80, 2000, 1200, false) {};
};
class SharpenEdgeParams {
public:
@@ -117,13 +266,15 @@ class SharpenMicroParams {
class VibranceParams {
public:
bool enabled;
int pastels;
int saturated;
int psthreshold;
bool protectskins;
bool avoidcolorshift;
bool pastsattog;
bool enabled;
int pastels;
int saturated;
Threshold<int> psthreshold;
bool protectskins;
bool avoidcolorshift;
bool pastsattog;
VibranceParams() : psthreshold(1, 75, false) {};
};
/**

View File

@@ -3,7 +3,7 @@ set (BASESOURCEFILES
editwindow.cc batchtoolpanelcoord.cc paramsedited.cc cropwindow.cc previewhandler.cc previewwindow.cc navigator.cc indclippedpanel.cc previewmodepanel.cc filterpanel.cc
exportpanel.cc cursormanager.cc rtwindow.cc renamedlg.cc recentbrowser.cc placesbrowser.cc filepanel.cc editorpanel.cc batchqueuepanel.cc
ilabel.cc thumbbrowserbase.cc adjuster.cc filebrowserentry.cc filebrowser.cc filethumbnailbuttonset.cc
cachemanager.cc cacheimagedata.cc shcselector.cc perspective.cc
cachemanager.cc cacheimagedata.cc shcselector.cc perspective.cc thresholdselector.cc thresholdadjuster.cc
clipboard.cc thumbimageupdater.cc bqentryupdater.cc lensgeom.cc
coarsepanel.cc cacorrection.cc hlrec.cc chmixer.cc
resize.cc icmpanel.cc crop.cc shadowshighlights.cc

View File

@@ -49,11 +49,10 @@
#define ADDSET_SHARPENMICRO_UNIFORMITY 39
#define ADDSET_VIBRANCE_PASTELS 40
#define ADDSET_VIBRANCE_SATURATED 41
#define ADDSET_VIBRANCE_PSTHRESHOLD 42
#define ADDSET_FREE_OUPUT_GAMMA 43
#define ADDSET_FREE_OUTPUT_SLOPE 44
#define ADDSET_FREE_OUPUT_GAMMA 42
#define ADDSET_FREE_OUTPUT_SLOPE 43
// When adding items, make sure to update ADDSET_PARAM_NUM
#define ADDSET_PARAM_NUM 45 // THIS IS USED AS A DELIMITER!!
#define ADDSET_PARAM_NUM 44 // THIS IS USED AS A DELIMITER!!
#endif

View File

@@ -243,11 +243,6 @@ void Adjuster::setAddMode(bool addM) {
}
}
void Adjuster::setAdjusterListener (AdjusterListener* alistener) {
adjusterListener = alistener;
}
void Adjuster::spinChanged () {
sliderChange.block (true);
@@ -312,24 +307,6 @@ void Adjuster::setValue (double a) {
afterReset = false;
}
// return the value trimmed to the limits at construction time
double Adjuster::getValue () {
return spin->get_value ();
}
// return the value trimmed to the limits at construction time
int Adjuster::getIntValue () {
return spin->get_value_as_int ();
}
// method only used by the history manager
Glib::ustring Adjuster::getTextValue () {
return spin->get_text ();
}
bool Adjuster::notifyListener () {
if (adjusterListener!=NULL && !blocked) {

View File

@@ -68,11 +68,16 @@ class Adjuster : public Gtk::VBox {
Adjuster (Glib::ustring label, double vmin, double vmax, double vstep, double vdefault, bool editedCheckBox=false);
Adjuster (Gtk::Image *imgIcon, double vmin, double vmax, double vstep, double vdefault, bool editedCheckBox=false);
virtual ~Adjuster ();
void setAdjusterListener (AdjusterListener* alistener);
void setAdjusterListener (AdjusterListener* alistener) { adjusterListener = alistener; }
// return the value trimmed to the limits at construction time
double getValue () { return spin->get_value (); }
// return the value trimmed to the limits at construction time
int getIntValue () { return spin->get_value_as_int (); }
// return the value trimmed to the limits at construction time,
// method only used by the history manager
Glib::ustring getTextValue () { return spin->get_text (); }
double getValue ();
int getIntValue ();
Glib::ustring getTextValue ();
void setValue (double a);
void setLimits (double vmin, double vmax, double vstep, double vdefault);
void setEnabled (bool enabled);

View File

@@ -147,7 +147,6 @@ void BatchToolPanelCoordinator::initSession () {
toneCurve->setAdjusterBehavior (options.baBehav[ADDSET_TC_EXPCOMP], options.baBehav[ADDSET_TC_HLCOMPAMOUNT],options.baBehav[ADDSET_TC_HLCOMPTHRESH], options.baBehav[ADDSET_TC_BRIGHTNESS], options.baBehav[ADDSET_TC_BLACKLEVEL],options.baBehav[ADDSET_TC_SHCOMP], options.baBehav[ADDSET_TC_CONTRAST], options.baBehav[ADDSET_TC_SATURATION]);
lcurve->setAdjusterBehavior (options.baBehav[ADDSET_LC_BRIGHTNESS], options.baBehav[ADDSET_LC_CONTRAST], options.baBehav[ADDSET_LC_SATURATION]);
whitebalance->setAdjusterBehavior (options.baBehav[ADDSET_WB_TEMPERATURE], options.baBehav[ADDSET_WB_GREEN]);
vibrance->setAdjusterBehavior (options.baBehav[ADDSET_VIBRANCE_PASTELS], options.baBehav[ADDSET_VIBRANCE_SATURATED], options.baBehav[ADDSET_VIBRANCE_PSTHRESHOLD]);
vignetting->setAdjusterBehavior (options.baBehav[ADDSET_VIGN_AMOUNT]);
rotate->setAdjusterBehavior (options.baBehav[ADDSET_ROTATE_DEGREE]);
distortion->setAdjusterBehavior (options.baBehav[ADDSET_DIST_AMOUNT]);

View File

@@ -196,4 +196,20 @@ public:
void switchTo(TOITypes type);
};
/**
* @brief Define a gradient milestone
*/
class GradientMilestone {
public:
double position;
double r;
double g;
double b;
double a;
GradientMilestone(double _p=0., double _r=0., double _g=0., double _b=0., double _a=0.) {
position = _p; r = _r; g = _g; b = _b; a = _a;
}
};
#endif

View File

@@ -36,7 +36,9 @@
#include <Shlobj.h>
#endif
// User's settings directory, including images' profiles if used
Glib::ustring Options::rtdir;
// User's cached datas' directory
Glib::ustring Options::cacheBaseDir;
Options options;
@@ -385,9 +387,8 @@ void Options::setDefaults () {
0, // ADDSET_SHARPENMICRO_UNIFORMITY
0, // ADDSET_VIBRANCE_PASTELS
0, // ADDSET_VIBRANCE_SATURATED
0, // ADDSET_VIBRANCE_PSTHRESHOLD
0, // ADDSET_FREE_OUPUT_GAMMA
0, // ADDSET_FREE_OUTPUT_SLOPE
0, // ADDSET_FREE_OUPUT_GAMMA
0, // ADDSET_FREE_OUTPUT_SLOPE
};
baBehav = std::vector<int> (babehav, babehav+ADDSET_PARAM_NUM);

View File

@@ -454,7 +454,15 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
if (sharpening.enabled) toEdit.sharpening.enabled = mods.sharpening.enabled;
if (sharpening.radius) toEdit.sharpening.radius = mods.sharpening.radius;
if (sharpening.amount) toEdit.sharpening.amount = dontforceSet && options.baBehav[ADDSET_SHARP_AMOUNT] ? toEdit.sharpening.amount + mods.sharpening.amount : mods.sharpening.amount;
if (sharpening.threshold) toEdit.sharpening.threshold = mods.sharpening.threshold;
if (sharpening.threshold) toEdit.sharpening.threshold = mods.sharpening.threshold;
for (int i=0; i<3; i++) {
if (chmixer.red[i]) toEdit.chmixer.red[i] = dontforceSet && options.baBehav[ADDSET_CHMIXER] ? toEdit.chmixer.red[i] + mods.chmixer.red[i] : mods.chmixer.red[i];
if (chmixer.green[i]) toEdit.chmixer.green[i] = dontforceSet && options.baBehav[ADDSET_CHMIXER] ? toEdit.chmixer.green[i] + mods.chmixer.green[i] : mods.chmixer.green[i];
if (chmixer.blue[i]) toEdit.chmixer.blue[i] = dontforceSet && options.baBehav[ADDSET_CHMIXER] ? toEdit.chmixer.blue[i] + mods.chmixer.blue[i] : mods.chmixer.blue[i];
}
if (sharpening.edgesonly) toEdit.sharpening.edgesonly = mods.sharpening.edgesonly;
if (sharpening.edges_radius) toEdit.sharpening.edges_radius = mods.sharpening.edges_radius;
if (sharpening.edges_tolerance) toEdit.sharpening.edges_tolerance = mods.sharpening.edges_tolerance;
@@ -468,7 +476,7 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
if (vibrance.enabled) toEdit.vibrance.enabled = mods.vibrance.enabled;
if (vibrance.pastels) toEdit.vibrance.pastels = dontforceSet && options.baBehav[ADDSET_VIBRANCE_PASTELS] ? toEdit.vibrance.pastels + mods.vibrance.pastels : mods.vibrance.pastels;
if (vibrance.saturated) toEdit.vibrance.saturated = dontforceSet && options.baBehav[ADDSET_VIBRANCE_SATURATED] ? toEdit.vibrance.saturated + mods.vibrance.saturated : mods.vibrance.saturated;
if (vibrance.psthreshold) toEdit.vibrance.psthreshold = dontforceSet && options.baBehav[ADDSET_VIBRANCE_PSTHRESHOLD] ? toEdit.vibrance.psthreshold + mods.vibrance.psthreshold : mods.vibrance.psthreshold;
if (vibrance.psthreshold) toEdit.vibrance.psthreshold = mods.vibrance.psthreshold;
if (vibrance.protectskins) toEdit.vibrance.protectskins = mods.vibrance.protectskins;
if (vibrance.avoidcolorshift) toEdit.vibrance.avoidcolorshift = mods.vibrance.avoidcolorshift;
if (vibrance.pastsattog) toEdit.vibrance.pastsattog = mods.vibrance.pastsattog;

View File

@@ -2,7 +2,7 @@
#define _PPVERSION_
// This number have to be incremented whenever the PP3 file format is modified
#define PPVERSION 301
#define PPVERSION 302
#define PPVERSION_AEXP 301 //value of PPVERSION when auto exposure algorithm was modified
#endif

View File

@@ -195,7 +195,6 @@ Gtk::Widget* Preferences::getBatchProcPanel () {
mi->set_value (behavColumns.label, M("TP_VIBRANCE_LABEL"));
appendBehavList (mi, M("TP_VIBRANCE_PASTELS"), ADDSET_VIBRANCE_PASTELS, false);
appendBehavList (mi, M("TP_VIBRANCE_SATURATED"), ADDSET_VIBRANCE_SATURATED, false);
appendBehavList (mi, M("TP_VIBRANCE_PSTHRESHOLD"), ADDSET_VIBRANCE_PSTHRESHOLD, false);
mi = behModel->append ();
mi->set_value (behavColumns.label, M("TP_GAMMA_OUTPUT"));

View File

@@ -26,6 +26,10 @@ using namespace rtengine::procparams;
Sharpening::Sharpening () : Gtk::VBox(), FoldableToolPanel(this) {
std::vector<GradientMilestone> milestones;
milestones.push_back( GradientMilestone(0.0, 0.0, 0.0, 0.0) );
milestones.push_back( GradientMilestone(1.0, 1.0, 1.0, 1.0) );
enabled = Gtk::manage (new Gtk::CheckButton (M("GENERAL_ENABLED")));
enabled->set_active (true);
pack_start(*enabled);
@@ -69,7 +73,8 @@ Sharpening::Sharpening () : Gtk::VBox(), FoldableToolPanel(this) {
Gtk::HSeparator *hsep6a = Gtk::manage (new Gtk::HSeparator());
amount = Gtk::manage (new Adjuster (M("TP_SHARPENING_AMOUNT"), 1, 1000, 1, 150));
radius = Gtk::manage (new Adjuster (M("TP_SHARPENING_RADIUS"), 0.3, 3, 0.01, 0.8));
threshold = Gtk::manage (new Adjuster (M("TP_SHARPENING_THRESHOLD"), 0, 16384, 50, 1));
threshold = Gtk::manage (new ThresholdAdjuster (M("TP_SHARPENING_THRESHOLD"), 0., 2000., 20., 80., 2000., 1200., 0, false));
threshold->setBgGradient(milestones);
pack_start(*hsep6a, Gtk::PACK_SHRINK, 2);
pack_start (*usm);
@@ -186,7 +191,7 @@ void Sharpening::read (const ProcParams* pp, const ParamsEdited* pedited) {
amount->setValue (pp->sharpening.amount);
radius->setValue (pp->sharpening.radius);
threshold->setValue (pp->sharpening.threshold);
threshold->setValue<int>(pp->sharpening.threshold);
eradius->setValue (pp->sharpening.edges_radius);
etolerance->setValue (pp->sharpening.edges_tolerance);
hcamount->setValue (pp->sharpening.halocontrol_amount);
@@ -221,7 +226,7 @@ void Sharpening::write (ProcParams* pp, ParamsEdited* pedited) {
pp->sharpening.amount = (int)amount->getValue();
pp->sharpening.enabled = enabled->get_active ();
pp->sharpening.radius = radius->getValue ();
pp->sharpening.threshold = (int)threshold->getValue ();
pp->sharpening.threshold = threshold->getValue<int> ();
pp->sharpening.edgesonly = edgesonly->get_active ();
pp->sharpening.edges_radius = eradius->getValue ();
pp->sharpening.edges_tolerance = (int)etolerance->getValue ();
@@ -259,7 +264,7 @@ void Sharpening::setDefaults (const ProcParams* defParams, const ParamsEdited* p
amount->setDefault (defParams->sharpening.amount);
radius->setDefault (defParams->sharpening.radius);
threshold->setDefault (defParams->sharpening.threshold);
threshold->setDefault<int> (defParams->sharpening.threshold);
eradius->setDefault (defParams->sharpening.edges_radius);
etolerance->setDefault (defParams->sharpening.edges_tolerance);
hcamount->setDefault (defParams->sharpening.halocontrol_amount);
@@ -310,8 +315,6 @@ void Sharpening::adjusterChanged (Adjuster* a, double newval) {
listener->panelChanged (EvShrAmount, costr);
else if (a==radius)
listener->panelChanged (EvShrRadius, costr);
else if (a==threshold)
listener->panelChanged (EvShrThresh, costr);
else if (a==eradius)
listener->panelChanged (EvShrEdgeRadius, costr);
else if (a==etolerance)
@@ -329,6 +332,13 @@ void Sharpening::adjusterChanged (Adjuster* a, double newval) {
}
}
//void Sharpening::adjusterChanged (ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight) {
void Sharpening::adjusterChanged (ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight) {
if (listener && enabled->get_active()) {
listener->panelChanged (EvShrThresh, threshold->getHistoryString());
}
}
void Sharpening::enabled_toggled () {
if (batchMode) {

View File

@@ -21,10 +21,10 @@
#include <gtkmm.h>
#include "adjuster.h"
#include "guiutils.h"
#include "thresholdadjuster.h"
#include "toolpanel.h"
class Sharpening : public Gtk::VBox, public AdjusterListener, public FoldableToolPanel {
class Sharpening : public Gtk::VBox, public ThresholdAdjusterListener, public AdjusterListener, public FoldableToolPanel {
protected:
MyComboBoxText* method;
@@ -37,7 +37,6 @@ class Sharpening : public Gtk::VBox, public AdjusterListener, public FoldableToo
Adjuster* radius;
Adjuster* amount;
Adjuster* threshold;
Adjuster* eradius;
Adjuster* etolerance;
Adjuster* hcamount;
@@ -45,6 +44,7 @@ class Sharpening : public Gtk::VBox, public AdjusterListener, public FoldableToo
Gtk::VBox* hcbin;
Gtk::VBox* edgebox;
Gtk::VBox* hcbox;
ThresholdAdjuster* threshold;
Gtk::CheckButton* enabled;
bool lastEnabled;
sigc::connection enaConn;
@@ -68,6 +68,7 @@ class Sharpening : public Gtk::VBox, public AdjusterListener, public FoldableToo
void setBatchMode (bool batchMode);
void adjusterChanged (Adjuster* a, double newval);
void adjusterChanged (ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight);
void enabled_toggled ();
void edgesonly_toggled ();
void halocontrol_toggled ();

301
rtgui/thresholdadjuster.cc Normal file
View File

@@ -0,0 +1,301 @@
/*
* This file is part of RawTherapee.
*
* Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
*
* RawTherapee is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* RawTherapee is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
*/
#include "thresholdadjuster.h"
#include <sigc++/class_slot.h>
#include <cmath>
#include "multilangmgr.h"
#include "../rtengine/rtengine.h"
#include "options.h"
#include "guiutils.h"
#include "rtimage.h"
#define MIN_RESET_BUTTON_HEIGHT 17
ThresholdAdjuster::ThresholdAdjuster (Glib::ustring label, double minValue, double maxValue, double defBottom,
double defTop, unsigned int precision, bool startAtOne, bool editedCheckBox)
: tSelector(minValue, maxValue, defBottom, defTop, precision, startAtOne)
{
initialDefaultVal[ThresholdSelector::TS_BOTTOMLEFT] = defBottom;
initialDefaultVal[ThresholdSelector::TS_TOPLEFT] = defTop;
initialDefaultVal[ThresholdSelector::TS_BOTTOMRIGHT] = maxValue;
initialDefaultVal[ThresholdSelector::TS_TOPRIGHT] = maxValue;
initObject (label, editedCheckBox);
}
ThresholdAdjuster::ThresholdAdjuster (Glib::ustring label, double minValue, double maxValue,
double defBottomLeft, double defTopLeft, double defBottomRight, double defTopRight,
unsigned int precision, bool startAtOne, bool editedCheckBox)
: tSelector(minValue, maxValue, defBottomLeft, defTopLeft,
defBottomRight, defTopRight, precision, startAtOne)
{
initialDefaultVal[ThresholdSelector::TS_BOTTOMLEFT] = defBottomLeft;
initialDefaultVal[ThresholdSelector::TS_TOPLEFT] = defTopLeft;
initialDefaultVal[ThresholdSelector::TS_BOTTOMRIGHT] = defBottomRight;
initialDefaultVal[ThresholdSelector::TS_TOPRIGHT] = defTopRight;
initObject (label, editedCheckBox);
}
void ThresholdAdjuster::initObject (Glib::ustring label, bool editedcb) {
adjusterListener = NULL;
afterReset = false;
blocked = false;
addMode = false;
// TODO: let the user chose the default value of ThresholdAdjuster::delay, for slow machines
delay = options.adjusterDelay; // delay is no more static, so we can set the delay individually (useful for the RAW editor tab)
set_border_width (2);
hbox = Gtk::manage (new Gtk::HBox ());
this->label = Gtk::manage (new Gtk::Label (label, Gtk::ALIGN_LEFT));
if (editedcb) {
editedCheckBox = Gtk::manage (new Gtk::CheckButton ());
editedChange = editedCheckBox->signal_toggled().connect( sigc::mem_fun(*this, &ThresholdAdjuster::editedToggled) );
hbox->pack_start (*editedCheckBox);
}
else
editedCheckBox = NULL;
hbox->pack_start (*this->label);
reset = Gtk::manage (new Gtk::Button ());
reset->add (*Gtk::manage (new RTImage ("gtk-undo-ltr-small.png", "gtk-undo-rtl-small.png")));
reset->set_relief (Gtk::RELIEF_NONE);
reset->set_border_width (0);
reset->set_tooltip_text (M("ADJUSTER_RESET_TO_DEFAULT"));
hbox->pack_end (*reset, Gtk::PACK_SHRINK, 0);
reset->set_size_request (-1, this->label->get_height() > MIN_RESET_BUTTON_HEIGHT ? this->label->get_height(): MIN_RESET_BUTTON_HEIGHT);
pack_start (*hbox, false, false);
pack_start (tSelector, false, false);
editedState = defEditedState = Irrelevant;
selectorChange = tSelector.signal_value_changed().connect( sigc::mem_fun(*this, &ThresholdAdjuster::selectorChanged) );
reset->signal_button_release_event().connect_notify( sigc::mem_fun(*this, &ThresholdAdjuster::resetPressed) );
show_all ();
}
ThresholdAdjuster::~ThresholdAdjuster () {
selectorChange.disconnect();
delayConnection.block(true);
adjusterListener = NULL;
}
void ThresholdAdjuster::setDefault (double bottom, double top) {
selectorChange.block (true);
tSelector.setPositions(shapeValue(bottom), shapeValue(top));
selectorChange.block (false);
}
void ThresholdAdjuster::setDefault (double bottomLeft, double topLeft, double bottomRight, double topRight) {
selectorChange.block (true);
tSelector.setPositions(shapeValue(bottomLeft), shapeValue(topLeft), shapeValue(bottomRight), shapeValue(topRight));
selectorChange.block (false);
}
void ThresholdAdjuster::setDefaultEditedState (EditedState eState) {
defEditedState = eState;
}
void ThresholdAdjuster::resetPressed (GdkEventButton* event) {
if (editedState!=Irrelevant) {
editedState = defEditedState;
if (editedCheckBox) {
editedChange.block (true);
editedCheckBox->set_active (defEditedState==Edited);
editedChange.block (false);
}
refreshLabelStyle ();
}
afterReset = true;
if ((event != NULL) && (event->state & GDK_CONTROL_MASK) && (event->button == 1))
// CTRL pressed : resetting to current default value
tSelector.reset();
else
// no modifier key or addMode=true : resetting to initial default value
tSelector.setPositions(initialDefaultVal[ThresholdSelector::TS_BOTTOMLEFT],
initialDefaultVal[ThresholdSelector::TS_TOPLEFT],
initialDefaultVal[ThresholdSelector::TS_BOTTOMRIGHT],
initialDefaultVal[ThresholdSelector::TS_TOPRIGHT]);
}
double ThresholdAdjuster::shapeValue (double a) {
unsigned int digit = tSelector.getPrecision();
return round(a*pow(double(10), digit)) / pow(double(10), digit);
}
void ThresholdAdjuster::selectorChanged () {
if (delayConnection.connected())
delayConnection.disconnect ();
if (delay==0) {
if (adjusterListener && !blocked)
sendToListener ();
}
else
delayConnection = Glib::signal_timeout().connect (sigc::mem_fun(*this, &ThresholdAdjuster::notifyListener), delay);
if (!afterReset && editedState==UnEdited) {
editedState = Edited;
if (editedCheckBox) {
editedChange.block (true);
editedCheckBox->set_active (true);
editedChange.block (false);
}
refreshLabelStyle ();
}
afterReset = false;
}
void ThresholdAdjuster::setValue (double bottom, double top) {
selectorChange.block (true);
tSelector.setPositions(bottom, top);
selectorChange.block (false);
afterReset = false;
}
void ThresholdAdjuster::setValue (double bottomLeft, double topLeft, double bottomRight, double topRight) {
selectorChange.block (true);
tSelector.setPositions(bottomLeft, topLeft, bottomRight, topRight);
selectorChange.block (false);
afterReset = false;
}
void ThresholdAdjuster::getValue (Glib::ustring& bottom, Glib::ustring& top) {
tSelector.getPositions (bottom, top);
}
void ThresholdAdjuster::getValue (Glib::ustring& bottomLeft, Glib::ustring& topLeft, Glib::ustring& bottomRight, Glib::ustring& topRight) {
tSelector.getPositions (bottomLeft, topLeft, bottomRight, topRight);
}
bool ThresholdAdjuster::notifyListener () {
if (adjusterListener!=NULL && !blocked) {
GThreadLock lock;
sendToListener();
}
return false;
}
void ThresholdAdjuster::setEnabled (bool enabled) {
tSelector.set_sensitive (enabled);
}
void ThresholdAdjuster::setEditedState (EditedState eState) {
if (editedState!=eState) {
if (editedCheckBox) {
editedChange.block (true);
editedCheckBox->set_active (eState==Edited);
editedChange.block (false);
}
editedState = eState;
refreshLabelStyle ();
}
}
EditedState ThresholdAdjuster::getEditedState () {
if (editedState!=Irrelevant && editedCheckBox)
editedState = editedCheckBox->get_active () ? Edited : UnEdited;
return editedState;
}
void ThresholdAdjuster::showEditedCB () {
if (!editedCheckBox) {
editedCheckBox = Gtk::manage(new Gtk::CheckButton ());
hbox->pack_start (*editedCheckBox, Gtk::PACK_SHRINK, 2);
hbox->reorder_child (*editedCheckBox, 0);
editedChange = editedCheckBox->signal_toggled().connect( sigc::mem_fun(*this, &ThresholdAdjuster::editedToggled) );
}
}
void ThresholdAdjuster::refreshLabelStyle () {
/* Glib::RefPtr<Gtk::Style> style = label->get_style ();
Pango::FontDescription fd = style->get_font ();
fd.set_weight (editedState==Edited ? Pango::WEIGHT_BOLD : Pango::WEIGHT_NORMAL);
style->set_font (fd);
label->set_style (style);
label->queue_draw ();*/
}
void ThresholdAdjuster::editedToggled () {
if (adjusterListener && !blocked)
sendToListener ();
}
void ThresholdAdjuster::sendToListener () {
if (tSelector.getPrecision() > 0) {
// if precision is >0, then we assume that the listener is waiting for doubles
rtengine::procparams::Threshold<double> t = tSelector.getPositions<double>();
if (tSelector.isDouble())
adjusterListener->adjusterChanged (this, t.value[0], t.value[1], t.value[2], t.value[3]);
else
adjusterListener->adjusterChanged (this, t.value[0], t.value[1]);
}
else {
// if precision is equal to 0, then we assume that the listener is waiting for integers
rtengine::procparams::Threshold<int> t = tSelector.getPositions<int>();
if (tSelector.isDouble())
adjusterListener->adjusterChanged (this, t.value[0], t.value[1], t.value[2], t.value[3]);
else
adjusterListener->adjusterChanged (this, t.value[0], t.value[1]);
}
}
/* For better readability, this method create the history string of the parameter column,
* so that the parameters list can be read in a more logical way (i.e. corresponding
* to the startAtOne field)
*/
Glib::ustring ThresholdAdjuster::getHistoryString () {
if (tSelector.isDouble()) {
Glib::ustring bl, tl, br, tr;
tSelector.getPositions(bl, tl, br, tr);
return Glib::ustring::compose(tSelector.isStartAtOne()?"%2, %1, %3, %4":"%1, %2, %4, %3", bl, tl, br, tr);
}
else {
Glib::ustring b, t;
tSelector.getPositions(b, t);
return Glib::ustring::compose(tSelector.isStartAtOne()?"%2, %1":"%1, %2", b, t);
}
}

119
rtgui/thresholdadjuster.h Normal file
View File

@@ -0,0 +1,119 @@
/*
* This file is part of RawTherapee.
*
* Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
*
* RawTherapee is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* RawTherapee is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _THRESHOLDADJUSTER_H_
#define _THRESHOLDADJUSTER_H_
#include <gtkmm.h>
#include "editedstate.h"
#include "guiutils.h"
#include "thresholdselector.h"
class ThresholdAdjuster;
/*
* TODO: Maybe we could just send back the history string instead of the individual values?
*/
class ThresholdAdjusterListener {
public:
// to be used by listener that has created a ThresholdAdjuster with with single threshold and precision > 0
virtual void adjusterChanged (ThresholdAdjuster* a, double newBottom, double newTop) {}
// to be used by listener that has created a ThresholdAdjuster with with double threshold and precision > 0
virtual void adjusterChanged (ThresholdAdjuster* a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight) {}
// to be used by listener that has created a ThresholdAdjuster with with single threshold and precision == 0
virtual void adjusterChanged (ThresholdAdjuster* a, int newBottom, int newTop) {}
// to be used by listener that has created a ThresholdAdjuster with with double threshold and precision == 0
virtual void adjusterChanged (ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight) {}
};
class ThresholdAdjuster : public Gtk::VBox {
protected:
Gtk::HBox* hbox;
Gtk::Label* label;
ThresholdSelector tSelector;
//MySpinButton* spin;
Gtk::Button* reset;
ThresholdAdjusterListener* adjusterListener;
sigc::connection delayConnection;
//sigc::connection spinChange;
sigc::connection selectorChange;
sigc::connection editedChange;
bool listenerReady;
double initialDefaultVal[4]; // default value at construction time
EditedState editedState;
EditedState defEditedState;
Gtk::CheckButton* editedCheckBox;
bool afterReset;
bool blocked;
bool addMode;
int delay;
double shapeValue (double a);
void refreshLabelStyle ();
void initObject (Glib::ustring label, bool editedcb);
void sendToListener ();
public:
ThresholdAdjuster (Glib::ustring label, double minValue, double maxValue, double defBottom,
double defTop, unsigned int precision, bool startAtOne, bool editedCheckBox=false);
ThresholdAdjuster (Glib::ustring label, double minValue, double maxValue, double defBottomLeft,
double defTopLeft, double defBottomRight, double defTopRight, unsigned int precision,
bool startAtOne, bool editedCheckBox=false);
virtual ~ThresholdAdjuster ();
void setAdjusterListener (ThresholdAdjusterListener* alistener) { adjusterListener = alistener; }
template <typename T>
rtengine::procparams::Threshold<T> getValue () { return tSelector.getPositions<T>(); }
void getValue (double& bottom, double& top);
void getValue (double& bottomLeft, double& topLeft, double& bottomRight, double& topRight);
void getValue (int& bottom, int& top);
void getValue (int& bottomLeft, int& topLeft, int& bottomRight, int& topRight);
void getValue (Glib::ustring& bottom, Glib::ustring& top);
void getValue (Glib::ustring& bottomLeft, Glib::ustring& topLeft, Glib::ustring& bottomRight, Glib::ustring& topRight);
template <class T>
void setValue (const rtengine::procparams::Threshold<T> &tValues) {
tSelector.setPositions<T>(tValues);
}
void setValue (double bottom, double top);
void setValue (double bottomLeft, double topLeft, double bottomRight, double topRight);
void setEnabled (bool enabled);
template <typename T>
void setDefault (const rtengine::procparams::Threshold<T> &tresh) { tSelector.setDefaults<T>(tresh); }
void setDefault (double defBottom, double defTop);
void setDefault (double defBottomLeft, double defTopLeft, double defBottomRight, double defTopRight);
void setEditedState (EditedState eState);
EditedState getEditedState ();
void setDefaultEditedState (EditedState eState);
void showEditedCB ();
void block(bool isBlocked) { blocked = isBlocked; }
void setBgGradient (const std::vector<GradientMilestone> &milestones) { tSelector.setBgGradient (milestones); }
//void spinChanged ();
void selectorChanged ();
bool notifyListener ();
void resetPressed (GdkEventButton* event);
void editedToggled ();
Glib::ustring getHistoryString ();
};
#endif

570
rtgui/thresholdselector.cc Normal file
View File

@@ -0,0 +1,570 @@
/*
* This file is part of RawTherapee.
*
* Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
*
* RawTherapee is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* RawTherapee is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
*/
#include "thresholdselector.h"
#include "multilangmgr.h"
#include <cassert>
#include <iomanip>
#include "mycurve.h"
ThresholdSelector::ThresholdSelector(double minValue, double maxValue, double defBottom, double defTop, unsigned int precision, bool startAtOne) {
positions[TS_BOTTOMLEFT] = defPos[TS_BOTTOMLEFT] = defBottom;
positions[TS_TOPLEFT] = defPos[TS_TOPLEFT] = defTop;
positions[TS_BOTTOMRIGHT] = defPos[TS_BOTTOMRIGHT] = maxValue;
positions[TS_TOPRIGHT] = defPos[TS_TOPRIGHT] = maxValue;
this->precision = precision;
doubleThresh = false;
#ifndef NDEBUG
if (startAtOne) {
assert (defBottom >= defTop);
assert (defTop >= minValue);
assert (defBottom <= maxValue);
}
else {
assert (defTop >= defBottom);
assert (defBottom >= minValue);
assert (defTop <= maxValue);
}
#endif
initValues (minValue, maxValue, startAtOne);
}
ThresholdSelector::ThresholdSelector(double minValue, double maxValue, double defBottomLeft, double defTopLeft, double defBottomRight, double defTopRight, unsigned int precision, bool startAtOne) {
positions[TS_BOTTOMLEFT] = defPos[TS_BOTTOMLEFT] = defBottomLeft;
positions[TS_TOPLEFT] = defPos[TS_TOPLEFT] = defTopLeft;
positions[TS_BOTTOMRIGHT] = defPos[TS_BOTTOMRIGHT] = defBottomRight;
positions[TS_TOPRIGHT] = defPos[TS_TOPRIGHT] = defTopRight;
this->precision = precision;
doubleThresh = true;
#ifndef NDEBUG
if (startAtOne) {
assert (minValue <= defTopLeft);
assert (defTopLeft <= defBottomLeft);
assert (defBottomLeft <= defBottomRight);
assert (defBottomRight <= defTopRight);
assert (defTopRight <= maxValue);
}
else {
assert (minValue <= defBottomLeft);
assert (defBottomLeft <= defTopLeft);
assert (defTopLeft <= defTopRight);
assert (defTopRight <= defBottomRight);
assert (defBottomRight <= maxValue);
}
#endif
initValues (minValue, maxValue, startAtOne);
}
void ThresholdSelector::initValues (double minValue, double maxValue, bool startAtOne) {
assert(minValue <= maxValue);
initalEq1 = startAtOne;
minVal = minValue;
maxVal = maxValue;
oldLitCursor = litCursor = TS_UNDEFINED;
movedCursor = TS_UNDEFINED;
secondaryMovedCursor = TS_UNDEFINED;
set_size_request (-1, 20);
add_events(Gdk::LEAVE_NOTIFY_MASK);
set_name("ThresholdSelector");
set_can_focus(false);
set_app_paintable(true);
updateTooltip();
}
/*
* Set the position of the sliders without telling it to the listener
*/
void ThresholdSelector::setPositions (double bottom, double top) {
setPositions(bottom, top, maxVal, maxVal);
}
/*
* Set the position of the sliders without telling it to the listener
*/
void ThresholdSelector::setPositions (double bottomLeft, double topLeft, double bottomRight, double topRight) {
bool different = ( (positions[TS_TOPLEFT] != topLeft) || (positions[TS_TOPRIGHT] != topRight) ||
(positions[TS_BOTTOMLEFT] != bottomLeft) || (positions[TS_BOTTOMRIGHT] != bottomRight) );
positions[TS_BOTTOMLEFT] = bottomLeft;
positions[TS_TOPLEFT] = topLeft;
positions[TS_BOTTOMRIGHT] = bottomRight;
positions[TS_TOPRIGHT] = topRight;
if (different) {
sig_val_changed.emit();
updateTooltip();
queue_draw ();
}
}
void ThresholdSelector::setDefaults (double bottom, double top) {
setDefaults(bottom, top, maxVal, maxVal);
}
void ThresholdSelector::setDefaults (double bottomLeft, double topLeft, double bottomRight, double topRight) {
defPos[TS_BOTTOMLEFT] = bottomLeft;
defPos[TS_TOPLEFT] = topLeft;
if (doubleThresh) {
defPos[TS_BOTTOMRIGHT] = bottomRight;
defPos[TS_TOPRIGHT] = topRight;
}
}
void ThresholdSelector::getPositions (Glib::ustring& bottom, Glib::ustring& top) {
bottom = Glib::ustring::format(std::fixed, std::setprecision(precision),positions[TS_BOTTOMLEFT]);
top = Glib::ustring::format(std::fixed, std::setprecision(precision),positions[TS_TOPLEFT]);
}
void ThresholdSelector::getPositions (Glib::ustring& bottomLeft, Glib::ustring& topLeft, Glib::ustring& bottomRight, Glib::ustring& topRight) {
bottomLeft = Glib::ustring::format(std::fixed, std::setprecision(precision),positions[TS_BOTTOMLEFT]);
topLeft = Glib::ustring::format(std::fixed, std::setprecision(precision),positions[TS_TOPLEFT]);
bottomRight = Glib::ustring::format(std::fixed, std::setprecision(precision),positions[TS_BOTTOMRIGHT]);
topRight = Glib::ustring::format(std::fixed, std::setprecision(precision),positions[TS_TOPRIGHT]);
}
void ThresholdSelector::setBgGradient (const std::vector<GradientMilestone> &milestones) {
bgGradient.clear();
bgGradient = milestones;
}
void ThresholdSelector::on_realize() {
Gtk::DrawingArea::on_realize();
add_events(Gdk::EXPOSURE_MASK | Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK);
}
bool ThresholdSelector::on_expose_event(GdkEventExpose* event) {
Gdk::Color c;
Glib::RefPtr<Gdk::Window> win = get_window();
Cairo::RefPtr<Cairo::Context> cr = win->create_cairo_context();
double positions01[4];
int w = get_width ();
int h = get_height ();
wslider = std::max(int(h / 5), 10);
int hwslider = wslider/2;
int iw = w-wslider-2*hb; // inner width (excluding padding for tabs)
for (int i=0; i<4; i++) {
positions01[i] = to01(positions[i]);
}
Gtk::StateType state = !is_sensitive() ? Gtk::STATE_INSENSITIVE : Gtk::STATE_NORMAL;
Glib::RefPtr<Gtk::Style> style = get_style();
// set the box's colors
cr->set_line_width (1.0);
cr->set_line_cap(Cairo::LINE_CAP_BUTT);
if (is_sensitive() && bgGradient.size()>1) {
// gradient background
Cairo::RefPtr< Cairo::LinearGradient > bggradient = Cairo::LinearGradient::create (hwslider, 0, hwslider+iw, 0);
for (std::vector<GradientMilestone>::iterator i=bgGradient.begin(); i!=bgGradient.end(); i++) {
bggradient->add_color_stop_rgb (i->position, i->r, i->g, i->b);
}
cr->set_source (bggradient);
// draw the box's background
cr->rectangle (hb+hwslider-0.5, double(int(float(h)*1.5f/7.f))+0.5, iw+1, double(int(float(h)*4.f/7.f)));
cr->fill();
}
else if (is_sensitive()) {
// solid background
c = style->get_bg (state);
cr->set_source_rgb (c.get_red_p()*0.85, c.get_green_p()*0.85, c.get_blue_p()*0.85);
// draw the box's background
cr->rectangle (hb+hwslider-0.5, double(int(float(h)*1.5f/7.f))+0.5, iw+1, double(int(float(h)*4.f/7.f)));
cr->fill();
}
// draw curve
double yStart = initalEq1 ? double(int(float(h)*1.5f/7.f))+1.5 : double(int(float(h)*5.5f/7.f))-0.5;
double yEnd = initalEq1 ? double(int(float(h)*5.5f/7.f))-0.5 : double(int(float(h)*1.5f/7.f))+1.5;
ThreshCursorId p[4];
if (initalEq1) { p[0] = TS_TOPLEFT; p[1] = TS_BOTTOMLEFT; p[2] = TS_BOTTOMRIGHT; p[3] = TS_TOPRIGHT; }
else { p[0] = TS_BOTTOMLEFT; p[1] = TS_TOPLEFT; p[2] = TS_TOPRIGHT; p[3] = TS_BOTTOMRIGHT; }
if (positions[p[1]] > minVal)
cr->move_to (hb+hwslider, yStart);
else
cr->move_to (hb+hwslider, yEnd);
if (positions[p[0]] > minVal)
cr->line_to (hb+hwslider+iw*positions01[p[0]]+0.5, yStart);
if (positions[p[1]] > minVal)
cr->line_to (hb+hwslider+iw*positions01[p[1]]+0.5, yEnd);
cr->line_to (hb+hwslider+iw*positions01[p[2]]+0.5, yEnd);
if (doubleThresh && positions[p[2]] < maxVal) {
cr->line_to (hb+hwslider+iw*positions01[p[3]]+0.5, yStart);
if (positions[p[3]] < maxVal)
cr->line_to (hb+hwslider+iw+0.5, yStart);
}
if (is_sensitive() && bgGradient.size()>1) {
// draw surrounding curve
c = style->get_bg (state);
cr->set_source_rgb (c.get_red_p()*0.85, c.get_green_p()*0.85, c.get_blue_p()*0.85);
cr->set_line_width (5.0);
cr->stroke_preserve();
}
// draw curve
if (is_sensitive()) {
c = style->get_fg (movedCursor!=TS_UNDEFINED || litCursor!=TS_UNDEFINED ? Gtk::STATE_PRELIGHT : Gtk::STATE_ACTIVE);
cr->set_source_rgb (c.get_red_p(), c.get_green_p(), c.get_blue_p());
}
else {
c = style->get_bg (Gtk::STATE_INSENSITIVE);
cr->set_source_rgb (c.get_red_p()*0.7, c.get_green_p()*0.7, c.get_blue_p()*0.7);
}
cr->set_line_width (1.5);
cr->stroke ();
// draw the box's borders
cr->set_line_width (1.);
cr->rectangle (hb+hwslider-0.5, double(int(float(h)*1.5f/7.f))+0.5, iw+1, double(int(float(h)*4.f/7.f)));
c = style->get_bg (state);
cr->set_source_rgb (c.get_red_p()*0.7, c.get_green_p()*0.7, c.get_blue_p()*0.7);
cr->stroke ();
// draw sliders
//if (!(litCursor == TS_UNDEFINED && movedCursor == TS_UNDEFINED)) {
cr->set_line_width (1.);
for (int i=0; i<(doubleThresh?4:2); i++) {
double posX = hb+hwslider+iw*positions01[i]+0.5;
double arrowY = i==0 || i==2 ? h-(h*2.5/7.-0.5)-vb : h*2.5/7.-0.5+vb;
double baseY = i==0 || i==2 ? h-0.5-vb : 0.5+vb;
double centerY = (arrowY+baseY)/2.;
cr->move_to (posX, arrowY);
cr->line_to (posX+hwslider, centerY);
cr->line_to (posX+hwslider, baseY);
cr->line_to (posX-hwslider, baseY);
cr->line_to (posX-hwslider, centerY);
cr->close_path();
if (i==movedCursor) {
// moved (selected)
c = style->get_bg (Gtk::STATE_SELECTED);
cr->set_source_rgb (c.get_red_p(), c.get_green_p(), c.get_blue_p());
cr->fill_preserve ();
//c = style->get_dark (Gtk::STATE_SELECTED);
//cr->set_source_rgb (c.get_red_p(), c.get_green_p(), c.get_blue_p());
c = style->get_bg (state);
cr->set_source_rgb (c.get_red_p()*0.55, c.get_green_p()*0.55, c.get_blue_p()*0.55);
cr->stroke ();
}
else if (i==secondaryMovedCursor || (movedCursor==TS_UNDEFINED && i==litCursor)) {
// prelight
c = style->get_bg (Gtk::STATE_PRELIGHT);
cr->set_source_rgb (c.get_red_p(), c.get_green_p(), c.get_blue_p());
cr->fill_preserve ();
c = style->get_bg (state);
cr->set_source_rgb (c.get_red_p()*0.55, c.get_green_p()*0.55, c.get_blue_p()*0.55);
cr->stroke ();
}
else {
// normal
c = style->get_bg (is_sensitive() ? Gtk::STATE_ACTIVE : Gtk::STATE_INSENSITIVE);
cr->set_source_rgb (c.get_red_p(), c.get_green_p(), c.get_blue_p());
cr->fill_preserve ();
c = style->get_bg (state);
cr->set_source_rgb (c.get_red_p()*0.7, c.get_green_p()*0.7, c.get_blue_p()*0.7);
cr->stroke ();
}
}
//}
//printf("\n\n");
// draw text for the slider that is being moved
/*
* Original code from shcselector.cc
*
Glib::RefPtr<Pango::Context> context = get_pango_context () ;
cr->set_line_width (0.5);
if (litCursor != TS_UNDEFINED) {
int offset;
int layout_width, layout_height;
Glib::RefPtr<Pango::Layout> layout = create_pango_layout(Glib::ustring::format(std::setprecision(2), positions01[litCursor]));
layout->get_pixel_size(layout_width, layout_height);
offset = positions01[litCursor] > 0.5 ? -layout_width-1-wslider/2 : 1+wslider/2;
cr->move_to (w*positions01[litCursor]+offset-0.5, 0);
cr->set_source_rgb (bgnc.get_red_p(), bgnc.get_green_p(), bgnc.get_blue_p());
layout->add_to_cairo_context (cr);
cr->fill_preserve ();
cr->stroke ();
cr->move_to (w*positions01[litCursor]+offset+0.5, 1);
layout->add_to_cairo_context (cr);
cr->fill_preserve ();
cr->stroke ();
cr->set_source_rgb (fgnc.get_red_p(), fgnc.get_green_p(), fgnc.get_blue_p());
cr->move_to (w*positions01[litCursor]+offset, 0.5);
layout->add_to_cairo_context (cr);
cr->fill_preserve ();
cr->stroke ();
}*/
return true;
}
bool ThresholdSelector::on_button_press_event (GdkEventButton* event) {
if (event->button == 1) {
movedCursor = litCursor;
findSecondaryMovedCursor(event->state);
tmpX = event->x;
queue_draw ();
}
grab_focus();
return true;
}
bool ThresholdSelector::on_button_release_event (GdkEventButton* event) {
if (event->button == 1) {
findLitCursor(event->x, event->y);
movedCursor = TS_UNDEFINED;
secondaryMovedCursor = TS_UNDEFINED;
queue_draw ();
}
return true;
}
bool ThresholdSelector::on_leave_notify_event (GdkEventCrossing* event) {
if (movedCursor == TS_UNDEFINED) {
litCursor = TS_UNDEFINED;
oldLitCursor = TS_UNDEFINED;
queue_draw();
}
return true;
}
bool ThresholdSelector::on_motion_notify_event (GdkEventMotion* event) {
int w = get_width ();
findLitCursor(event->x, event->y);
if (movedCursor != TS_UNDEFINED) {
// user is moving a cursor or two
double minBound, maxBound;
findSecondaryMovedCursor(event->state);
// computing the boundaries
findBoundaries(minBound, maxBound);
double dX = ( (event->x-tmpX)*(maxVal-minVal) )/( w-2*hb );
// slow motion if CTRL is pressed
if (event->state & Gdk::CONTROL_MASK)
dX *= 0.05;
// get the new X value, inside bounds
double newX = positions[movedCursor] + dX;
if (newX > maxBound) newX = maxBound;
else if (newX < minBound) newX = minBound;
// compute the effective dX
dX = newX - positions[movedCursor];
// set the new position of the moved cursor
positions[movedCursor] = newX;
// apply the decay to the secondary moved cursor, if necessary
if (secondaryMovedCursor != TS_UNDEFINED) {
positions[secondaryMovedCursor] += dX;
}
// set the new reference value for the next move
tmpX = event->x;
// update the tooltip
updateTooltip();
sig_val_changed.emit();
queue_draw ();
}
else {
if (litCursor != oldLitCursor)
queue_draw ();
oldLitCursor = litCursor;
}
return true;
}
void ThresholdSelector::findLitCursor(int posX, int posY) {
int w = get_width ();
int h = get_height ();
litCursor = TS_UNDEFINED;
if (posY >=0 && posY <= h/2) {
if (posX > 0 && posX < w) {
litCursor = TS_TOPLEFT;
if (doubleThresh) {
double cursorX = (posX-hb)*(maxVal-minVal)/(w-2*hb)+minVal;
if (cursorX>positions[TS_TOPRIGHT] || abs(cursorX-positions[TS_TOPRIGHT]) < abs(cursorX-positions[TS_TOPLEFT]))
litCursor = TS_TOPRIGHT;
}
}
}
else if (posY > h/2 && posY < h) {
if (posX > 0 && posX < w) {
litCursor = TS_BOTTOMLEFT;
if (doubleThresh) {
double cursorX = (posX-hb)*(maxVal-minVal)/(w-2*hb)+minVal;
if (cursorX>positions[TS_BOTTOMRIGHT] || abs(cursorX-positions[TS_BOTTOMRIGHT]) < abs(cursorX-positions[TS_BOTTOMLEFT]))
litCursor = TS_BOTTOMRIGHT;
}
}
}
}
void ThresholdSelector::findBoundaries(double &min, double &max) {
switch (movedCursor) {
case (TS_BOTTOMLEFT):
if (initalEq1) {
min = secondaryMovedCursor == TS_UNDEFINED ? positions[TS_TOPLEFT] : minVal+(positions[TS_BOTTOMLEFT]-positions[TS_TOPLEFT]);
max = positions[TS_BOTTOMRIGHT];
}
else {
min = minVal;
max = secondaryMovedCursor == TS_UNDEFINED ? positions[TS_TOPLEFT] : positions[TS_TOPRIGHT]-(positions[TS_TOPLEFT]-positions[TS_BOTTOMLEFT]);
}
break;
case (TS_TOPLEFT):
if (initalEq1) {
min = minVal;
max = secondaryMovedCursor == TS_UNDEFINED ? positions[TS_BOTTOMLEFT] : positions[TS_BOTTOMRIGHT]-(positions[TS_BOTTOMLEFT]-positions[TS_TOPLEFT]);
}
else {
min = secondaryMovedCursor == TS_UNDEFINED ? positions[TS_BOTTOMLEFT] : minVal+(positions[TS_TOPLEFT]-positions[TS_BOTTOMLEFT]);
max = positions[TS_TOPRIGHT];
}
break;
case (TS_BOTTOMRIGHT):
if (initalEq1) {
min = positions[TS_BOTTOMLEFT];
max = secondaryMovedCursor == TS_UNDEFINED ? positions[TS_TOPRIGHT] : maxVal-(positions[TS_TOPRIGHT]-positions[TS_BOTTOMRIGHT]);
}
else {
min = secondaryMovedCursor == TS_UNDEFINED ? positions[TS_TOPRIGHT] : positions[TS_TOPLEFT]+(positions[TS_BOTTOMRIGHT]-positions[TS_TOPRIGHT]);
max = maxVal;
}
break;
case (TS_TOPRIGHT):
if (initalEq1) {
min = secondaryMovedCursor == TS_UNDEFINED ? positions[TS_BOTTOMRIGHT] : positions[TS_BOTTOMLEFT]+(positions[TS_TOPRIGHT]-positions[TS_BOTTOMRIGHT]);
max = maxVal;
}
else {
min = positions[TS_TOPLEFT];
max = secondaryMovedCursor == TS_UNDEFINED ? positions[TS_BOTTOMRIGHT] : maxVal-(positions[TS_BOTTOMRIGHT]-positions[TS_TOPRIGHT]);
}
break;
default:
min = minVal;
max = maxVal;
break;
}
}
void ThresholdSelector::findSecondaryMovedCursor(guint state) {
secondaryMovedCursor = TS_UNDEFINED;
if (!(state & Gdk::SHIFT_MASK)) {
switch (movedCursor) {
case (TS_BOTTOMLEFT):
secondaryMovedCursor = TS_TOPLEFT;
break;
case (TS_TOPLEFT):
secondaryMovedCursor = TS_BOTTOMLEFT;
break;
case (TS_BOTTOMRIGHT):
secondaryMovedCursor = TS_TOPRIGHT;
break;
case (TS_TOPRIGHT):
secondaryMovedCursor = TS_BOTTOMRIGHT;
break;
default:
secondaryMovedCursor = TS_UNDEFINED;
break;
}
}
}
void ThresholdSelector::styleChanged (const Glib::RefPtr<Gtk::Style>& style) {
queue_draw ();
}
void ThresholdSelector::reset () {
positions[0] = defPos[0];
positions[1] = defPos[1];
positions[2] = defPos[2];
positions[2] = defPos[3];
updateTooltip();
queue_draw ();
}
inline double ThresholdSelector::to01(double value) {
double rVal = (value-minVal)/(maxVal-minVal);
if (rVal < 0.) rVal = 0.;
else if (rVal > 1.) rVal = 1.;
return rVal;
}
void ThresholdSelector::updateTooltip() {
Glib::ustring tTip;
if (doubleThresh)
tTip = Glib::ustring::compose("<b>%1:</b> %2 <b>%3:</b> %4\n<b>%5:</b> %6 <b>%7:</b> %8\n%9",
M("THRESHOLDSELECTOR_TL"), Glib::ustring::format(std::fixed, std::setprecision(precision), positions[TS_TOPLEFT]),
M("THRESHOLDSELECTOR_TR"), Glib::ustring::format(std::fixed, std::setprecision(precision), positions[TS_TOPRIGHT]),
M("THRESHOLDSELECTOR_BL"), Glib::ustring::format(std::fixed, std::setprecision(precision), positions[TS_BOTTOMLEFT]),
M("THRESHOLDSELECTOR_BR"), Glib::ustring::format(std::fixed, std::setprecision(precision), positions[TS_BOTTOMRIGHT]),
M("THRESHOLDSELECTOR_HINT")
);
else
tTip = Glib::ustring::compose("<b>%1:</b> %2\n<b>%3:</b> %4\n%5",
M("THRESHOLDSELECTOR_T"), Glib::ustring::format(std::fixed, std::setprecision(precision), positions[TS_TOPLEFT]),
M("THRESHOLDSELECTOR_B"), Glib::ustring::format(std::fixed, std::setprecision(precision), positions[TS_BOTTOMLEFT]),
M("THRESHOLDSELECTOR_HINT")
);
set_tooltip_markup(tTip);
}
sigc::signal<void> ThresholdSelector::signal_value_changed() {
return sig_val_changed;
}

161
rtgui/thresholdselector.h Normal file
View File

@@ -0,0 +1,161 @@
/*
* This file is part of RawTherapee.
*
* Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
*
* RawTherapee is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* RawTherapee is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _THRESHOLDSELECTOR_
#define _THRESHOLDSELECTOR_
#include "guiutils.h"
#include "../rtengine/procparams.h"
/*
* This widget will let you select a linearly variable threshold, creating a ramp up
* if you want to go from a null effect to a full effect
* 0-0-ramp up-1-1
* or a ramp down if you want the contrary
* 1-1-ramp down-0-0
*
* You can optionally create a double threshold
* 0-0-ramp up-1-1-ramp down-0-0
* or
* 1-1-ramp down-0-0-ramp up-1-1
*
* Please note that the values are related to the cursors, depending on their position
* on the graph. E.g. the "bottomLeft" value is related to the bottom left cursor.
*/
class ThresholdSelector : public Gtk::DrawingArea {
public:
enum ThreshCursorId {
TS_UNDEFINED=-1,
TS_BOTTOMLEFT,
TS_TOPLEFT,
TS_BOTTOMRIGHT,
TS_TOPRIGHT
};
protected:
sigc::signal<void> sig_val_changed;
Glib::RefPtr<Gdk::GC> gc_;
Glib::RefPtr<Gdk::Pixmap> backBuffer;
std::vector<GradientMilestone> bgGradient;
bool doubleThresh; // If true: there curve is a double threshold (0 to 1 to 0, or 1 to 0 to 1).
bool initalEq1; // If true: the curve start at 1 (top); if false: the curve start at 0 (bottom)
unsigned int precision; // Decimal number if this object has to handle "double" values
ThreshCursorId litCursor;
ThreshCursorId oldLitCursor;
double boundary1[2], boundary2[2];
double tmpX, tmpPos;
ThreshCursorId movedCursor, secondaryMovedCursor;
double minVal, maxVal;
double defPos[4];
double positions[4];
unsigned short wslider;
const static int hb = 3; // horizontal border
const static int vb = 2; // vertical border
void initValues (double minValue, double maxValue, bool startAtOne);
void findLitCursor(int posX, int posY);
void findSecondaryMovedCursor(guint state);
void findBoundaries(double &min, double &max);
double to01(double value);
void updateTooltip();
public:
sigc::signal<void> signal_value_changed();
ThresholdSelector(double minValue, double maxValue, double defBottom, double defTop, unsigned int precision, bool startAtOne);
ThresholdSelector(double minValue, double maxValue, double defBottomLeft, double defTopLeft, double defBottomRight, double defTopRight, unsigned int precision, bool startAtOne);
double shapeValue (double value) { return round(value*pow(double(10), precision)) / pow(double(10), precision); }
template <typename T>
void setDefaults (const rtengine::procparams::Threshold<T> &t) {
defPos[TS_BOTTOMLEFT] = double(t.value[0]); // should we use shapeValue() ?
defPos[TS_TOPLEFT] = double(t.value[1]);
if (doubleThresh) {
defPos[TS_BOTTOMRIGHT] = double(t.value[2]);
defPos[TS_TOPRIGHT] = double(t.value[3]);
}
}
void setDefaults (double bottom, double top);
void setDefaults (double bottomLeft, double topLeft, double bottomRight, double topRight);
template <typename T>
void setPositions (const rtengine::procparams::Threshold<T> &tValues) {
positions[TS_BOTTOMLEFT] = static_cast<double>(tValues.value[TS_BOTTOMLEFT]);
positions[TS_TOPLEFT] = static_cast<double>(tValues.value[TS_TOPLEFT]);
if (tValues.isDouble()) {
positions[TS_BOTTOMRIGHT] = static_cast<double>(tValues.value[TS_BOTTOMRIGHT]);
positions[TS_TOPRIGHT] = static_cast<double>(tValues.value[TS_TOPRIGHT]);
}
updateTooltip();
queue_draw();
}
void setPositions (double bottom, double top);
void setPositions (double bottomLeft, double topLeft, double bottomRight, double topRight);
template <typename T>
rtengine::procparams::Threshold<T> getPositions () {
if (doubleThresh) {
rtengine::procparams::Threshold<T> rThresh(
static_cast<T>(shapeValue(positions[TS_BOTTOMLEFT])),
static_cast<T>(shapeValue(positions[TS_TOPLEFT])),
static_cast<T>(shapeValue(positions[TS_BOTTOMRIGHT])),
static_cast<T>(shapeValue(positions[TS_TOPRIGHT])),
initalEq1
);
return rThresh;
}
else {
rtengine::procparams::Threshold<T> rThresh(
static_cast<T>(shapeValue(positions[TS_BOTTOMLEFT])),
static_cast<T>(shapeValue(positions[TS_TOPLEFT])),
initalEq1
);
return rThresh;
}
}
void getPositions (Glib::ustring& bottom, Glib::ustring& top);
void getPositions (Glib::ustring& bottomLeft, Glib::ustring& topLeft, Glib::ustring& bottomRight, Glib::ustring& topRight);
void setBgGradient (const std::vector<GradientMilestone> &milestones);
bool isStartAtOne() { return initalEq1; }
bool isDouble() { return doubleThresh; }
void on_realize ();
bool on_expose_event(GdkEventExpose* event);
bool on_button_press_event (GdkEventButton* event);
bool on_button_release_event (GdkEventButton* event);
bool on_motion_notify_event (GdkEventMotion* event);
bool on_leave_notify_event (GdkEventCrossing* event);
void styleChanged (const Glib::RefPtr<Gtk::Style>& style);
unsigned int getPrecision () { return precision; }
void reset ();
};
#endif

View File

@@ -327,6 +327,11 @@ void Thumbnail::setProcParams (const ProcParams& pp, ParamsEdited* pe, int whoCh
Glib::Mutex::Lock lock(mutex);
#endif
if (pparams.sharpening.threshold.isDouble() != pp.sharpening.threshold.isDouble())
printf("WARNING: Sharpening different!\n");
if (pparams.vibrance.psthreshold.isDouble() != pp.vibrance.psthreshold.isDouble())
printf("WARNING: Vibrance different!\n");
if (pparams!=pp)
cfs.recentlySaved = false;

View File

@@ -23,6 +23,7 @@ using namespace rtengine;
using namespace rtengine::procparams;
Vibrance::Vibrance () : Gtk::VBox(), FoldableToolPanel(this) {
enabled = Gtk::manage (new Gtk::CheckButton (M("GENERAL_ENABLED")));
enabled->set_active (false);
pack_start(*enabled, Gtk::PACK_SHRINK, 0);
@@ -38,7 +39,7 @@ Vibrance::Vibrance () : Gtk::VBox(), FoldableToolPanel(this) {
//if (saturated->delay < 1000) saturated->delay = 1000;
pack_start( *saturated, Gtk::PACK_SHRINK, 0);
psThreshold = Gtk::manage(new Adjuster (M("TP_VIBRANCE_PSTHRESHOLD"),0,100,5,75));
psThreshold = Gtk::manage (new ThresholdAdjuster (M("TP_VIBRANCE_PSTHRESHOLD"), 0., 100., 75., 75., 0, false));
psThreshold->setAdjusterListener (this);
psThreshold->set_sensitive(false);
//if (psThreshold->delay < 1000) psThreshold->delay = 1000;
@@ -98,7 +99,7 @@ void Vibrance::read(const ProcParams* pp, const ParamsEdited* pedited) {
lastPastSatTog = pp->vibrance.pastsattog;
pastels->setValue (pp->vibrance.pastels);
psThreshold->setValue (pp->vibrance.psthreshold);
psThreshold->setValue<int> (pp->vibrance.psthreshold);
if (lastPastSatTog) {
// Link both slider, so we set saturated and psThresholds unsensitive
@@ -120,7 +121,7 @@ void Vibrance::write( ProcParams* pp, ParamsEdited* pedited) {
pp->vibrance.enabled = enabled->get_active ();
pp->vibrance.pastels = pastels->getIntValue();
pp->vibrance.saturated = pastSatTog->get_active() ? pp->vibrance.pastels : saturated->getIntValue ();
pp->vibrance.psthreshold = psThreshold->getIntValue ();
pp->vibrance.psthreshold = psThreshold->getValue<int> ();
pp->vibrance.protectskins = protectSkins->get_active ();
pp->vibrance.avoidcolorshift = avoidColorShift->get_active ();
pp->vibrance.pastsattog = pastSatTog->get_active ();
@@ -249,12 +250,16 @@ void Vibrance::adjusterChanged (Adjuster* a, double newval) {
listener->panelChanged (EvVibrancePastels, value );
else if (a == saturated && !pastSatTog->get_active())
listener->panelChanged (EvVibranceSaturated, value );
else if (a == psThreshold){
listener->panelChanged (EvVibrancePastSatThreshold, value );
}
}
}
void Vibrance::adjusterChanged (ThresholdAdjuster* a, int newBottom, int newTop) {
if (listener && enabled->get_active()) {
listener->panelChanged (EvVibrancePastSatThreshold, psThreshold->getHistoryString());
}
}
void Vibrance::setBatchMode(bool batchMode) {
ToolPanel::setBatchMode (batchMode);
@@ -267,7 +272,7 @@ void Vibrance::setBatchMode(bool batchMode) {
void Vibrance::setDefaults(const ProcParams* defParams, const ParamsEdited* pedited) {
pastels->setDefault (defParams->vibrance.pastels);
saturated->setDefault (defParams->vibrance.saturated);
psThreshold->setDefault (defParams->vibrance.psthreshold);
psThreshold->setDefault<int> (defParams->vibrance.psthreshold);
if (pedited) {
pastels->setDefaultEditedState (pedited->vibrance.pastels ? Edited : UnEdited);
@@ -284,11 +289,9 @@ void Vibrance::setDefaults(const ProcParams* defParams, const ParamsEdited* pedi
void Vibrance::setAdjusterBehavior (bool pastelsadd, bool saturatedadd, bool psthreshdadd) {
pastels->setAddMode (pastelsadd);
saturated->setAddMode (saturatedadd);
psThreshold->setAddMode (psthreshdadd);
}
void Vibrance::trimValues (ProcParams* pp) {
pastels->trimValue (pp->vibrance.pastels);
saturated->trimValue (pp->vibrance.saturated);
psThreshold->trimValue (pp->vibrance.psthreshold);
}

View File

@@ -21,16 +21,16 @@
#include <gtkmm.h>
#include "adjuster.h"
//#include "guiutils.h"
#include "thresholdadjuster.h"
#include "toolpanel.h"
class Vibrance : public Gtk::VBox, public AdjusterListener, public FoldableToolPanel {
class Vibrance : public Gtk::VBox, public AdjusterListener, public ThresholdAdjusterListener, public FoldableToolPanel {
protected:
Gtk::CheckButton* enabled;
Adjuster* pastels;
Adjuster* saturated;
Adjuster* psThreshold;
ThresholdAdjuster* psThreshold;
Gtk::CheckButton* protectSkins;
Gtk::CheckButton* avoidColorShift;
Gtk::CheckButton* pastSatTog;
@@ -55,6 +55,7 @@ public:
void trimValues (rtengine::procparams::ProcParams* pp);
void setAdjusterBehavior (bool amountadd, bool passadd, bool psthreshdadd);
void adjusterChanged (Adjuster* a, double newval);
void adjusterChanged (ThresholdAdjuster* a, int newBottom, int newTop);
void enabled_toggled ();
void protectskins_toggled ();