check for under/overflow
diff --git a/MagickCore/annotate.c b/MagickCore/annotate.c
index 088d414..37bd037 100644
--- a/MagickCore/annotate.c
+++ b/MagickCore/annotate.c
@@ -1722,8 +1722,8 @@
if (status == MagickFalse)
continue;
- x_offset=(ssize_t) ceil(point.x-0.5);
- y_offset=(ssize_t) ceil(point.y+y-0.5);
+ x_offset=MagickDoubleToLong(ceil(point.x-0.5));
+ y_offset=MagickDoubleToLong(ceil(point.y+y-0.5));
if ((y_offset < 0) || (y_offset >= (ssize_t) image->rows))
continue;
q=(Quantum *) NULL;
@@ -1738,7 +1738,7 @@
n=y*bitmap->bitmap.pitch;
for (x=0; x < (ssize_t) bitmap->bitmap.width; x++, n++)
{
- x_offset=(ssize_t) ceil(point.x+x-0.5);
+ x_offset=MagickDoubleToLong(ceil(point.x+x-0.5));
if ((x_offset < 0) || (x_offset >= (ssize_t) image->columns))
{
if (q != (Quantum *) NULL)
@@ -2090,8 +2090,8 @@
crop_info=GetImageBoundingBox(annotate_image,exception);
crop_info.height=(size_t) ((resolution.y/DefaultResolution)*
ExpandAffine(&draw_info->affine)*draw_info->pointsize+0.5);
- crop_info.y=(ssize_t) ceil((resolution.y/DefaultResolution)*extent.y/8.0-
- 0.5);
+ crop_info.y=MagickDoubleToLong(ceil((resolution.y/DefaultResolution)*
+ extent.y/8.0-0.5));
(void) FormatLocaleString(geometry,MagickPathExtent,
"%.20gx%.20g%+.20g%+.20g",(double) crop_info.width,(double)
crop_info.height,(double) crop_info.x,(double) crop_info.y);
diff --git a/MagickCore/constitute.c b/MagickCore/constitute.c
index a9e9ee4..13a089f 100644
--- a/MagickCore/constitute.c
+++ b/MagickCore/constitute.c
@@ -834,12 +834,14 @@
if ((flags & LessValue) != 0)
{
if (next->delay < (size_t) floor(geometry_info.rho+0.5))
- next->ticks_per_second=(ssize_t) floor(geometry_info.sigma+0.5);
+ next->ticks_per_second=MagickDoubleToLong(floor(
+ geometry_info.sigma+0.5));
}
else
next->delay=(size_t) floor(geometry_info.rho+0.5);
if ((flags & SigmaValue) != 0)
- next->ticks_per_second=(ssize_t) floor(geometry_info.sigma+0.5);
+ next->ticks_per_second=MagickDoubleToLong(floor(
+ geometry_info.sigma+0.5));
}
option=GetImageOption(image_info,"dispose");
if (option != (const char *) NULL)
diff --git a/MagickCore/draw.c b/MagickCore/draw.c
index 4e85a40..79eb35e 100644
--- a/MagickCore/draw.c
+++ b/MagickCore/draw.c
@@ -1233,8 +1233,8 @@
edge.y2=MagickMin(max.y,(double) image->rows-1.0);
inverse_affine=InverseAffineMatrix(affine);
GetPixelInfo(image,&zero);
- start=(ssize_t) ceil(edge.y1-0.5);
- stop=(ssize_t) floor(edge.y2+0.5);
+ start=MagickDoubleToLong(ceil(edge.y1-0.5));
+ stop=MagickDoubleToLong(floor(edge.y2+0.5));
source_view=AcquireVirtualCacheView(source,exception);
image_view=AcquireAuthenticCacheView(image,exception);
#if defined(MAGICKCORE_OPENMP_SUPPORT)
@@ -1267,15 +1267,16 @@
inverse_edge=AffineEdge(source,&inverse_affine,(double) y,&edge);
if (inverse_edge.x2 < inverse_edge.x1)
continue;
- q=GetCacheViewAuthenticPixels(image_view,(ssize_t) ceil(inverse_edge.x1-
- 0.5),y,(size_t) (floor(inverse_edge.x2+0.5)-ceil(inverse_edge.x1-0.5)+1),
- 1,exception);
+ q=GetCacheViewAuthenticPixels(image_view,MagickDoubleToLong(
+ ceil(inverse_edge.x1-0.5)),y,(size_t) MagickDoubleToLong(floor(
+ inverse_edge.x2+0.5)-ceil(inverse_edge.x1-0.5)+1),1,exception);
if (q == (Quantum *) NULL)
continue;
pixel=zero;
composite=zero;
x_offset=0;
- for (x=(ssize_t) ceil(inverse_edge.x1-0.5); x <= (ssize_t) floor(inverse_edge.x2+0.5); x++)
+ for (x=MagickDoubleToLong(ceil(inverse_edge.x1-0.5));
+ x <= MagickDoubleToLong(floor(inverse_edge.x2+0.5)); x++)
{
point.x=(double) x*inverse_affine.sx+y*inverse_affine.ry+
inverse_affine.tx;
@@ -2089,8 +2090,8 @@
case UndefinedSpread:
case PadSpread:
{
- if ((x != (ssize_t) ceil(gradient_vector->x1-0.5)) ||
- (y != (ssize_t) ceil(gradient_vector->y1-0.5)))
+ if ((x != MagickDoubleToLong(ceil(gradient_vector->x1-0.5))) ||
+ (y != MagickDoubleToLong(ceil(gradient_vector->y1-0.5))))
{
offset=GetStopColorOffset(gradient,x,y);
if (gradient->type != RadialGradient)
@@ -2117,8 +2118,8 @@
}
case ReflectSpread:
{
- if ((x != (ssize_t) ceil(gradient_vector->x1-0.5)) ||
- (y != (ssize_t) ceil(gradient_vector->y1-0.5)))
+ if ((x != MagickDoubleToLong(ceil(gradient_vector->x1-0.5))) ||
+ (y != MagickDoubleToLong(ceil(gradient_vector->y1-0.5))))
{
offset=GetStopColorOffset(gradient,x,y);
if (gradient->type != RadialGradient)
@@ -2159,8 +2160,8 @@
antialias=MagickFalse;
repeat=0.0;
- if ((x != (ssize_t) ceil(gradient_vector->x1-0.5)) ||
- (y != (ssize_t) ceil(gradient_vector->y1-0.5)))
+ if ((x != MagickDoubleToLong(ceil(gradient_vector->x1-0.5))) ||
+ (y != MagickDoubleToLong(ceil(gradient_vector->y1-0.5))))
{
offset=GetStopColorOffset(gradient,x,y);
if (gradient->type == LinearGradient)
@@ -3455,20 +3456,22 @@
(void) GetNextToken(q,&q,extent,token);
(void) CopyMagickString(name,token,MagickPathExtent);
(void) GetNextToken(q,&q,extent,token);
- bounds.x=(ssize_t) ceil(GetDrawValue(token,&next_token)-0.5);
+ bounds.x=MagickDoubleToLong(ceil(GetDrawValue(token,
+ &next_token)-0.5));
if (token == next_token)
ThrowPointExpectedException(token,exception);
(void) GetNextToken(q,&q,extent,token);
if (*token == ',')
(void) GetNextToken(q,&q,extent,token);
- bounds.y=(ssize_t) ceil(GetDrawValue(token,&next_token)-0.5);
+ bounds.y=MagickDoubleToLong(ceil(GetDrawValue(token,
+ &next_token)-0.5));
if (token == next_token)
ThrowPointExpectedException(token,exception);
(void) GetNextToken(q,&q,extent,token);
if (*token == ',')
(void) GetNextToken(q,&q,extent,token);
- bounds.width=(size_t) floor(GetDrawValue(token,&next_token)+
- 0.5);
+ bounds.width=(size_t) MagickDoubleToLong(floor(GetDrawValue(
+ token,&next_token)+0.5));
if (token == next_token)
ThrowPointExpectedException(token,exception);
(void) GetNextToken(q,&q,extent,token);
@@ -3878,29 +3881,29 @@
if (LocaleCompare("viewbox",keyword) == 0)
{
(void) GetNextToken(q,&q,extent,token);
- graphic_context[n]->viewbox.x=(ssize_t) ceil(GetDrawValue(token,
- &next_token)-0.5);
+ graphic_context[n]->viewbox.x=MagickDoubleToLong(ceil(
+ GetDrawValue(token,&next_token)-0.5));
if (token == next_token)
ThrowPointExpectedException(token,exception);
(void) GetNextToken(q,&q,extent,token);
if (*token == ',')
(void) GetNextToken(q,&q,extent,token);
- graphic_context[n]->viewbox.y=(ssize_t) ceil(GetDrawValue(token,
- &next_token)-0.5);
+ graphic_context[n]->viewbox.y=MagickDoubleToLong(ceil(
+ GetDrawValue(token,&next_token)-0.5));
if (token == next_token)
ThrowPointExpectedException(token,exception);
(void) GetNextToken(q,&q,extent,token);
if (*token == ',')
(void) GetNextToken(q,&q,extent,token);
- graphic_context[n]->viewbox.width=(size_t) floor(GetDrawValue(
- token,&next_token)+0.5);
+ graphic_context[n]->viewbox.width=(size_t) MagickDoubleToLong(
+ floor(GetDrawValue(token,&next_token)+0.5));
if (token == next_token)
ThrowPointExpectedException(token,exception);
(void) GetNextToken(q,&q,extent,token);
if (*token == ',')
(void) GetNextToken(q,&q,extent,token);
- graphic_context[n]->viewbox.height=(size_t) floor(GetDrawValue(
- token,&next_token)+0.5);
+ graphic_context[n]->viewbox.height=(size_t) MagickDoubleToLong(
+ floor(GetDrawValue(token,&next_token)+0.5));
if (token == next_token)
ThrowPointExpectedException(token,exception);
break;
@@ -4073,7 +4076,7 @@
case BezierPrimitive:
{
coordinates=(BezierQuantum*(double) primitive_info[j].coordinates);
- if (primitive_info[j].coordinates > (108.0*BezierQuantum))
+ if (primitive_info[j].coordinates > (108*BezierQuantum))
{
(void) ThrowMagickException(exception,GetMagickModule(),DrawError,
"TooManyBezierCoordinates","`%s'",token);
@@ -4981,8 +4984,8 @@
/*
Draw point.
*/
- start_y=(ssize_t) ceil(bounds.y1-0.5);
- stop_y=(ssize_t) floor(bounds.y2+0.5);
+ start_y=MagickDoubleToLong(ceil(bounds.y1-0.5));
+ stop_y=MagickDoubleToLong(floor(bounds.y2+0.5));
#if defined(MAGICKCORE_OPENMP_SUPPORT)
#pragma omp parallel for schedule(static) shared(status) \
magick_number_threads(image,image,stop_y-start_y+1,1)
@@ -5007,8 +5010,8 @@
if (status == MagickFalse)
continue;
- start_x=(ssize_t) ceil(bounds.x1-0.5);
- stop_x=(ssize_t) floor(bounds.x2+0.5);
+ start_x=MagickDoubleToLong(ceil(bounds.x1-0.5));
+ stop_x=MagickDoubleToLong(floor(bounds.x2+0.5));
x=start_x;
q=GetCacheViewAuthenticPixels(image_view,x,y,(size_t) (stop_x-x+1),1,
exception);
@@ -5020,8 +5023,8 @@
GetPixelInfo(image,&pixel);
for ( ; x <= stop_x; x++)
{
- if ((x == (ssize_t) ceil(primitive_info->point.x-0.5)) &&
- (y == (ssize_t) ceil(primitive_info->point.y-0.5)))
+ if ((x == MagickDoubleToLong(ceil(primitive_info->point.x-0.5))) &&
+ (y == MagickDoubleToLong(ceil(primitive_info->point.y-0.5))))
{
GetFillColor(draw_info,x-start_x,y-start_y,&pixel,exception);
SetPixelViaPixelInfo(image,&pixel,q);
@@ -5042,8 +5045,8 @@
/*
Draw polygon or line.
*/
- start_y=(ssize_t) ceil(bounds.y1-0.5);
- stop_y=(ssize_t) floor(bounds.y2+0.5);
+ start_y=MagickDoubleToLong(ceil(bounds.y1-0.5));
+ stop_y=MagickDoubleToLong(floor(bounds.y2+0.5));
#if defined(MAGICKCORE_OPENMP_SUPPORT)
#pragma omp parallel for schedule(static) shared(status) \
magick_number_threads(image,image,stop_y-start_y+1,1)
@@ -5065,8 +5068,8 @@
if (status == MagickFalse)
continue;
- start_x=(ssize_t) ceil(bounds.x1-0.5);
- stop_x=(ssize_t) floor(bounds.x2+0.5);
+ start_x=MagickDoubleToLong(ceil(bounds.x1-0.5));
+ stop_x=MagickDoubleToLong(floor(bounds.x2+0.5));
q=GetCacheViewAuthenticPixels(image_view,start_x,y,(size_t) (stop_x-start_x+
1),1,exception);
if (q == (Quantum *) NULL)
@@ -5167,8 +5170,8 @@
coordinates,
y;
- x=(ssize_t) ceil(primitive_info->point.x-0.5);
- y=(ssize_t) ceil(primitive_info->point.y-0.5);
+ x=MagickDoubleToLong(ceil(primitive_info->point.x-0.5));
+ y=MagickDoubleToLong(ceil(primitive_info->point.y-0.5));
switch (primitive_info->primitive)
{
case AlphaPrimitive:
@@ -5281,8 +5284,8 @@
status&=SetImageMask(image,CompositePixelMask,draw_info->composite_mask,
exception);
}
- x=(ssize_t) ceil(primitive_info->point.x-0.5);
- y=(ssize_t) ceil(primitive_info->point.y-0.5);
+ x=MagickDoubleToLong(ceil(primitive_info->point.x-0.5));
+ y=MagickDoubleToLong(ceil(primitive_info->point.y-0.5));
image_view=AcquireAuthenticCacheView(image,exception);
switch (primitive_info->primitive)
{
@@ -5560,8 +5563,8 @@
composite_images=DestroyImageList(composite_images);
(void) SetImageProgressMonitor(composite_image,(MagickProgressMonitor)
NULL,(void *) NULL);
- x1=(ssize_t) ceil(primitive_info[1].point.x-0.5);
- y1=(ssize_t) ceil(primitive_info[1].point.y-0.5);
+ x1=MagickDoubleToLong(ceil(primitive_info[1].point.x-0.5));
+ y1=MagickDoubleToLong(ceil(primitive_info[1].point.y-0.5));
if (((x1 != 0L) && (x1 != (ssize_t) composite_image->columns)) ||
((y1 != 0L) && (y1 != (ssize_t) composite_image->rows)))
{
@@ -6170,8 +6173,8 @@
else
if ((theta > 0.0) && (sweep == MagickFalse))
theta-=2.0*MagickPI;
- arc_segments=(size_t) ceil(fabs((double) (theta/(0.5*MagickPI+
- MagickEpsilon))));
+ arc_segments=(size_t) MagickDoubleToLong(ceil(fabs((double) (theta/(0.5*
+ MagickPI+MagickEpsilon)))));
status=MagickTrue;
p=primitive_info;
for (i=0; i < (ssize_t) arc_segments; i++)
@@ -7526,8 +7529,8 @@
theta.q=atan2(box_q[2].y-center.y,box_q[2].x-center.x);
if (theta.q < theta.p)
theta.q+=2.0*MagickPI;
- arc_segments=(size_t) ceil((double) ((theta.q-theta.p)/
- (2.0*sqrt((double) (1.0/mid)))));
+ arc_segments=(size_t) MagickDoubleToLong(ceil((double) ((theta.
+ q-theta.p)/(2.0*sqrt((double) (1.0/mid))))));
CheckPathExtent(MaxStrokePad,arc_segments+MaxStrokePad);
stroke_q[q].x=box_q[1].x;
stroke_q[q].y=box_q[1].y;
@@ -7599,8 +7602,8 @@
theta.q=atan2(box_p[2].y-center.y,box_p[2].x-center.x);
if (theta.p < theta.q)
theta.p+=2.0*MagickPI;
- arc_segments=(size_t) ceil((double) ((theta.p-theta.q)/
- (2.0*sqrt((double) (1.0/mid)))));
+ arc_segments=(size_t) MagickDoubleToLong(ceil((double) ((theta.p-
+ theta.q)/(2.0*sqrt((double) (1.0/mid))))));
CheckPathExtent(arc_segments+MaxStrokePad,MaxStrokePad);
stroke_p[p++]=box_p[1];
for (j=1; j < (ssize_t) arc_segments; j++)
diff --git a/MagickCore/effect.c b/MagickCore/effect.c
index 38f89c3..6b6621c 100644
--- a/MagickCore/effect.c
+++ b/MagickCore/effect.c
@@ -288,8 +288,8 @@
center,
j;
- j=(ssize_t) ceil((double) width*(1.0-QuantumScale*
- GetPixelIntensity(edge_image,r))-0.5);
+ j=MagickDoubleToLong(ceil((double) width*(1.0-QuantumScale*
+ GetPixelIntensity(edge_image,r))-0.5));
if (j < 0)
j=0;
else
@@ -609,8 +609,8 @@
center,
j;
- j=(ssize_t) ceil((double) width*(1.0-QuantumScale*
- GetPixelIntensity(edge_image,r))-0.5);
+ j=MagickDoubleToLong(ceil((double) width*(1.0-QuantumScale*
+ GetPixelIntensity(edge_image,r))-0.5));
if (j < 0)
j=0;
else
@@ -2402,8 +2402,10 @@
point.y=(double) width*cos(DegreesToRadians(angle));
for (i=0; i < (ssize_t) width; i++)
{
- offset[i].x=(ssize_t) ceil((double) (i*point.y)/hypot(point.x,point.y)-0.5);
- offset[i].y=(ssize_t) ceil((double) (i*point.x)/hypot(point.x,point.y)-0.5);
+ offset[i].x=MagickDoubleToLong(ceil((double) (i*point.y)/
+ hypot(point.x,point.y)-0.5));
+ offset[i].y=MagickDoubleToLong(ceil((double) (i*point.x)/
+ hypot(point.x,point.y)-0.5));
}
/*
Motion blur image.
diff --git a/MagickCore/gem.c b/MagickCore/gem.c
index 5767b57..a986276 100644
--- a/MagickCore/gem.c
+++ b/MagickCore/gem.c
@@ -692,7 +692,7 @@
*blue=QuantumRange*v;
return;
}
- i=(ssize_t) floor(6.0*hue);
+ i=MagickDoubleToLong(floor(6.0*hue));
f=6.0*hue-i;
if ((i & 0x01) != 0)
f=1.0-f;
diff --git a/MagickCore/image-private.h b/MagickCore/image-private.h
index 6cd48c2..935eed5 100644
--- a/MagickCore/image-private.h
+++ b/MagickCore/image-private.h
@@ -55,6 +55,17 @@
return((double) (MagickPI*degrees/180.0));
}
+static inline ssize_t MagickDoubleToLong(const double value)
+{
+ if (IsNaN(value) != 0)
+ return(0);
+ if (value > (double) SSIZE_MAX)
+ return((ssize_t) SSIZE_MAX);
+ if (value < (double) -SSIZE_MAX)
+ return((ssize_t) -SSIZE_MAX);
+ return((ssize_t) value);
+}
+
static inline double RadiansToDegrees(const double radians)
{
return((double) (180.0*radians/MagickPI));
diff --git a/MagickCore/image.c b/MagickCore/image.c
index b9fb946..e0919c0 100644
--- a/MagickCore/image.c
+++ b/MagickCore/image.c
@@ -281,19 +281,23 @@
flags=ParseGeometry(option,&geometry_info);
if ((flags & GreaterValue) != 0)
{
- if (image->delay > (size_t) floor(geometry_info.rho+0.5))
- image->delay=(size_t) floor(geometry_info.rho+0.5);
+ if ((double) image->delay > floor(geometry_info.rho+0.5))
+ image->delay=(size_t) MagickDoubleToLong(floor(
+ geometry_info.rho+0.5));
}
else
if ((flags & LessValue) != 0)
{
- if (image->delay < (size_t) floor(geometry_info.rho+0.5))
- image->ticks_per_second=(ssize_t) floor(geometry_info.sigma+0.5);
+ if ((double) image->delay < floor(geometry_info.rho+0.5))
+ image->ticks_per_second=MagickDoubleToLong(floor(
+ geometry_info.sigma+0.5));
}
else
- image->delay=(size_t) floor(geometry_info.rho+0.5);
+ image->delay=(size_t) MagickDoubleToLong(floor(
+ geometry_info.rho+0.5));
if ((flags & SigmaValue) != 0)
- image->ticks_per_second=(ssize_t) floor(geometry_info.sigma+0.5);
+ image->ticks_per_second=MagickDoubleToLong(floor(
+ geometry_info.sigma+0.5));
}
option=GetImageOption(image_info,"dispose");
if (option != (const char *) NULL)
@@ -877,15 +881,19 @@
scale=1.0;
if (image->columns != 0)
scale=(double) columns/(double) image->columns;
- clone_image->page.width=(size_t) floor(scale*image->page.width+0.5);
- clone_image->page.x=(ssize_t) ceil(scale*image->page.x-0.5);
- clone_image->tile_offset.x=(ssize_t) ceil(scale*image->tile_offset.x-0.5);
+ clone_image->page.width=(size_t) MagickDoubleToLong(floor(scale*
+ image->page.width+0.5));
+ clone_image->page.x=MagickDoubleToLong(ceil(scale*image->page.x-0.5));
+ clone_image->tile_offset.x=MagickDoubleToLong(ceil(scale*
+ image->tile_offset.x-0.5));
scale=1.0;
if (image->rows != 0)
scale=(double) rows/(double) image->rows;
- clone_image->page.height=(size_t) floor(scale*image->page.height+0.5);
- clone_image->page.y=(ssize_t) ceil(scale*image->page.y-0.5);
- clone_image->tile_offset.y=(ssize_t) ceil(scale*image->tile_offset.y-0.5);
+ clone_image->page.height=(size_t) MagickDoubleToLong(floor(scale*
+ image->page.height+0.5));
+ clone_image->page.y=MagickDoubleToLong(ceil(scale*image->page.y-0.5));
+ clone_image->tile_offset.y=MagickDoubleToLong(ceil(scale*
+ image->tile_offset.y-0.5));
clone_image->cache=ClonePixelCache(image->cache);
if (SetImageExtent(clone_image,columns,rows,exception) == MagickFalse)
clone_image=DestroyImage(clone_image);
diff --git a/MagickCore/pixel.c b/MagickCore/pixel.c
index 529567a..5e345ee 100644
--- a/MagickCore/pixel.c
+++ b/MagickCore/pixel.c
@@ -4524,8 +4524,8 @@
status=MagickTrue;
*pixel=0.0;
traits=GetPixelChannelTraits(image,channel);
- x_offset=(ssize_t) floor(ConstrainPixelOffset(x));
- y_offset=(ssize_t) floor(ConstrainPixelOffset(y));
+ x_offset=MagickDoubleToLong(floor(ConstrainPixelOffset(x)));
+ y_offset=MagickDoubleToLong(floor(ConstrainPixelOffset(y)));
interpolate=method;
if (interpolate == UndefinedInterpolatePixel)
interpolate=image->interpolate;
@@ -4542,8 +4542,8 @@
if (interpolate == Average9InterpolatePixel)
{
count=3;
- x_offset=(ssize_t) (floor(ConstrainPixelOffset(x)+0.5)-1);
- y_offset=(ssize_t) (floor(ConstrainPixelOffset(y)+0.5)-1);
+ x_offset=MagickDoubleToLong(floor(ConstrainPixelOffset(x)+0.5)-1.0);
+ y_offset=MagickDoubleToLong(floor(ConstrainPixelOffset(y)+0.5)-1.0);
}
else
if (interpolate == Average16InterpolatePixel)
@@ -4726,8 +4726,8 @@
}
case NearestInterpolatePixel:
{
- x_offset=(ssize_t) floor(ConstrainPixelOffset(x)+0.5);
- y_offset=(ssize_t) floor(ConstrainPixelOffset(y)+0.5);
+ x_offset=MagickDoubleToLong(floor(ConstrainPixelOffset(x)+0.5));
+ y_offset=MagickDoubleToLong(floor(ConstrainPixelOffset(y)+0.5));
p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,1,1,exception);
if (p == (const Quantum *) NULL)
{
@@ -4944,8 +4944,8 @@
assert(source->signature == MagickCoreSignature);
assert(source_view != (CacheView *) NULL);
status=MagickTrue;
- x_offset=(ssize_t) floor(ConstrainPixelOffset(x));
- y_offset=(ssize_t) floor(ConstrainPixelOffset(y));
+ x_offset=MagickDoubleToLong(floor(ConstrainPixelOffset(x)));
+ y_offset=MagickDoubleToLong(floor(ConstrainPixelOffset(y)));
interpolate=method;
if (interpolate == UndefinedInterpolatePixel)
interpolate=source->interpolate;
@@ -4962,8 +4962,8 @@
if (interpolate == Average9InterpolatePixel)
{
count=3;
- x_offset=(ssize_t) (floor(ConstrainPixelOffset(x)+0.5)-1);
- y_offset=(ssize_t) (floor(ConstrainPixelOffset(y)+0.5)-1);
+ x_offset=MagickDoubleToLong(floor(ConstrainPixelOffset(x)+0.5)-1.0);
+ y_offset=MagickDoubleToLong(floor(ConstrainPixelOffset(y)+0.5)-1.0);
}
else
if (interpolate == Average16InterpolatePixel)
@@ -5227,8 +5227,8 @@
}
case NearestInterpolatePixel:
{
- x_offset=(ssize_t) floor(ConstrainPixelOffset(x)+0.5);
- y_offset=(ssize_t) floor(ConstrainPixelOffset(y)+0.5);
+ x_offset=MagickDoubleToLong(floor(ConstrainPixelOffset(x)+0.5));
+ y_offset=MagickDoubleToLong(floor(ConstrainPixelOffset(y)+0.5));
p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,1,1,exception);
if (p == (const Quantum *) NULL)
{
@@ -5511,8 +5511,8 @@
assert(image->signature == MagickCoreSignature);
assert(image_view != (CacheView *) NULL);
status=MagickTrue;
- x_offset=(ssize_t) floor(ConstrainPixelOffset(x));
- y_offset=(ssize_t) floor(ConstrainPixelOffset(y));
+ x_offset=MagickDoubleToLong(floor(ConstrainPixelOffset(x)));
+ y_offset=MagickDoubleToLong(floor(ConstrainPixelOffset(y)));
interpolate=method;
if (interpolate == UndefinedInterpolatePixel)
interpolate=image->interpolate;
@@ -5531,8 +5531,8 @@
if (interpolate == Average9InterpolatePixel)
{
count=3;
- x_offset=(ssize_t) (floor(ConstrainPixelOffset(x)+0.5)-1);
- y_offset=(ssize_t) (floor(ConstrainPixelOffset(y)+0.5)-1);
+ x_offset=MagickDoubleToLong(floor(ConstrainPixelOffset(x)+0.5)-1.0);
+ y_offset=MagickDoubleToLong(floor(ConstrainPixelOffset(y)+0.5)-1.0);
}
else if (interpolate == Average16InterpolatePixel)
{
@@ -5856,8 +5856,8 @@
}
case NearestInterpolatePixel:
{
- x_offset=(ssize_t) floor(ConstrainPixelOffset(x)+0.5);
- y_offset=(ssize_t) floor(ConstrainPixelOffset(y)+0.5);
+ x_offset=MagickDoubleToLong(floor(ConstrainPixelOffset(x)+0.5));
+ y_offset=MagickDoubleToLong(floor(ConstrainPixelOffset(y)+0.5));
p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,1,1,exception);
if (p == (const Quantum *) NULL)
{
diff --git a/MagickCore/property.c b/MagickCore/property.c
index 69c42a0..c08106f 100644
--- a/MagickCore/property.c
+++ b/MagickCore/property.c
@@ -4354,14 +4354,15 @@
else
if ((flags & LessValue) != 0)
{
- if (image->delay < (size_t) floor(geometry_info.rho+0.5))
- image->delay=(ssize_t)
- floor(geometry_info.sigma+0.5);
+ if ((double) image->delay < floor(geometry_info.rho+0.5))
+ image->delay=MagickDoubleToLong(
+ floor(geometry_info.sigma+0.5));
}
else
image->delay=(size_t) floor(geometry_info.rho+0.5);
if ((flags & SigmaValue) != 0)
- image->ticks_per_second=(ssize_t) floor(geometry_info.sigma+0.5);
+ image->ticks_per_second=MagickDoubleToLong(floor(
+ geometry_info.sigma+0.5));
return(MagickTrue);
}
if (LocaleCompare("delay_units",property) == 0)
diff --git a/MagickCore/segment.c b/MagickCore/segment.c
index ba10779..4850053 100644
--- a/MagickCore/segment.c
+++ b/MagickCore/segment.c
@@ -331,7 +331,7 @@
}
else
{
- cluster=(Cluster *) AcquireMagickMemory(sizeof(*cluster));
+ cluster=(Cluster *) AcquireQuantumMemory(1,sizeof(*cluster));
head=cluster;
}
if (cluster == (Cluster *) NULL)
@@ -353,7 +353,7 @@
/*
No classes were identified-- create one.
*/
- cluster=(Cluster *) AcquireMagickMemory(sizeof(*cluster));
+ cluster=(Cluster *) AcquireQuantumMemory(1,sizeof(*cluster));
if (cluster == (Cluster *) NULL)
ThrowClassifyException(ResourceLimitError,"MemoryAllocationFailed",
image->filename);
@@ -387,30 +387,27 @@
break;
for (x=0; x < (ssize_t) image->columns; x++)
{
+ PixelInfo
+ pixel;
+
+ pixel.red=(double) ScaleQuantumToChar(GetPixelRed(image,p));
+ pixel.green=(double) ScaleQuantumToChar(GetPixelGreen(image,p));
+ pixel.blue=(double) ScaleQuantumToChar(GetPixelBlue(image,p));
for (cluster=head; cluster != (Cluster *) NULL; cluster=cluster->next)
- if (((ssize_t) ScaleQuantumToChar(GetPixelRed(image,p)) >=
- (cluster->red.left-SafeMargin)) &&
- ((ssize_t) ScaleQuantumToChar(GetPixelRed(image,p)) <=
- (cluster->red.right+SafeMargin)) &&
- ((ssize_t) ScaleQuantumToChar(GetPixelGreen(image,p)) >=
- (cluster->green.left-SafeMargin)) &&
- ((ssize_t) ScaleQuantumToChar(GetPixelGreen(image,p)) <=
- (cluster->green.right+SafeMargin)) &&
- ((ssize_t) ScaleQuantumToChar(GetPixelBlue(image,p)) >=
- (cluster->blue.left-SafeMargin)) &&
- ((ssize_t) ScaleQuantumToChar(GetPixelBlue(image,p)) <=
- (cluster->blue.right+SafeMargin)))
+ if ((pixel.red >= (double) (cluster->red.left-SafeMargin)) &&
+ (pixel.red <= (double) (cluster->red.right+SafeMargin)) &&
+ (pixel.green >= (double) (cluster->green.left-SafeMargin)) &&
+ (pixel.green <= (double) (cluster->green.right+SafeMargin)) &&
+ (pixel.blue >= (double) (cluster->blue.left-SafeMargin)) &&
+ (pixel.blue <= (double) (cluster->blue.right+SafeMargin)))
{
/*
Count this pixel.
*/
count++;
- cluster->red.center+=(double) ScaleQuantumToChar(
- GetPixelRed(image,p));
- cluster->green.center+=(double) ScaleQuantumToChar(
- GetPixelGreen(image,p));
- cluster->blue.center+=(double) ScaleQuantumToChar(
- GetPixelBlue(image,p));
+ cluster->red.center+=pixel.red;
+ cluster->green.center+=pixel.green;
+ cluster->blue.center+=pixel.blue;
cluster->count++;
break;
}
@@ -557,7 +554,7 @@
for (y=0; y < (ssize_t) image->rows; y++)
{
Cluster
- *clust;
+ *cluster;
register const PixelInfo
*magick_restrict p;
@@ -578,30 +575,30 @@
}
for (x=0; x < (ssize_t) image->columns; x++)
{
+ PixelInfo
+ pixel;
+
SetPixelIndex(image,(Quantum) 0,q);
- for (clust=head; clust != (Cluster *) NULL; clust=clust->next)
+ pixel.red=(double) ScaleQuantumToChar(GetPixelRed(image,q));
+ pixel.green=(double) ScaleQuantumToChar(GetPixelGreen(image,q));
+ pixel.blue=(double) ScaleQuantumToChar(GetPixelBlue(image,q));
+ for (cluster=head; cluster != (Cluster *) NULL; cluster=cluster->next)
{
- if (((ssize_t) ScaleQuantumToChar(GetPixelRed(image,q)) >=
- (clust->red.left-SafeMargin)) &&
- ((ssize_t) ScaleQuantumToChar(GetPixelRed(image,q)) <=
- (clust->red.right+SafeMargin)) &&
- ((ssize_t) ScaleQuantumToChar(GetPixelGreen(image,q)) >=
- (clust->green.left-SafeMargin)) &&
- ((ssize_t) ScaleQuantumToChar(GetPixelGreen(image,q)) <=
- (clust->green.right+SafeMargin)) &&
- ((ssize_t) ScaleQuantumToChar(GetPixelBlue(image,q)) >=
- (clust->blue.left-SafeMargin)) &&
- ((ssize_t) ScaleQuantumToChar(GetPixelBlue(image,q)) <=
- (clust->blue.right+SafeMargin)))
+ if ((pixel.red >= (double) (cluster->red.left-SafeMargin)) &&
+ (pixel.red <= (double) (cluster->red.right+SafeMargin)) &&
+ (pixel.green >= (double) (cluster->green.left-SafeMargin)) &&
+ (pixel.green <= (double) (cluster->green.right+SafeMargin)) &&
+ (pixel.blue >= (double) (cluster->blue.left-SafeMargin)) &&
+ (pixel.blue <= (double) (cluster->blue.right+SafeMargin)))
{
/*
Classify this pixel.
*/
- SetPixelIndex(image,(Quantum) clust->id,q);
+ SetPixelIndex(image,(Quantum) cluster->id,q);
break;
}
}
- if (clust == (Cluster *) NULL)
+ if (cluster == (Cluster *) NULL)
{
double
distance_squared,
@@ -622,24 +619,18 @@
{
sum=0.0;
p=image->colormap+j;
- distance_squared=squares[(ssize_t) ScaleQuantumToChar(
- GetPixelRed(image,q))-(ssize_t)
- ScaleQuantumToChar(ClampToQuantum(p->red))]+squares[(ssize_t)
- ScaleQuantumToChar(GetPixelGreen(image,q))-(ssize_t)
- ScaleQuantumToChar(ClampToQuantum(p->green))]+squares[(ssize_t)
- ScaleQuantumToChar(GetPixelBlue(image,q))-(ssize_t)
- ScaleQuantumToChar(ClampToQuantum(p->blue))];
+ distance_squared=
+ squares[(ssize_t) (pixel.red-ScaleQuantumToChar(p->red))]+
+ squares[(ssize_t) (pixel.green-ScaleQuantumToChar(p->green))]+
+ squares[(ssize_t) (pixel.blue-ScaleQuantumToChar(p->blue))];
numerator=distance_squared;
for (k=0; k < (ssize_t) image->colors; k++)
{
p=image->colormap+k;
- distance_squared=squares[(ssize_t) ScaleQuantumToChar(
- GetPixelRed(image,q))-(ssize_t)
- ScaleQuantumToChar(ClampToQuantum(p->red))]+squares[
- (ssize_t) ScaleQuantumToChar(GetPixelGreen(image,q))-(ssize_t)
- ScaleQuantumToChar(ClampToQuantum(p->green))]+squares[
- (ssize_t) ScaleQuantumToChar(GetPixelBlue(image,q))-(ssize_t)
- ScaleQuantumToChar(ClampToQuantum(p->blue))];
+ distance_squared=
+ squares[(ssize_t) (pixel.red-ScaleQuantumToChar(p->red))]+
+ squares[(ssize_t) (pixel.green-ScaleQuantumToChar(p->green))]+
+ squares[(ssize_t) (pixel.blue-ScaleQuantumToChar(p->blue))];
ratio=numerator/distance_squared;
sum+=SegmentPower(ratio);
}
@@ -1043,7 +1034,7 @@
}
else
{
- cluster=(Cluster *) AcquireMagickMemory(sizeof(*cluster));
+ cluster=(Cluster *) AcquireQuantumMemory(1,sizeof(*cluster));
head=cluster;
}
if (cluster == (Cluster *) NULL)
@@ -1069,7 +1060,7 @@
/*
No classes were identified-- create one.
*/
- cluster=(Cluster *) AcquireMagickMemory(sizeof(*cluster));
+ cluster=(Cluster *) AcquireQuantumMemory(1,sizeof(*cluster));
if (cluster == (Cluster *) NULL)
{
(void) ThrowMagickException(exception,GetMagickModule(),
@@ -1097,30 +1088,27 @@
break;
for (x=0; x < (ssize_t) image->columns; x++)
{
+ PixelInfo
+ pixel;
+
+ pixel.red=(double) ScaleQuantumToChar(GetPixelRed(image,p));
+ pixel.green=(double) ScaleQuantumToChar(GetPixelGreen(image,p));
+ pixel.blue=(double) ScaleQuantumToChar(GetPixelBlue(image,p));
for (cluster=head; cluster != (Cluster *) NULL; cluster=cluster->next)
- if (((ssize_t) ScaleQuantumToChar(GetPixelRed(image,p)) >=
- (cluster->red.left-SafeMargin)) &&
- ((ssize_t) ScaleQuantumToChar(GetPixelRed(image,p)) <=
- (cluster->red.right+SafeMargin)) &&
- ((ssize_t) ScaleQuantumToChar(GetPixelGreen(image,p)) >=
- (cluster->green.left-SafeMargin)) &&
- ((ssize_t) ScaleQuantumToChar(GetPixelGreen(image,p)) <=
- (cluster->green.right+SafeMargin)) &&
- ((ssize_t) ScaleQuantumToChar(GetPixelBlue(image,p)) >=
- (cluster->blue.left-SafeMargin)) &&
- ((ssize_t) ScaleQuantumToChar(GetPixelBlue(image,p)) <=
- (cluster->blue.right+SafeMargin)))
+ if ((pixel.red >= (double) (cluster->red.left-SafeMargin)) &&
+ (pixel.red <= (double) (cluster->red.right+SafeMargin)) &&
+ (pixel.green >= (double) (cluster->green.left-SafeMargin)) &&
+ (pixel.green <= (double) (cluster->green.right+SafeMargin)) &&
+ (pixel.blue >= (double) (cluster->blue.left-SafeMargin)) &&
+ (pixel.blue <= (double) (cluster->blue.right+SafeMargin)))
{
/*
Count this pixel.
*/
count++;
- cluster->red.center+=(double) ScaleQuantumToChar(
- GetPixelRed(image,p));
- cluster->green.center+=(double) ScaleQuantumToChar(
- GetPixelGreen(image,p));
- cluster->blue.center+=(double) ScaleQuantumToChar(
- GetPixelBlue(image,p));
+ cluster->red.center+=pixel.red;
+ cluster->green.center+=pixel.green;
+ cluster->blue.center+=pixel.blue;
cluster->count++;
break;
}
@@ -1635,7 +1623,7 @@
return(0.0);
}
/*
- Find active nodes: stability is greater (or equal) to the mean stability of
+ Find active nodes: Stability is greater (or equal) to the mean stability of
its children.
*/
number_nodes=0;
@@ -1729,7 +1717,6 @@
% of pixels for each intensity of a particular color component.
%
*/
-
static void ScaleSpace(const ssize_t *histogram,const double tau,
double *scale_histogram)
{
diff --git a/MagickCore/shear.c b/MagickCore/shear.c
index 8b5ff3c..6552070 100644
--- a/MagickCore/shear.c
+++ b/MagickCore/shear.c
@@ -163,10 +163,10 @@
if (max.y < extent[i].y)
max.y=extent[i].y;
}
- geometry.x=(ssize_t) ceil(min.x-0.5);
- geometry.y=(ssize_t) ceil(min.y-0.5);
- geometry.width=(size_t) floor(max.x-min.x+0.5);
- geometry.height=(size_t) floor(max.y-min.y+0.5);
+ geometry.x=MagickDoubleToLong(ceil(min.x-0.5));
+ geometry.y=MagickDoubleToLong(ceil(min.y-0.5));
+ geometry.width=(size_t) MagickDoubleToLong(floor(max.x-min.x+0.5));
+ geometry.height=(size_t) MagickDoubleToLong(floor(max.y-min.y+0.5));
page=(*image)->page;
(void) ParseAbsoluteGeometry("0x0+0+0",&(*image)->page);
crop_image=CropImage(*image,&geometry,exception);
@@ -1217,7 +1217,7 @@
displacement*=(-1.0);
direction=LEFT;
}
- step=(ssize_t) floor((double) displacement);
+ step=MagickDoubleToLong(floor((double) displacement));
area=(double) (displacement-step);
step++;
pixel=background;
@@ -1434,7 +1434,7 @@
displacement*=(-1.0);
direction=UP;
}
- step=(ssize_t) floor((double) displacement);
+ step=MagickDoubleToLong(floor((double) displacement));
area=(double) (displacement-step);
step++;
pixel=background;
@@ -1617,11 +1617,12 @@
/*
Compute image size.
*/
- bounds.width=image->columns+(ssize_t) floor(fabs(shear.x)*image->rows+0.5);
- bounds.x=(ssize_t) ceil((double) image->columns+((fabs(shear.x)*image->rows)-
- image->columns)/2.0-0.5);
- bounds.y=(ssize_t) ceil((double) image->rows+((fabs(shear.y)*bounds.width)-
- image->rows)/2.0-0.5);
+ bounds.width=image->columns+MagickDoubleToLong(floor(fabs(shear.x)*
+ image->rows+0.5));
+ bounds.x=MagickDoubleToLong(ceil((double) image->columns+((fabs(shear.x)*
+ image->rows)-image->columns)/2.0-0.5));
+ bounds.y=MagickDoubleToLong(ceil((double) image->rows+((fabs(shear.y)*
+ bounds.width)-image->rows)/2.0-0.5));
/*
Surround image with border.
*/
@@ -1769,9 +1770,9 @@
bounds.height=(size_t) floor(fabs((double) bounds.width*shear.y)+height+0.5);
shear_width=(size_t) floor(fabs((double) bounds.height*shear.x)+
bounds.width+0.5);
- bounds.x=(ssize_t) floor((double) ((shear_width > bounds.width) ? width :
- bounds.width-shear_width+2)/2.0+0.5);
- bounds.y=(ssize_t) floor(((double) bounds.height-height+2)/2.0+0.5);
+ bounds.x=MagickDoubleToLong(floor((double) ((shear_width > bounds.width) ?
+ width : bounds.width-shear_width+2)/2.0+0.5));
+ bounds.y=MagickDoubleToLong(floor(((double) bounds.height-height+2)/2.0+0.5));
/*
Surround image with a border.
*/
diff --git a/MagickCore/visual-effects.c b/MagickCore/visual-effects.c
index e8b13aa..517f24e 100644
--- a/MagickCore/visual-effects.c
+++ b/MagickCore/visual-effects.c
@@ -1437,8 +1437,8 @@
*/
depth--;
attenuate++;
- x_mid=(ssize_t) ceil((segment->x1+segment->x2)/2-0.5);
- y_mid=(ssize_t) ceil((segment->y1+segment->y2)/2-0.5);
+ x_mid=MagickDoubleToLong(ceil((segment->x1+segment->x2)/2-0.5));
+ y_mid=MagickDoubleToLong(ceil((segment->y1+segment->y2)/2-0.5));
local_info=(*segment);
local_info.x2=(double) x_mid;
local_info.y2=(double) y_mid;
@@ -1461,8 +1461,8 @@
&local_info,attenuate,depth,exception);
return(status == 0 ? MagickFalse : MagickTrue);
}
- x_mid=(ssize_t) ceil((segment->x1+segment->x2)/2-0.5);
- y_mid=(ssize_t) ceil((segment->y1+segment->y2)/2-0.5);
+ x_mid=MagickDoubleToLong(ceil((segment->x1+segment->x2)/2-0.5));
+ y_mid=MagickDoubleToLong(ceil((segment->y1+segment->y2)/2-0.5));
if ((fabs(segment->x1-x_mid) < MagickEpsilon) &&
(fabs(segment->x2-x_mid) < MagickEpsilon) &&
(fabs(segment->y1-y_mid) < MagickEpsilon) &&
@@ -1479,11 +1479,11 @@
/*
Left pixel.
*/
- x=(ssize_t) ceil(segment->x1-0.5);
- u=GetCacheViewVirtualPixels(u_view,x,(ssize_t) ceil(segment->y1-0.5),1,1,
- exception);
- v=GetCacheViewVirtualPixels(v_view,x,(ssize_t) ceil(segment->y2-0.5),1,1,
- exception);
+ x=MagickDoubleToLong(ceil(segment->x1-0.5));
+ u=GetCacheViewVirtualPixels(u_view,x,MagickDoubleToLong(ceil(
+ segment->y1-0.5)),1,1,exception);
+ v=GetCacheViewVirtualPixels(v_view,x,MagickDoubleToLong(ceil(
+ segment->y2-0.5)),1,1,exception);
q=QueueCacheViewAuthenticPixels(image_view,x,y_mid,1,1,exception);
if ((u == (const Quantum *) NULL) || (v == (const Quantum *) NULL) ||
(q == (Quantum *) NULL))
@@ -1502,11 +1502,11 @@
/*
Right pixel.
*/
- x=(ssize_t) ceil(segment->x2-0.5);
- u=GetCacheViewVirtualPixels(u_view,x,(ssize_t) ceil(segment->y1-0.5),
- 1,1,exception);
- v=GetCacheViewVirtualPixels(v_view,x,(ssize_t) ceil(segment->y2-0.5),
- 1,1,exception);
+ x=MagickDoubleToLong(ceil(segment->x2-0.5));
+ u=GetCacheViewVirtualPixels(u_view,x,MagickDoubleToLong(ceil(
+ segment->y1-0.5)),1,1,exception);
+ v=GetCacheViewVirtualPixels(v_view,x,MagickDoubleToLong(ceil(
+ segment->y2-0.5)),1,1,exception);
q=QueueCacheViewAuthenticPixels(image_view,x,y_mid,1,1,exception);
if ((u == (const Quantum *) NULL) || (v == (const Quantum *) NULL) ||
(q == (Quantum *) NULL))
@@ -1531,11 +1531,11 @@
/*
Bottom pixel.
*/
- y=(ssize_t) ceil(segment->y2-0.5);
- u=GetCacheViewVirtualPixels(u_view,(ssize_t) ceil(segment->x1-0.5),y,
- 1,1,exception);
- v=GetCacheViewVirtualPixels(v_view,(ssize_t) ceil(segment->x2-0.5),y,
- 1,1,exception);
+ y=MagickDoubleToLong(ceil(segment->y2-0.5));
+ u=GetCacheViewVirtualPixels(u_view,MagickDoubleToLong(ceil(
+ segment->x1-0.5)),y,1,1,exception);
+ v=GetCacheViewVirtualPixels(v_view,MagickDoubleToLong(ceil(
+ segment->x2-0.5)),y,1,1,exception);
q=QueueCacheViewAuthenticPixels(image_view,x_mid,y,1,1,exception);
if ((u == (const Quantum *) NULL) || (v == (const Quantum *) NULL) ||
(q == (Quantum *) NULL))
@@ -1555,11 +1555,11 @@
/*
Top pixel.
*/
- y=(ssize_t) ceil(segment->y1-0.5);
- u=GetCacheViewVirtualPixels(u_view,(ssize_t) ceil(segment->x1-0.5),y,
- 1,1,exception);
- v=GetCacheViewVirtualPixels(v_view,(ssize_t) ceil(segment->x2-0.5),y,
- 1,1,exception);
+ y=MagickDoubleToLong(ceil(segment->y1-0.5));
+ u=GetCacheViewVirtualPixels(u_view,MagickDoubleToLong(ceil(
+ segment->x1-0.5)),y,1,1,exception);
+ v=GetCacheViewVirtualPixels(v_view,MagickDoubleToLong(ceil(
+ segment->x2-0.5)),y,1,1,exception);
q=QueueCacheViewAuthenticPixels(image_view,x_mid,y,1,1,exception);
if ((u == (const Quantum *) NULL) || (v == (const Quantum *) NULL) ||
(q == (Quantum *) NULL))
@@ -1581,11 +1581,11 @@
/*
Middle pixel.
*/
- x=(ssize_t) ceil(segment->x1-0.5);
- y=(ssize_t) ceil(segment->y1-0.5);
+ x=MagickDoubleToLong(ceil(segment->x1-0.5));
+ y=MagickDoubleToLong(ceil(segment->y1-0.5));
u=GetCacheViewVirtualPixels(u_view,x,y,1,1,exception);
- x=(ssize_t) ceil(segment->x2-0.5);
- y=(ssize_t) ceil(segment->y2-0.5);
+ x=MagickDoubleToLong(ceil(segment->x2-0.5));
+ y=MagickDoubleToLong(ceil(segment->y2-0.5));
v=GetCacheViewVirtualPixels(v_view,x,y,1,1,exception);
q=QueueCacheViewAuthenticPixels(image_view,x_mid,y_mid,1,1,exception);
if ((u == (const Quantum *) NULL) || (v == (const Quantum *) NULL) ||