%
*/
-static size_t SmushXOffset(const Image *smush_image,const Image *images,
- ExceptionInfo *exception)
+static ssize_t SmushXOffset(const Image *smush_image,const Image *images,
+ const ssize_t offset,ExceptionInfo *exception)
{
CacheView
*left_view,
right_geometry;
register ssize_t
+ i,
y;
- size_t
- minimum_offset;
-
ssize_t
- offset,
+ minimum_offset,
x;
if (images->previous == (Image *) NULL)
SetGeometry(smush_image,&left_geometry);
GravityAdjustGeometry(left_image->columns,left_image->rows,
left_image->gravity,&left_geometry);
- minimum_offset=right_image->columns;
+ minimum_offset=(ssize_t) right_image->columns;
left_view=AcquireCacheView(left_image);
right_view=AcquireCacheView(right_image);
for (y=0; y < (ssize_t) smush_image->rows; y++)
if (pixel.opacity != TransparentOpacity)
break;
}
- offset=(ssize_t) left_image->columns-x-1;
+ i=(ssize_t) left_image->columns-x-1;
for (x=0; x < (ssize_t) right_image->columns; x++)
{
status=GetOneCacheViewVirtualPixel(right_view,x,right_geometry.y+y,&pixel,
if (pixel.opacity != TransparentOpacity)
break;
}
- if ((size_t) (x+offset) < minimum_offset)
- minimum_offset=(size_t) (x+offset);
+ if ((x+i) < minimum_offset)
+ minimum_offset=x+i;
}
right_view=DestroyCacheView(right_view);
left_view=DestroyCacheView(left_view);
- return(minimum_offset);
+ return(minimum_offset-offset);
}
-static size_t SmushYOffset(const Image *smush_image,const Image *images,
- ExceptionInfo *exception)
+static ssize_t SmushYOffset(const Image *smush_image,const Image *images,
+ const ssize_t offset,ExceptionInfo *exception)
{
CacheView
*bottom_view,
top_geometry;
register ssize_t
+ i,
x;
- size_t
- minimum_offset;
-
ssize_t
- offset,
+ minimum_offset,
y;
if (images->previous == (Image *) NULL)
SetGeometry(smush_image,&top_geometry);
GravityAdjustGeometry(top_image->columns,top_image->rows,top_image->gravity,
&top_geometry);
- minimum_offset=bottom_image->rows;
+ minimum_offset=(ssize_t) bottom_image->rows;
top_view=AcquireCacheView(top_image);
bottom_view=AcquireCacheView(bottom_image);
for (x=0; x < (ssize_t) smush_image->columns; x++)
if (pixel.opacity != TransparentOpacity)
break;
}
- offset=(ssize_t) top_image->rows-y-1;
+ i=(ssize_t) top_image->rows-y-1;
for (y=0; y < (ssize_t) bottom_image->rows; y++)
{
status=GetOneCacheViewVirtualPixel(bottom_view,bottom_geometry.x+x,y,
if (pixel.opacity != TransparentOpacity)
break;
}
- if ((size_t) (y+offset) < minimum_offset)
- minimum_offset=(size_t) (y+offset);
+ if ((y+i) < minimum_offset)
+ minimum_offset=y+i;
}
bottom_view=DestroyCacheView(bottom_view);
top_view=DestroyCacheView(top_view);
- return(minimum_offset);
+ return(minimum_offset-offset);
}
MagickExport Image *SmushImages(const Image *images,
number_images=1;
width=image->columns;
height=image->rows;
- if (stack != MagickFalse)
- width+=GetImageListLength(image)*offset;
- else
- height+=GetImageListLength(image)*offset;
next=GetNextImageInList(image);
for ( ; next != (Image *) NULL; next=GetNextImageInList(next))
{
if (next->columns > width)
width=next->columns;
height+=next->rows;
+ if (next->previous != (Image *) NULL)
+ height+=offset;
continue;
}
width+=next->columns;
+ if (next->previous != (Image *) NULL)
+ width+=offset;
if (next->rows > height)
height=next->rows;
}
if (stack != MagickFalse)
{
x_offset-=geometry.x;
- y_offset-=SmushYOffset(smush_image,image,exception)-offset;
+ y_offset-=SmushYOffset(smush_image,image,offset,exception);
}
else
{
- x_offset-=SmushXOffset(smush_image,image,exception)-offset;
+ x_offset-=SmushXOffset(smush_image,image,offset,exception);
y_offset-=geometry.y;
}
status=CompositeImage(smush_image,OverCompositeOp,image,x_offset,y_offset);
}
image=GetNextImageInList(image);
}
- smush_view=DestroyCacheView(smush_view);
- if (stack != MagickFalse)
- status=SetImageExtent(smush_image,smush_image->columns,(size_t) y_offset);
+ if (stack == MagickFalse)
+ smush_image->columns=(size_t) x_offset;
else
- status=SetImageExtent(smush_image,(size_t) x_offset,smush_image->rows);
+ smush_image->rows=(size_t) y_offset;
+ smush_view=DestroyCacheView(smush_view);
if (status == MagickFalse)
smush_image=DestroyImage(smush_image);
return(smush_image);