|
|
|
@ -238,7 +238,7 @@ BOOL OneTry(LPSAMPLEDCURVE XNorm, LPSAMPLEDCURVE YNorm, double a[])
|
|
|
|
|
LPGAMMATABLE cmsxEstimateGamma(LPSAMPLEDCURVE X, LPSAMPLEDCURVE Y, int nResultingPoints)
|
|
|
|
|
{
|
|
|
|
|
double a[5];
|
|
|
|
|
LPSAMPLEDCURVE XNorm, YNorm;
|
|
|
|
|
LPSAMPLEDCURVE XNorm, YNorm;
|
|
|
|
|
double e, Max;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -246,14 +246,14 @@ LPGAMMATABLE cmsxEstimateGamma(LPSAMPLEDCURVE X, LPSAMPLEDCURVE Y, int nResultin
|
|
|
|
|
/* We have only a portion of curve. It is likely */
|
|
|
|
|
/* maximum will not fall on exactly 100. */
|
|
|
|
|
|
|
|
|
|
if (!OneTry(X, Y, a))
|
|
|
|
|
return false;
|
|
|
|
|
if (!OneTry(X, Y, a))
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
/* Got parameters. Compute maximum. */
|
|
|
|
|
e = a[1]* 255.0 + a[2];
|
|
|
|
|
if (e < 0) return false;
|
|
|
|
|
if (e < 0) return 0;
|
|
|
|
|
Max = pow(e, a[0]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Normalize values to maximum */
|
|
|
|
|
XNorm = NormalizeTo(X, 255.0, false);
|
|
|
|
@ -261,8 +261,8 @@ LPGAMMATABLE cmsxEstimateGamma(LPSAMPLEDCURVE X, LPSAMPLEDCURVE Y, int nResultin
|
|
|
|
|
|
|
|
|
|
/* Do the final fitting */
|
|
|
|
|
if (!OneTry(XNorm, YNorm, a))
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
/* Type 3 = IEC 61966-2.1 (sRGB) */
|
|
|
|
|
/* Y = (aX + b)^Gamma | X >= d */
|
|
|
|
|
/* Y = cX | X < d */
|
|
|
|
|