From: cristy Date: Sat, 2 Jun 2012 20:02:55 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~5505 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1d1b10fb44a3606fdaf55e0998d50bee59401c17;p=imagemagick --- diff --git a/MagickCore/accelerate.c b/MagickCore/accelerate.c index 1ab02c25d..93f718d89 100644 --- a/MagickCore/accelerate.c +++ b/MagickCore/accelerate.c @@ -295,7 +295,7 @@ static const char " break;\n" " }\n" " }\n" - " gamma=1.0/(fabs(gamma) < MagickEpsilon ? MagickEpsilon : gamma);\n" + " gamma=ClampReciprocal(gamma);\n" " const unsigned long index = y*columns+x;\n" " output[index].x=ClampToQuantum(gamma*sum.x);\n" " output[index].y=ClampToQuantum(gamma*sum.y);\n" diff --git a/MagickCore/colorspace.c b/MagickCore/colorspace.c index 83906a2ae..36a877936 100644 --- a/MagickCore/colorspace.c +++ b/MagickCore/colorspace.c @@ -58,6 +58,7 @@ #include "MagickCore/monitor.h" #include "MagickCore/monitor-private.h" #include "MagickCore/pixel-accessor.h" +#include "MagickCore/pixel-private.h" #include "MagickCore/quantize.h" #include "MagickCore/quantum.h" #include "MagickCore/quantum-private.h" @@ -641,8 +642,7 @@ static MagickBooleanType sRGBTransformImage(Image *image, gamma=DisplayGamma; value=GetImageProperty(image,"gamma",exception); if (value != (const char *) NULL) - gamma=1.0/(fabs(StringToDouble(value,(char **) NULL)) < MagickEpsilon ? - MagickEpsilon : StringToDouble(value,(char **) NULL)); + gamma=ClampReciprocal(StringToDouble(value,(char **) NULL)); film_gamma=FilmGamma; value=GetImageProperty(image,"film-gamma",exception); if (value != (const char *) NULL) @@ -2150,8 +2150,7 @@ static MagickBooleanType TransformsRGBImage(Image *image, gamma=DisplayGamma; value=GetImageProperty(image,"gamma",exception); if (value != (const char *) NULL) - gamma=1.0/(fabs(StringToDouble(value,(char **) NULL)) < MagickEpsilon ? - MagickEpsilon : StringToDouble(value,(char **) NULL)); + gamma=ClampReciprocal(StringToDouble(value,(char **) NULL)); film_gamma=FilmGamma; value=GetImageProperty(image,"film-gamma",exception); if (value != (const char *) NULL) diff --git a/MagickCore/compare.c b/MagickCore/compare.c index 7653f7c24..d57c13860 100644 --- a/MagickCore/compare.c +++ b/MagickCore/compare.c @@ -950,7 +950,7 @@ static MagickBooleanType GetNormalizedCrossCorrelationDistortion( channel=GetPixelChannelMapChannel(image,i); gamma=image_statistics[i].standard_deviation* reconstruct_statistics[channel].standard_deviation; - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); distortion[i]=QuantumRange*gamma*distortion[i]; distortion[CompositePixelChannel]+=distortion[i]*distortion[i]; } diff --git a/MagickCore/composite-private.h b/MagickCore/composite-private.h index 9ba106316..5d2f16dde 100644 --- a/MagickCore/composite-private.h +++ b/MagickCore/composite-private.h @@ -30,6 +30,7 @@ extern "C" { #include "MagickCore/image.h" #include "MagickCore/image-private.h" #include "MagickCore/pixel-accessor.h" +#include "MagickCore/pixel-private.h" static inline MagickRealType MagickOver_(const MagickRealType p, const MagickRealType alpha,const MagickRealType q,const MagickRealType beta) @@ -61,7 +62,7 @@ static inline void CompositePixelOver(const Image *image,const PixelInfo *p, Sa=QuantumScale*alpha; Da=QuantumScale*beta, gamma=Sa*(-Da)+Sa+Da; - gamma=1.0/(gamma < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); for (i=0; i < (ssize_t) GetPixelChannels(image); i++) { PixelChannel @@ -132,7 +133,7 @@ static inline void CompositePixelInfoOver(const PixelInfo *p, Da=QuantumScale*beta, gamma=Sa*(-Da)+Sa+Da; composite->alpha=(MagickRealType) QuantumRange*gamma; - gamma=1.0/(fabs(gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); composite->red=gamma*MagickOver_(p->red,alpha,q->red,beta); composite->green=gamma*MagickOver_(p->green,alpha,q->green,beta); composite->blue=gamma*MagickOver_(p->blue,alpha,q->blue,beta); @@ -161,7 +162,7 @@ static inline void CompositePixelInfoPlus(const PixelInfo *p, Da=QuantumScale*beta; gamma=RoundToUnity(Sa+Da); /* 'Plus' blending -- not 'Over' blending */ composite->alpha=(MagickRealType) QuantumRange*gamma; - gamma=1.0/(fabs(gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); composite->red=gamma*(Sa*p->red+Da*q->red); composite->green=gamma*(Sa*p->green+Da*q->green); composite->blue=gamma*(Sa*p->blue+Da*q->blue); diff --git a/MagickCore/composite.c b/MagickCore/composite.c index b64d1fed5..7bf2f9862 100644 --- a/MagickCore/composite.c +++ b/MagickCore/composite.c @@ -502,7 +502,7 @@ static MagickBooleanType CompositeOverImage(Image *image, */ Sc=(MagickRealType) GetPixelChannel(composite_image,channel,p); Dc=(MagickRealType) q[i]; - gamma=1.0/(fabs((double) alpha) < MagickEpsilon ? MagickEpsilon : alpha); + gamma=ClampReciprocal(alpha); q[i]=ClampToQuantum(gamma*(Sa*Sc-Sa*Da*Dc+Da*Dc)); } p+=GetPixelChannels(composite_image); @@ -1649,7 +1649,7 @@ MagickExport MagickBooleanType CompositeImage(Image *image, default: break; } - gamma=1.0/(fabs((double) alpha) < MagickEpsilon ? MagickEpsilon : alpha); + gamma=ClampReciprocal(alpha); pixel=Dc; switch (compose) { diff --git a/MagickCore/distort.c b/MagickCore/distort.c index a26f227b7..38aba06d2 100644 --- a/MagickCore/distort.c +++ b/MagickCore/distort.c @@ -1798,28 +1798,28 @@ MagickExport Image *DistortImage(const Image *image,DistortImageMethod method, s.x = (double) image->page.x; s.y = (double) image->page.y; scale=inverse[6]*s.x+inverse[7]*s.y+1.0; - scale=1.0/(fabs(scale) < MagickEpsilon ? MagickEpsilon : scale); + scale=ClampReciprocal(scale); d.x = scale*(inverse[0]*s.x+inverse[1]*s.y+inverse[2]); d.y = scale*(inverse[3]*s.x+inverse[4]*s.y+inverse[5]); InitalBounds(d); s.x = (double) image->page.x+image->columns; s.y = (double) image->page.y; scale=inverse[6]*s.x+inverse[7]*s.y+1.0; - scale=1.0/(fabs(scale) < MagickEpsilon ? MagickEpsilon : scale); + scale=ClampReciprocal(scale); d.x = scale*(inverse[0]*s.x+inverse[1]*s.y+inverse[2]); d.y = scale*(inverse[3]*s.x+inverse[4]*s.y+inverse[5]); ExpandBounds(d); s.x = (double) image->page.x; s.y = (double) image->page.y+image->rows; scale=inverse[6]*s.x+inverse[7]*s.y+1.0; - scale=1.0/(fabs(scale) < MagickEpsilon ? MagickEpsilon : scale); + scale=ClampReciprocal(scale); d.x = scale*(inverse[0]*s.x+inverse[1]*s.y+inverse[2]); d.y = scale*(inverse[3]*s.x+inverse[4]*s.y+inverse[5]); ExpandBounds(d); s.x = (double) image->page.x+image->columns; s.y = (double) image->page.y+image->rows; scale=inverse[6]*s.x+inverse[7]*s.y+1.0; - scale=1.0/(fabs(scale) < MagickEpsilon ? MagickEpsilon : scale); + scale=ClampReciprocal(scale); d.x = scale*(inverse[0]*s.x+inverse[1]*s.y+inverse[2]); d.y = scale*(inverse[3]*s.x+inverse[4]*s.y+inverse[5]); ExpandBounds(d); diff --git a/MagickCore/draw.c b/MagickCore/draw.c index 061e9e8de..9658e8542 100644 --- a/MagickCore/draw.c +++ b/MagickCore/draw.c @@ -3180,7 +3180,7 @@ static inline MagickRealType GetStopColorOffset(const GradientInfo *gradient, q.y=(double) y-gradient_vector->y1; length=sqrt(q.x*q.x+q.y*q.y); gamma=sqrt(p.x*p.x+p.y*p.y)*length; - gamma=1.0/(gamma < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); scale=p.x*q.x+p.y*q.y; offset=gamma*scale*length; return(offset); diff --git a/MagickCore/effect.c b/MagickCore/effect.c index c67c47f29..623c38ed6 100644 --- a/MagickCore/effect.c +++ b/MagickCore/effect.c @@ -69,6 +69,7 @@ #include "MagickCore/morphology.h" #include "MagickCore/paint.h" #include "MagickCore/pixel-accessor.h" +#include "MagickCore/pixel-private.h" #include "MagickCore/property.h" #include "MagickCore/quantize.h" #include "MagickCore/quantum.h" @@ -407,7 +408,7 @@ MagickExport Image *AdaptiveBlurImage(const Image *image,const double radius, pixels+=GetPixelChannels(image); } } - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); SetPixelChannel(blur_image,channel,ClampToQuantum(gamma*pixel),q); continue; } @@ -425,7 +426,7 @@ MagickExport Image *AdaptiveBlurImage(const Image *image,const double radius, pixels+=GetPixelChannels(image); } } - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); SetPixelChannel(blur_image,channel,ClampToQuantum(gamma*pixel),q); } q+=GetPixelChannels(blur_image); @@ -734,7 +735,7 @@ MagickExport Image *AdaptiveSharpenImage(const Image *image,const double radius, pixels+=GetPixelChannels(image); } } - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); SetPixelChannel(sharp_image,channel,ClampToQuantum(gamma*pixel),q); continue; } @@ -752,7 +753,7 @@ MagickExport Image *AdaptiveSharpenImage(const Image *image,const double radius, pixels+=GetPixelChannels(image); } } - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); SetPixelChannel(sharp_image,channel,ClampToQuantum(gamma*pixel),q); } q+=GetPixelChannels(sharp_image); @@ -1050,7 +1051,7 @@ MagickExport Image *BlurImage(const Image *image,const double radius, k++; pixels+=GetPixelChannels(image); } - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); SetPixelChannel(blur_image,channel,ClampToQuantum(gamma*pixel),q); } p+=GetPixelChannels(image); @@ -1180,7 +1181,7 @@ MagickExport Image *BlurImage(const Image *image,const double radius, k++; pixels+=GetPixelChannels(blur_image); } - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); SetPixelChannel(blur_image,channel,ClampToQuantum(gamma*pixel),q); } p+=GetPixelChannels(blur_image); @@ -2059,7 +2060,7 @@ MagickExport Image *MotionBlurImage(const Image *image,const double radius, gamma+=(*k)*alpha; k++; } - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); SetPixelChannel(blur_image,channel,ClampToQuantum(gamma*pixel),q); } p+=GetPixelChannels(image); @@ -2842,7 +2843,7 @@ MagickExport Image *RadialBlurImage(const Image *image,const double angle, pixel+=r[i]; gamma++; } - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); SetPixelChannel(blur_image,channel,ClampToQuantum(gamma*pixel),q); continue; } @@ -2860,7 +2861,7 @@ MagickExport Image *RadialBlurImage(const Image *image,const double angle, pixel+=GetPixelAlpha(image,r)*r[i]; gamma+=GetPixelAlpha(image,r); } - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); SetPixelChannel(blur_image,channel,ClampToQuantum(gamma*pixel),q); } p+=GetPixelChannels(image); @@ -3138,7 +3139,7 @@ MagickExport Image *SelectiveBlurImage(const Image *image,const double radius, SetPixelChannel(blur_image,channel,p[center+i],q); continue; } - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); SetPixelChannel(blur_image,channel,ClampToQuantum(gamma*pixel),q); continue; } @@ -3164,7 +3165,7 @@ MagickExport Image *SelectiveBlurImage(const Image *image,const double radius, SetPixelChannel(blur_image,channel,p[center+i],q); continue; } - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); SetPixelChannel(blur_image,channel,ClampToQuantum(gamma*pixel),q); } p+=GetPixelChannels(image); diff --git a/MagickCore/feature.c b/MagickCore/feature.c index 2266ac239..f814b80bf 100644 --- a/MagickCore/feature.c +++ b/MagickCore/feature.c @@ -572,7 +572,7 @@ MagickExport ChannelFeatures *GetImageFeatures(const Image *image, break; } } - normalize=1.0/(fabs((double) normalize) < MagickEpsilon ? MagickEpsilon : normalize); + normalize=ClampReciprocal(normalize); for (y=0; y < (ssize_t) number_grays; y++) { register ssize_t diff --git a/MagickCore/image.c b/MagickCore/image.c index c6cbdd767..0f88576d5 100644 --- a/MagickCore/image.c +++ b/MagickCore/image.c @@ -2087,7 +2087,7 @@ static inline void FlattenPixelInfo(const Image *image,const PixelInfo *p, Sa=QuantumScale*alpha; Da=QuantumScale*beta, gamma=Sa*(-Da)+Sa+Da; - gamma=1.0/(gamma < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); for (i=0; i < (ssize_t) GetPixelChannels(image); i++) { PixelChannel diff --git a/MagickCore/pixel-private.h b/MagickCore/pixel-private.h index 58dc51114..75b209110 100644 --- a/MagickCore/pixel-private.h +++ b/MagickCore/pixel-private.h @@ -22,7 +22,7 @@ extern "C" { #endif -static inline MagickRealType AlphaReciprocal(const MagickRealType alpha) +static inline MagickRealType ClampReciprocal(const MagickRealType alpha) { MagickRealType beta; diff --git a/MagickCore/pixel.c b/MagickCore/pixel.c index 8048261f8..e4935bc98 100644 --- a/MagickCore/pixel.c +++ b/MagickCore/pixel.c @@ -4136,7 +4136,7 @@ MagickExport MagickBooleanType InterpolatePixelChannel(const Image *image, } for (i=0; i < 16; i++) { - gamma=1.0/(fabs((double) alpha[i]) < MagickEpsilon ? MagickEpsilon : alpha[i]); + gamma=ClampReciprocal(alpha[i]); *pixel+=gamma*0.0625*pixels[i]; } break; @@ -4199,7 +4199,7 @@ MagickExport MagickBooleanType InterpolatePixelChannel(const Image *image, */ gamma=1.0; if (channel != AlphaPixelChannel) - gamma=AlphaReciprocal(cy[0]*(cx[0]*alpha[0]+cx[1]*alpha[1]+cx[2]* + gamma=ClampReciprocal(cy[0]*(cx[0]*alpha[0]+cx[1]*alpha[1]+cx[2]* alpha[2]+cx[3]*alpha[3])+cy[1]*(cx[0]*alpha[4]+cx[1]*alpha[5]+ cx[2]*alpha[6]+cx[3]*alpha[7])+cy[2]*(cx[0]*alpha[8]+ cx[1]*alpha[9]+cx[2]*alpha[10]+cx[3]*alpha[11])+cy[3]*( @@ -4243,7 +4243,7 @@ MagickExport MagickBooleanType InterpolatePixelChannel(const Image *image, epsilon.y=1.0-delta.y; gamma=((epsilon.y*(epsilon.x*alpha[0]+delta.x*alpha[1])+delta.y* (epsilon.x*alpha[2]+delta.x*alpha[3]))); - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); *pixel=gamma*(epsilon.y*(epsilon.x*pixels[0]+delta.x*pixels[1])+delta.y* (epsilon.x*pixels[2]+delta.x*pixels[3])); break; @@ -4350,7 +4350,7 @@ MagickExport MagickBooleanType InterpolatePixelChannel(const Image *image, */ delta.y=1.0-delta.y; gamma=MeshInterpolate(&delta,alpha[2],alpha[3],alpha[0]); - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); *pixel=gamma*MeshInterpolate(&delta,pixels[2],pixels[3], pixels[0]); } @@ -4361,7 +4361,7 @@ MagickExport MagickBooleanType InterpolatePixelChannel(const Image *image, */ delta.x=1.0-delta.x; gamma=MeshInterpolate(&delta,alpha[1],alpha[0],alpha[3]); - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); *pixel=gamma*MeshInterpolate(&delta,pixels[1],pixels[0], pixels[3]); } @@ -4377,7 +4377,7 @@ MagickExport MagickBooleanType InterpolatePixelChannel(const Image *image, Top-left triangle (pixel: 0, diagonal: 1-2). */ gamma=MeshInterpolate(&delta,alpha[0],alpha[1],alpha[2]); - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); *pixel=gamma*MeshInterpolate(&delta,pixels[0],pixels[1], pixels[2]); } @@ -4389,7 +4389,7 @@ MagickExport MagickBooleanType InterpolatePixelChannel(const Image *image, delta.x=1.0-delta.x; delta.y=1.0-delta.y; gamma=MeshInterpolate(&delta,alpha[3],alpha[2],alpha[1]); - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); *pixel=gamma*MeshInterpolate(&delta,pixels[3],pixels[2], pixels[1]); } @@ -4438,7 +4438,7 @@ MagickExport MagickBooleanType InterpolatePixelChannel(const Image *image, for (j=(-1); j < 3L; j++) { dx=CubicWeightingFunction(delta.x-(MagickRealType) j); - gamma=1.0/(fabs((double) alpha[n]) < MagickEpsilon ? MagickEpsilon : alpha[n]); + gamma=ClampReciprocal(alpha[n]); *pixel+=gamma*dx*dy*pixels[n]; n++; } @@ -4565,7 +4565,7 @@ MagickExport MagickBooleanType InterpolatePixelChannels(const Image *source, alpha[j]=QuantumScale*GetPixelAlpha(source,p+j* GetPixelChannels(source)); pixels[j]*=alpha[j]; - gamma=1.0/(fabs((double) alpha[j]) < MagickEpsilon ? MagickEpsilon : alpha[j]); + gamma=ClampReciprocal(alpha[j]); sum+=gamma*0.0625*pixels[j]; } SetPixelChannel(destination,channel,ClampToQuantum(sum),pixel); @@ -4641,7 +4641,7 @@ MagickExport MagickBooleanType InterpolatePixelChannels(const Image *source, */ gamma=1.0; if ((traits & BlendPixelTrait) == 0) - gamma=AlphaReciprocal(cy[0]*(cx[0]*alpha[0]+cx[1]*alpha[1]+cx[2]* + gamma=ClampReciprocal(cy[0]*(cx[0]*alpha[0]+cx[1]*alpha[1]+cx[2]* alpha[2]+cx[3]*alpha[3])+cy[1]*(cx[0]*alpha[4]+cx[1]*alpha[5]+ cx[2]*alpha[6]+cx[3]*alpha[7])+cy[2]*(cx[0]*alpha[8]+ cx[1]*alpha[9]+cx[2]*alpha[10]+cx[3]*alpha[11])+cy[3]*( @@ -4687,7 +4687,7 @@ MagickExport MagickBooleanType InterpolatePixelChannels(const Image *source, if ((traits & BlendPixelTrait) == 0) { gamma=((epsilon.y*(epsilon.x+delta.x)+delta.y*(epsilon.x+delta.x))); - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); SetPixelChannel(destination,channel,ClampToQuantum(gamma*(epsilon.y* (epsilon.x*pixels[0]+delta.x*pixels[1])+delta.y*(epsilon.x* pixels[2]+delta.x*pixels[3]))),pixel); @@ -4705,7 +4705,7 @@ MagickExport MagickBooleanType InterpolatePixelChannels(const Image *source, pixels[3]*=alpha[3]; gamma=((epsilon.y*(epsilon.x*alpha[0]+delta.x*alpha[1])+delta.y* (epsilon.x*alpha[2]+delta.x*alpha[3]))); - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); SetPixelChannel(destination,channel,ClampToQuantum(gamma*(epsilon.y* (epsilon.x*pixels[0]+delta.x*pixels[1])+delta.y*(epsilon.x*pixels[2]+ delta.x*pixels[3]))),pixel); @@ -4859,7 +4859,7 @@ MagickExport MagickBooleanType InterpolatePixelChannels(const Image *source, */ delta.y=1.0-delta.y; gamma=MeshInterpolate(&delta,alpha[2],alpha[3],alpha[0]); - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); SetPixelChannel(destination,channel,ClampToQuantum(gamma* MeshInterpolate(&delta,pixels[2],pixels[3],pixels[0])),pixel); } @@ -4870,7 +4870,7 @@ MagickExport MagickBooleanType InterpolatePixelChannels(const Image *source, */ delta.x=1.0-delta.x; gamma=MeshInterpolate(&delta,alpha[1],alpha[0],alpha[3]); - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); SetPixelChannel(destination,channel,ClampToQuantum(gamma* MeshInterpolate(&delta,pixels[1],pixels[0],pixels[3])),pixel); } @@ -4886,7 +4886,7 @@ MagickExport MagickBooleanType InterpolatePixelChannels(const Image *source, Top-left triangle (pixel: 0, diagonal: 1-2). */ gamma=MeshInterpolate(&delta,alpha[0],alpha[1],alpha[2]); - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); SetPixelChannel(destination,channel,ClampToQuantum(gamma* MeshInterpolate(&delta,pixels[0],pixels[1],pixels[2])),pixel); } @@ -4898,7 +4898,7 @@ MagickExport MagickBooleanType InterpolatePixelChannels(const Image *source, delta.x=1.0-delta.x; delta.y=1.0-delta.y; gamma=MeshInterpolate(&delta,alpha[3],alpha[2],alpha[1]); - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); SetPixelChannel(destination,channel,ClampToQuantum(gamma* MeshInterpolate(&delta,pixels[3],pixels[2],pixels[1])),pixel); } @@ -4963,8 +4963,7 @@ MagickExport MagickBooleanType InterpolatePixelChannels(const Image *source, for (k=(-1); k < 3L; k++) { dx=CubicWeightingFunction(delta.x-(MagickRealType) k); - gamma=1.0/(fabs((double) alpha[n]) < MagickEpsilon ? MagickEpsilon : - alpha[n]); + gamma=ClampReciprocal(alpha[n]); sum+=gamma*dx*dy*pixels[n]; n++; } @@ -5110,7 +5109,7 @@ MagickExport MagickBooleanType InterpolatePixelInfo(const Image *image, pixel->alpha=0.0; for (i=0; i < 16L; i++) { - gamma=1.0/(fabs((double) alpha[i]) < MagickEpsilon ? MagickEpsilon : alpha[i]); + gamma=ClampReciprocal(alpha[i]); pixel->red+=gamma*0.0625*pixels[i].red; pixel->green+=gamma*0.0625*pixels[i].green; pixel->blue+=gamma*0.0625*pixels[i].blue; @@ -5252,7 +5251,7 @@ MagickExport MagickBooleanType InterpolatePixelInfo(const Image *image, epsilon.y=1.0-delta.y; gamma=((epsilon.y*(epsilon.x*alpha[0]+delta.x*alpha[1])+delta.y* (epsilon.x*alpha[2]+delta.x*alpha[3]))); - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); pixel->red=gamma*(epsilon.y*(epsilon.x*pixels[0].red+delta.x* pixels[1].red)+delta.y*(epsilon.x*pixels[2].red+delta.x*pixels[3].red)); pixel->green=gamma*(epsilon.y*(epsilon.x*pixels[0].green+delta.x* @@ -5266,7 +5265,7 @@ MagickExport MagickBooleanType InterpolatePixelInfo(const Image *image, pixels[1].black)+delta.y*(epsilon.x*pixels[2].black+delta.x* pixels[3].black)); gamma=((epsilon.y*(epsilon.x+delta.x)+delta.y*(epsilon.x+delta.x))); - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); pixel->alpha=(epsilon.y*(epsilon.x*pixels[0].alpha+delta.x* pixels[1].alpha)+delta.y*(epsilon.x*pixels[2].alpha+delta.x* pixels[3].alpha)); @@ -5351,7 +5350,7 @@ MagickExport MagickBooleanType InterpolatePixelInfo(const Image *image, */ delta.y=1.0-delta.y; gamma=MeshInterpolate(&delta,alpha[2],alpha[3],alpha[0]); - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); pixel->red=gamma*MeshInterpolate(&delta,pixels[2].red, pixels[3].red,pixels[0].red); pixel->green=gamma*MeshInterpolate(&delta,pixels[2].green, @@ -5372,7 +5371,7 @@ MagickExport MagickBooleanType InterpolatePixelInfo(const Image *image, */ delta.x=1.0-delta.x; gamma=MeshInterpolate(&delta,alpha[1],alpha[0],alpha[3]); - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); pixel->red=gamma*MeshInterpolate(&delta,pixels[1].red, pixels[0].red,pixels[3].red); pixel->green=gamma*MeshInterpolate(&delta,pixels[1].green, @@ -5398,7 +5397,7 @@ MagickExport MagickBooleanType InterpolatePixelInfo(const Image *image, Top-left triangle (pixel: 0, diagonal: 1-2). */ gamma=MeshInterpolate(&delta,alpha[0],alpha[1],alpha[2]); - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); pixel->red=gamma*MeshInterpolate(&delta,pixels[0].red, pixels[1].red,pixels[2].red); pixel->green=gamma*MeshInterpolate(&delta,pixels[0].green, @@ -5420,7 +5419,7 @@ MagickExport MagickBooleanType InterpolatePixelInfo(const Image *image, delta.x=1.0-delta.x; delta.y=1.0-delta.y; gamma=MeshInterpolate(&delta,alpha[3],alpha[2],alpha[1]); - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); pixel->red=gamma*MeshInterpolate(&delta,pixels[3].red, pixels[2].red,pixels[1].red); pixel->green=gamma*MeshInterpolate(&delta,pixels[3].green, @@ -5505,7 +5504,7 @@ MagickExport MagickBooleanType InterpolatePixelInfo(const Image *image, for (j=(-1); j < 3L; j++) { dx=CubicWeightingFunction(delta.x-(MagickRealType) j); - gamma=1.0/(fabs((double) alpha[n]) < MagickEpsilon ? MagickEpsilon : alpha[n]); + gamma=ClampReciprocal(alpha[n]); pixel->red+=gamma*dx*dy*pixels[n].red; pixel->green+=gamma*dx*dy*pixels[n].green; pixel->blue+=gamma*dx*dy*pixels[n].blue; diff --git a/MagickCore/quantize.c b/MagickCore/quantize.c index 2f7a30711..cfc68767c 100644 --- a/MagickCore/quantize.c +++ b/MagickCore/quantize.c @@ -194,6 +194,7 @@ #include "MagickCore/monitor-private.h" #include "MagickCore/option.h" #include "MagickCore/pixel-accessor.h" +#include "MagickCore/pixel-private.h" #include "MagickCore/quantize.h" #include "MagickCore/quantum.h" #include "MagickCore/quantum-private.h" @@ -1251,7 +1252,7 @@ static size_t DefineImageColormap(Image *image,CubeInfo *cube_info, */ q=image->colormap+image->colors; alpha=(MagickRealType) ((MagickOffsetType) node_info->number_unique); - alpha=1.0/(fabs((double) alpha) < MagickEpsilon ? MagickEpsilon : alpha); + alpha=ClampReciprocal(alpha); if (cube_info->associate_alpha == MagickFalse) { q->red=(double) ClampToQuantum((MagickRealType) @@ -1285,7 +1286,7 @@ static size_t DefineImageColormap(Image *image,CubeInfo *cube_info, gamma; gamma=(MagickRealType) (QuantumScale*q->alpha); - gamma=1.0/(fabs(gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); q->red=(double) ClampToQuantum((MagickRealType) (alpha*gamma*QuantumRange*node_info->total_color.red)); q->green=(double) ClampToQuantum((MagickRealType) diff --git a/MagickCore/quantum-import.c b/MagickCore/quantum-import.c index c468b89e2..628c3bce6 100644 --- a/MagickCore/quantum-import.c +++ b/MagickCore/quantum-import.c @@ -62,6 +62,7 @@ #include "MagickCore/option.h" #include "MagickCore/pixel.h" #include "MagickCore/pixel-accessor.h" +#include "MagickCore/pixel-private.h" #include "MagickCore/quantum.h" #include "MagickCore/quantum-private.h" #include "MagickCore/resource_.h" @@ -3609,7 +3610,7 @@ MagickExport size_t ImportQuantumPixels(const Image *image, continue; } Sa=QuantumScale*GetPixelAlpha(image,q); - gamma=1.0/(fabs(Sa) < MagickEpsilon ? MagickEpsilon : Sa); + gamma=ClampReciprocal(Sa); for (i=0; i < (ssize_t) GetPixelChannels(image); i++) { PixelChannel diff --git a/MagickCore/resize.c b/MagickCore/resize.c index d8cca9e74..419d80eab 100644 --- a/MagickCore/resize.c +++ b/MagickCore/resize.c @@ -61,6 +61,7 @@ #include "MagickCore/monitor-private.h" #include "MagickCore/option.h" #include "MagickCore/pixel.h" +#include "MagickCore/pixel-private.h" #include "MagickCore/quantum-private.h" #include "MagickCore/resample.h" #include "MagickCore/resample-private.h" @@ -2362,7 +2363,7 @@ static MagickBooleanType HorizontalFilter(const ResizeFilter *resize_filter, pixel+=alpha*p[k*GetPixelChannels(image)+i]; gamma+=alpha; } - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); SetPixelChannel(resize_image,channel,ClampToQuantum(gamma*pixel),q); } q+=GetPixelChannels(resize_image); @@ -2578,7 +2579,7 @@ static MagickBooleanType VerticalFilter(const ResizeFilter *resize_filter, pixel+=alpha*p[k*GetPixelChannels(image)+i]; gamma+=alpha; } - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); SetPixelChannel(resize_image,channel,ClampToQuantum(gamma*pixel),q); } q+=GetPixelChannels(resize_image); @@ -3209,7 +3210,7 @@ MagickExport Image *ScaleImage(const Image *image,const size_t columns, } alpha=QuantumScale*scanline[x*GetPixelChannels(image)+ GetPixelChannelMapChannel(image,AlphaPixelChannel)]; - gamma=1.0/(fabs((double) alpha) < MagickEpsilon ? MagickEpsilon : alpha); + gamma=ClampReciprocal(alpha); SetPixelChannel(scale_image,channel,ClampToQuantum(gamma*scanline[ x*GetPixelChannels(image)+offset]),q); } @@ -3311,7 +3312,7 @@ MagickExport Image *ScaleImage(const Image *image,const size_t columns, } alpha=QuantumScale*scanline[x*GetPixelChannels(image)+ GetPixelChannelMapChannel(image,AlphaPixelChannel)]; - gamma=1.0/(fabs((double) alpha) < MagickEpsilon ? MagickEpsilon : alpha); + gamma=ClampReciprocal(alpha); SetPixelChannel(scale_image,channel,ClampToQuantum(gamma* scale_scanline[x*MaxPixelChannels+channel]),q); } diff --git a/coders/pango.c b/coders/pango.c index 277d2de63..3262b353f 100644 --- a/coders/pango.c +++ b/coders/pango.c @@ -424,7 +424,7 @@ static Image *ReadPANGOImage(const ImageInfo *image_info, Disassociate alpha. */ gamma=1.0-QuantumScale*fill_color.alpha; - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); fill_color.blue*=gamma; fill_color.green*=gamma; fill_color.red*=gamma; diff --git a/coders/svg.c b/coders/svg.c index d4aab7489..bafc691f2 100644 --- a/coders/svg.c +++ b/coders/svg.c @@ -2939,7 +2939,7 @@ static Image *ReadSVGImage(const ImageInfo *image_info,ExceptionInfo *exception) gamma; gamma=1.0-QuantumScale*fill_color.alpha; - gamma=1.0/(fabs((double) gamma) < MagickEpsilon ? MagickEpsilon : gamma); + gamma=ClampReciprocal(gamma); fill_color.blue*=gamma; fill_color.green*=gamma; fill_color.red*=gamma;