% August 1996 %
% %
% %
-% Copyright 1999-2010 ImageMagick Studio LLC, a non-profit organization %
+% Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization %
% dedicated to making software imaging solutions freely available. %
% %
% You may not use this file except in compliance with the License. You may %
r,
v;
- register long
+ register ssize_t
i;
/*
*blue=ClampToQuantum((MagickRealType) QuantumRange*v);
return;
}
- i=(long) floor(6.0*hue);
+ i=(ssize_t) floor(6.0*hue);
f=6.0*hue-i;
if ((i & 0x01) != 0)
f=1.0-f;
MagickExport void ConvertRGBToHWB(const Quantum red,const Quantum green,
const Quantum blue,double *hue,double *whiteness,double *blackness)
{
+ long
+ i;
+
MagickRealType
f,
v,
w;
- register long
- i;
-
/*
Convert RGB to HWB colorspace.
*/
alpha=1.0;
beta=GetPseudoRandomValue(random_info);
gamma=sqrt(-2.0*log(alpha));
- sigma=gamma*cos(2.0*MagickPI*beta);
- tau=gamma*sin(2.0*MagickPI*beta);
+ sigma=gamma*cos((double) (2.0*MagickPI*beta));
+ tau=gamma*sin((double) (2.0*MagickPI*beta));
noise=(double) pixel+sqrt((double) pixel)*SigmaGaussian*sigma+
TauGaussian*tau;
break;
sigma=sqrt(-2.0*log(alpha));
beta=GetPseudoRandomValue(random_info);
noise=(double) pixel+pixel*SigmaMultiplicativeGaussian*sigma/2.0*
- cos((2.0*MagickPI*beta));
+ cos((double) (2.0*MagickPI*beta));
break;
}
case ImpulseNoise:
double
poisson;
- register long
+ register ssize_t
i;
poisson=exp(-SigmaPoisson*ScaleQuantumToChar(pixel));
%
% The format of the GetOptimalKernelWidth method is:
%
-% unsigned long GetOptimalKernelWidth(const double radius,
+% size_t GetOptimalKernelWidth(const double radius,
% const double sigma)
%
% A description of each parameter follows:
% o sigma: the standard deviation of the Gaussian, in pixels.
%
*/
-MagickExport unsigned long GetOptimalKernelWidth1D(const double radius,
+MagickExport size_t GetOptimalKernelWidth1D(const double radius,
const double sigma)
{
-#define MagickSigma (fabs(sigma) <= MagickEpsilon ? 1.0 : sigma)
-
- MagickRealType
+ double
+ alpha,
+ beta,
+ gamma,
normalize,
value;
- long
- j;
-
- register long
+ register ssize_t
i;
- unsigned long
+ size_t
width;
+ ssize_t
+ j;
+
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
if (radius > MagickEpsilon)
- return((unsigned long) (2.0*ceil(radius)+1.0));
- if (fabs(sigma) <= MagickEpsilon)
- return(1UL);
+ return((size_t) (2.0*ceil(radius)+1.0));
+ gamma=fabs(sigma);
+ if (gamma <= MagickEpsilon)
+ return(3UL);
+ alpha=1.0/(2.0*gamma*gamma);
+ beta=(double) (1.0/(MagickSQ2PI*gamma));
for (width=5; ; )
{
normalize=0.0;
- j=(long) width/2;
+ j=(ssize_t) width/2;
for (i=(-j); i <= j; i++)
- normalize+=exp(-((double) i*i)/(2.0*MagickSigma*MagickSigma))/
- (MagickSQ2PI*MagickSigma);
- value=exp(-((double) j*j)/(2.0*MagickSigma*MagickSigma))/
- (MagickSQ2PI*MagickSigma)/normalize;
+ normalize+=exp(-((double) (i*i))*alpha)*beta;
+ value=exp(-((double) (j*j))*alpha)*beta/normalize;
if ((value < QuantumScale) || (value < MagickEpsilon))
break;
width+=2;
}
- return((unsigned long) (width-2));
+ return((size_t) (width-2));
}
-MagickExport unsigned long GetOptimalKernelWidth2D(const double radius,
+MagickExport size_t GetOptimalKernelWidth2D(const double radius,
const double sigma)
{
double
+ alpha,
+ beta,
+ gamma,
normalize,
value;
- long
+ size_t
+ width;
+
+ ssize_t
j,
u,
v;
- unsigned long
- width;
-
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
if (radius > MagickEpsilon)
- return((unsigned long) (2.0*ceil(radius)+1.0));
- if (fabs(sigma) <= MagickEpsilon)
- return(1UL);
+ return((size_t) (2.0*ceil(radius)+1.0));
+ gamma=fabs(sigma);
+ if (gamma <= MagickEpsilon)
+ return(3UL);
+ alpha=1.0/(2.0*gamma*gamma);
+ beta=(double) (1.0/(Magick2PI*gamma*gamma));
for (width=5; ; )
{
normalize=0.0;
- j=(long) width/2;
+ j=(ssize_t) width/2;
for (v=(-j); v <= j; v++)
- {
for (u=(-j); u <= j; u++)
- normalize+=exp(-((double) u*u+v*v)/(2.0*MagickSigma*MagickSigma))/
- (2.0*MagickPI*MagickSigma*MagickSigma);
- }
- value=exp(-((double) j*j)/(2.0*MagickSigma*MagickSigma))/normalize;
+ normalize+=exp(-((double) (u*u+v*v))*alpha)*beta;
+ value=exp(-((double) (j*j))*alpha)*beta/normalize;
if ((value < QuantumScale) || (value < MagickEpsilon))
break;
width+=2;
}
- return((unsigned long) (width-2));
+ return((size_t) (width-2));
}
-MagickExport unsigned long GetOptimalKernelWidth(const double radius,
+MagickExport size_t GetOptimalKernelWidth(const double radius,
const double sigma)
{
return(GetOptimalKernelWidth1D(radius,sigma));