Fixed endless loop in chromiluminancecurve, Issue 2821, Fixed some ciecam02 bugs, Issue 2819

This commit is contained in:
Ingo 2015-06-25 22:22:44 +02:00
parent 0bfc5a0e98
commit 90229e99f6
6 changed files with 24 additions and 17 deletions

View File

@ -13,7 +13,7 @@ MultiUser=true
[File Browser] [File Browser]
# Image filename extensions to be looked for, and their corresponding search state (0/1 -> skip/include) # Image filename extensions to be looked for, and their corresponding search state (0/1 -> skip/include)
ParseExtensions=3fr;arw;cr2;crf;crw;dcr;dng;fff;iiq;jpg;jpeg;kdc;mef;mos;mrw;nef;nrw;orf;pef;png;raf;raw;rw2;rwl;rwz;sr2;srf;srw;tif;tiff;x3f; ParseExtensions=3fr;arw;cr2;crf;crw;dcr;dng;fff;iiq;jpg;jpeg;kdc;mef;mos;mrw;nef;nrw;orf;pef;png;raf;raw;rw2;rwl;rwz;sr2;srf;srw;tif;tiff;x3f;
ParseExtensionsEnabled=1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; ParseExtensionsEnabled=1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;
[Output] [Output]
PathTemplate=%p1/converted/%f PathTemplate=%p1/converted/%f

View File

@ -13,7 +13,7 @@ MultiUser=true
[File Browser] [File Browser]
# Image filename extensions to be looked for, and their corresponding search state (0/1 -> skip/include) # Image filename extensions to be looked for, and their corresponding search state (0/1 -> skip/include)
ParseExtensions=3fr;arw;cr2;crf;crw;dcr;dng;fff;iiq;jpg;jpeg;kdc;mef;mos;mrw;nef;nrw;orf;pef;png;raf;raw;rw2;rwl;rwz;sr2;srf;srw;tif;tiff;x3f; ParseExtensions=3fr;arw;cr2;crf;crw;dcr;dng;fff;iiq;jpg;jpeg;kdc;mef;mos;mrw;nef;nrw;orf;pef;png;raf;raw;rw2;rwl;rwz;sr2;srf;srw;tif;tiff;x3f;
ParseExtensionsEnabled=1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; ParseExtensionsEnabled=1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;
[Output] [Output]
PathTemplate=%p1/converted/%f PathTemplate=%p1/converted/%f

View File

@ -15,7 +15,7 @@ UseSystemTheme=false
[File Browser] [File Browser]
# Image filename extensions to be looked for, and their corresponding search state (0/1 -> skip/include) # Image filename extensions to be looked for, and their corresponding search state (0/1 -> skip/include)
ParseExtensions=3fr;arw;cr2;crf;crw;dcr;dng;fff;iiq;jpg;jpeg;kdc;mef;mos;mrw;nef;nrw;orf;pef;png;raf;raw;rw2;rwl;rwz;sr2;srf;srw;tif;tiff;x3f; ParseExtensions=3fr;arw;cr2;crf;crw;dcr;dng;fff;iiq;jpg;jpeg;kdc;mef;mos;mrw;nef;nrw;orf;pef;png;raf;raw;rw2;rwl;rwz;sr2;srf;srw;tif;tiff;x3f;
ParseExtensionsEnabled=1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; ParseExtensionsEnabled=1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;
[Output] [Output]
PathTemplate=%p1/converted/%f PathTemplate=%p1/converted/%f

View File

@ -930,7 +930,6 @@ void ColorTemp::curvecolorfloat(float satind, float satval, float &sres, float p
if (sres>parsat) sres=parsat; if (sres>parsat) sres=parsat;
if (sres<0.f) sres=0.f; if (sres<0.f) sres=0.f;
} else { } else {
if (satind < -0.1f)
sres = satval*(1.f+(satind)/100.f); sres = satval*(1.f+(satind)/100.f);
} }
} }

View File

@ -191,8 +191,15 @@ class ColorTemp {
return c1*(100.0 / fl) * pow( (27.13 * fabs( c - 0.1 )) / (400.0 - fabs( c - 0.1 )), 1.0 / 0.42 ); return c1*(100.0 / fl) * pow( (27.13 * fabs( c - 0.1 )) / (400.0 - fabs( c - 0.1 )), 1.0 / 0.42 );
} }
static float inverse_nonlinear_adaptationfloat( float c, float fl ) { static float inverse_nonlinear_adaptationfloat( float c, float fl ) {
if(c-0.1f < 0.f) fl*=-1.f; c -= 0.1f;
return (100.0f / fl) * pow_F( (27.13f * fabsf( c - 0.1f )) / (400.0f - fabsf( c - 0.1f )), 2.38095238f ); if(c < 0.f) {
fl *= -1.f;
if(c < -399.99f) // avoid nan values
c = -399.99f;
} else if(c > 399.99f) { // avoid nan values
c = 399.99f;
}
return (100.0f / fl) * pow_F( (27.13f * fabsf( c )) / (400.0f - fabsf( c )), 2.38095238f );
} }

