Division by zero in ciecam02, Issue 2646
This commit is contained in:
parent
9d7bb2a917
commit
bc856c2377
@ -2131,6 +2131,7 @@ void ColorTemp::xyz2jchqms_ciecam02float( float &J, float &C, float &h, float &Q
|
|||||||
Q = wh * J;
|
Q = wh * J;
|
||||||
J *= J * 100.0f;
|
J *= J * 100.0f;
|
||||||
M = C * pfl;
|
M = C * pfl;
|
||||||
|
Q = (Q == 0.f ? 0.0001f : Q); // avoid division by zero
|
||||||
s = 100.0f * sqrtf( M / Q );
|
s = 100.0f * sqrtf( M / Q );
|
||||||
h = (myh * 180.f) / (float)M_PI;
|
h = (myh * 180.f) / (float)M_PI;
|
||||||
|
|
||||||
|
@ -620,9 +620,9 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) {
|
|||||||
ncie = new CieImage (pW, pH);
|
ncie = new CieImage (pW, pH);
|
||||||
|
|
||||||
if (!CAMBrightCurveJ && (params.colorappearance.algo=="JC" || params.colorappearance.algo=="JS" || params.colorappearance.algo=="ALL"))
|
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"))
|
if (!CAMBrightCurveQ && (params.colorappearance.algo=="QM" || params.colorappearance.algo=="ALL"))
|
||||||
CAMBrightCurveQ(65536,0);
|
CAMBrightCurveQ(32768,0);
|
||||||
if(settings->ciecamfloat){
|
if(settings->ciecamfloat){
|
||||||
ipf.ciecam_02float (ncie, float(adap), begh, endh, pW, 2, nprevl, ¶ms, customColCurve1,customColCurve2,customColCurve3, histLCAM, histCCAM, CAMBrightCurveJ, CAMBrightCurveQ, CAMMean, 5, 1, execsharp, d, scale, 1);
|
ipf.ciecam_02float (ncie, float(adap), begh, endh, pW, 2, nprevl, ¶ms, 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);
|
if(params.colorappearance.autodegree && acListener && params.colorappearance.enabled) acListener->autoCamChanged(100.*(double)d);
|
||||||
|
@ -1365,7 +1365,7 @@ if(params->colorappearance.enabled) {
|
|||||||
//evaluate lightness, contrast
|
//evaluate lightness, contrast
|
||||||
if (needJ) {
|
if (needJ) {
|
||||||
if (!CAMBrightCurveJ) {
|
if (!CAMBrightCurveJ) {
|
||||||
CAMBrightCurveJ(65536,0);
|
CAMBrightCurveJ(32768,0);
|
||||||
CAMBrightCurveJ.dirty = false;
|
CAMBrightCurveJ.dirty = false;
|
||||||
}
|
}
|
||||||
float jli=params->colorappearance.jlight;
|
float jli=params->colorappearance.jlight;
|
||||||
@ -1374,7 +1374,7 @@ if(params->colorappearance.enabled) {
|
|||||||
}
|
}
|
||||||
if (needQ) {
|
if (needQ) {
|
||||||
if (!CAMBrightCurveQ) {
|
if (!CAMBrightCurveQ) {
|
||||||
CAMBrightCurveQ(65536,0);
|
CAMBrightCurveQ(32768,0);
|
||||||
CAMBrightCurveQ.clear();
|
CAMBrightCurveQ.clear();
|
||||||
CAMBrightCurveQ.dirty = false;
|
CAMBrightCurveQ.dirty = false;
|
||||||
}
|
}
|
||||||
@ -1497,8 +1497,8 @@ if(settings->viewinggreySc==1) yb=18.0f;//fixed
|
|||||||
else if(alg==3 || alg==0 || alg==2) {
|
else if(alg==3 || alg==0 || alg==2) {
|
||||||
if(alg==3 || alg==2) {
|
if(alg==3 || alg==2) {
|
||||||
float coef=32760.f/wh;
|
float coef=32760.f/wh;
|
||||||
if(Qpro*coef > 32767.0f)
|
if(Qpro*coef >= 32767.0f)
|
||||||
Qpro=(CAMBrightCurveQ[(float)32767.0f])/coef;//brightness and contrast
|
Qpro=(CAMBrightCurveQ[32767])/coef;//brightness and contrast
|
||||||
else
|
else
|
||||||
Qpro=(CAMBrightCurveQ[(float)(Qpro*coef)])/coef;//brightness and contrast
|
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);
|
Color::skinredfloat(Jpro, hpro, sres, Mp, dred, protect_red,0,rstprotection,100.f, Mpro);
|
||||||
Jpro = SQR((10.f*Qpro)/wh);
|
Jpro = SQR((10.f*Qpro)/wh);
|
||||||
Cpro= Mpro/coe;
|
Cpro= Mpro/coe;
|
||||||
|
Qpro = (Qpro == 0.f ? epsil : Qpro); // avoid division by zero
|
||||||
spro = 100.0f * sqrtf( Mpro / Qpro );
|
spro = 100.0f * sqrtf( Mpro / Qpro );
|
||||||
if(alg!=2) {
|
if(alg!=2) {
|
||||||
if(Jpro > 99.9f)
|
if(Jpro > 99.9f)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user