Division by zero in ciecam02, Issue 2646

This commit is contained in:
Ingo 2015-01-28 13:18:01 +01:00
parent 9d7bb2a917
commit bc856c2377
3 changed files with 8 additions and 6 deletions

View File

@ -2131,6 +2131,7 @@ void ColorTemp::xyz2jchqms_ciecam02float( float &J, float &C, float &h, float &Q
Q = wh * J;
J *= J * 100.0f;
M = C * pfl;
Q = (Q == 0.f ? 0.0001f : Q); // avoid division by zero
s = 100.0f * sqrtf( M / Q );
h = (myh * 180.f) / (float)M_PI;

View File

@ -620,9 +620,9 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) {
ncie = new CieImage (pW, pH);
if (!CAMBrightCurveJ && (params.colorappearance.algo=="JC" || params.colorappearance.algo=="JS" || params.colorappearance.algo=="ALL"))
CAMBrightCurveJ(65536,0);
CAMBrightCurveJ(32768,0);
if (!CAMBrightCurveQ && (params.colorappearance.algo=="QM" || params.colorappearance.algo=="ALL"))
CAMBrightCurveQ(65536,0);
CAMBrightCurveQ(32768,0);
if(settings->ciecamfloat){
ipf.ciecam_02float (ncie, float(adap), begh, endh, pW, 2, nprevl, &params, customColCurve1,customColCurve2,customColCurve3, histLCAM, histCCAM, CAMBrightCurveJ, CAMBrightCurveQ, CAMMean, 5, 1, execsharp, d, scale, 1);
if(params.colorappearance.autodegree && acListener && params.colorappearance.enabled) acListener->autoCamChanged(100.*(double)d);

View File

@ -1365,7 +1365,7 @@ if(params->colorappearance.enabled) {
//evaluate lightness, contrast
if (needJ) {
if (!CAMBrightCurveJ) {
CAMBrightCurveJ(65536,0);
CAMBrightCurveJ(32768,0);
CAMBrightCurveJ.dirty = false;
}
float jli=params->colorappearance.jlight;
@ -1374,7 +1374,7 @@ if(params->colorappearance.enabled) {
}
if (needQ) {
if (!CAMBrightCurveQ) {
CAMBrightCurveQ(65536,0);
CAMBrightCurveQ(32768,0);
CAMBrightCurveQ.clear();
CAMBrightCurveQ.dirty = false;
}
@ -1497,8 +1497,8 @@ if(settings->viewinggreySc==1) yb=18.0f;//fixed
else if(alg==3 || alg==0 || alg==2) {
if(alg==3 || alg==2) {
float coef=32760.f/wh;
if(Qpro*coef > 32767.0f)
Qpro=(CAMBrightCurveQ[(float)32767.0f])/coef;//brightness and contrast
if(Qpro*coef >= 32767.0f)
Qpro=(CAMBrightCurveQ[32767])/coef;//brightness and contrast
else
Qpro=(CAMBrightCurveQ[(float)(Qpro*coef)])/coef;//brightness and contrast
}
@ -1512,6 +1512,7 @@ if(settings->viewinggreySc==1) yb=18.0f;//fixed
Color::skinredfloat(Jpro, hpro, sres, Mp, dred, protect_red,0,rstprotection,100.f, Mpro);
Jpro = SQR((10.f*Qpro)/wh);
Cpro= Mpro/coe;
Qpro = (Qpro == 0.f ? epsil : Qpro); // avoid division by zero
spro = 100.0f * sqrtf( Mpro / Qpro );
if(alg!=2) {
if(Jpro > 99.9f)