View File

@ -1478,15 +1478,15 @@ if(settings->viewinggreySc==1) yb=18.0f;//fixed
Qpro=Q; Qpro=Q;
Mpro=M; Mpro=M;
spro=s; spro=s;
// we cannot have all algoritms with all chroma curves // we cannot have all algorithms with all chroma curves
if(alg==1) { if(alg==1) {
// Lightness saturation // Lightness saturation
if(Jpro > 99.9f) if(Jpro > 99.9f)
Jpro = 99.9f; Jpro = 99.9f;
Jpro=(CAMBrightCurveJ[(float)(Jpro*327.68f)])/327.68f;//ligthness CIECAM02 + contrast Jpro=(CAMBrightCurveJ[(float)(Jpro*327.68f)])/327.68f;//lightness CIECAM02 + contrast
float sres; float sres;
float Sp=spro/100.0f; float Sp=spro/100.0f;
float parsat=1.5f; //parsat=1.5 =>saturation ; 1.8 => chroma ; 2.5 => colorfullness (personal evaluation) float parsat=1.5f; //parsat=1.5 =>saturation ; 1.8 => chroma ; 2.5 => colorfulness (personal evaluation)
ColorTemp::curvecolorfloat(schr, Sp , sres, parsat); ColorTemp::curvecolorfloat(schr, Sp , sres, parsat);
float dred=100.f;// in C mode float dred=100.f;// in C mode
float protect_red=80.0f; // in C mode float protect_red=80.0f; // in C mode
@ -1519,7 +1519,7 @@ if(settings->viewinggreySc==1) yb=18.0f;//fixed
if(alg!=2) { if(alg!=2) {
if(Jpro > 99.9f) if(Jpro > 99.9f)
Jpro = 99.9f; Jpro = 99.9f;
Jpro=(CAMBrightCurveJ[(float)(Jpro*327.68f)])/327.68f;//ligthness CIECAM02 + contrast Jpro=(CAMBrightCurveJ[(float)(Jpro*327.68f)])/327.68f;//lightness CIECAM02 + contrast
} }
float Sp=spro/100.0f; float Sp=spro/100.0f;
ColorTemp::curvecolorfloat(schr, Sp , sres, 1.5f); ColorTemp::curvecolorfloat(schr, Sp , sres, 1.5f);
@ -1538,11 +1538,12 @@ if(settings->viewinggreySc==1) yb=18.0f;//fixed
// else if(Jpro < 2.f && Cpro > 15.f) Cpro=15.f; // else if(Jpro < 2.f && Cpro > 15.f) Cpro=15.f;
// else if(Jpro < 4.f && Cpro > 30.f) Cpro=30.f; // else if(Jpro < 4.f && Cpro > 30.f) Cpro=30.f;
// else if(Jpro < 7.f && Cpro > 50.f) Cpro=50.f; // else if(Jpro < 7.f && Cpro > 50.f) Cpro=50.f;
if(alg==3) {
hpro=hpro+hue; hpro=hpro+hue;
if( hpro < 0.0f ) if( hpro < 0.0f )
hpro += 360.0f;//hue hpro += 360.0f;//hue
} }
}
if (hasColCurve1) {//curve 1 with Lightness and Brightness if (hasColCurve1) {//curve 1 with Lightness and Brightness
if (curveMode==ColorAppearanceParams::TC_MODE_LIGHT){ if (curveMode==ColorAppearanceParams::TC_MODE_LIGHT){
@ -4646,7 +4647,7 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (EditBuffer *editBuffer,
inRGB=false; inRGB=false;
} }
else if (!highlight && (R>ClipLevel || G>ClipLevel || B>ClipLevel)) { else if (!highlight && (R>ClipLevel || G>ClipLevel || B>ClipLevel)) {
if (Lprov1 > 99.999f) Lprov1 = 99.98f; if (Lprov1 > 99.98f) Lprov1 = 99.98f;
Chprov2 *= 0.95f; Chprov2 *= 0.95f;
inRGB = false; inRGB = false;
} }