From 7fcdfd018e859dad93dc6b2e658e83d20de3a19c Mon Sep 17 00:00:00 2001 From: cristy Date: Sun, 20 Nov 2011 03:36:37 +0000 Subject: [PATCH] --- MagickCore/layer.c | 108 ++++++++++++++++++++++++--------------------- 1 file changed, 57 insertions(+), 51 deletions(-) diff --git a/MagickCore/layer.c b/MagickCore/layer.c index b9b6603f5..f0e9bd0a9 100644 --- a/MagickCore/layer.c +++ b/MagickCore/layer.c @@ -428,7 +428,6 @@ MagickExport Image *DisposeImages(const Image *image,ExceptionInfo *exception) (void) CompositeImage(current_image,curr->matte != MagickFalse ? OverCompositeOp : CopyCompositeOp,curr,curr->page.x,curr->page.y, exception); - /* Handle Background dispose: image is displayed for the delay period. */ @@ -1934,28 +1933,31 @@ MagickExport Image *MergeImageLayers(Image *image,const ImageLayerMethod method, case MergeLayer: default: { - next = GetNextImageInList(image); - for ( ; next != (Image *) NULL; next=GetNextImageInList(next)) { - if ( page.x > next->page.x ) { - width += page.x-next->page.x; - page.x = next->page.x; - } - if ( page.y > next->page.y ) { - height += page.y-next->page.y; - page.y = next->page.y; - } - if ( (ssize_t) width < (next->page.x + (ssize_t)next->columns - page.x) ) - width = (size_t) next->page.x + (ssize_t)next->columns - page.x; - if ( (ssize_t) height < (next->page.y + (ssize_t)next->rows - page.y) ) - height = (size_t) next->page.y + (ssize_t)next->rows - page.y; + next=GetNextImageInList(image); + for ( ; next != (Image *) NULL; next=GetNextImageInList(next)) + { + if (page.x > next->page.x) + { + width+=page.x-next->page.x; + page.x=next->page.x; + } + if (page.y > next->page.y) + { + height+=page.y-next->page.y; + page.y=next->page.y; + } + if ((ssize_t) width < (next->page.x+(ssize_t) next->columns-page.x)) + width=(size_t) next->page.x+(ssize_t)next->columns-page.x; + if ((ssize_t) height < (next->page.y+(ssize_t) next->rows-page.y)) + height=(size_t) next->page.y+(ssize_t) next->rows-page.y; } break; } case FlattenLayer: { - if ( page.width > 0 ) + if (page.width > 0) width=page.width; - if ( page.height > 0 ) + if (page.height > 0) height=page.height; page.x=0; page.y=0; @@ -1963,19 +1965,21 @@ MagickExport Image *MergeImageLayers(Image *image,const ImageLayerMethod method, } case MosaicLayer: { - if ( page.width > 0 ) + if (page.width > 0) width=page.width; - if ( page.height > 0 ) + if (page.height > 0) height=page.height; - for (next=image; next != (Image *) NULL; next=GetNextImageInList(next)) { - if (method == MosaicLayer) { - page.x=next->page.x; - page.y=next->page.y; - if ( (ssize_t) width < (next->page.x + (ssize_t)next->columns) ) - width = (size_t) next->page.x + next->columns; - if ( (ssize_t) height < (next->page.y + (ssize_t)next->rows) ) - height = (size_t) next->page.y + next->rows; - } + for (next=image; next != (Image *) NULL; next=GetNextImageInList(next)) + { + if (method == MosaicLayer) + { + page.x=next->page.x; + page.y=next->page.y; + if ((ssize_t) width < (next->page.x+(ssize_t) next->columns)) + width=(size_t) next->page.x+next->columns; + if ((ssize_t) height < (next->page.y+(ssize_t) next->rows)) + height=(size_t) next->page.y+next->rows; + } } page.width=width; page.height=height; @@ -1984,32 +1988,33 @@ MagickExport Image *MergeImageLayers(Image *image,const ImageLayerMethod method, } break; } - /* set virtual canvas size if not defined */ - if ( page.width == 0 ) - page.width = (page.x < 0) ? width : width+page.x; - if ( page.height == 0 ) - page.height = (page.y < 0) ? height : height+page.y; - /* - Handle "TrimBoundsLayer" method separately to normal 'layer merge' + Set virtual canvas size if not defined. + */ + if (page.width == 0) + page.width=page.x < 0 ? width : width+page.x; + if (page.height == 0) + page.height=page.y < 0 ? height : height+page.y; + /* + Handle "TrimBoundsLayer" method separately to normal 'layer merge'. */ - if ( method == TrimBoundsLayer ) { - number_images=GetImageListLength(image); - for (scene=0; scene < (ssize_t) number_images; scene++) + if (method == TrimBoundsLayer) { - image->page.x -= page.x; - image->page.y -= page.y; - image->page.width = width; - image->page.height = height; - proceed=SetImageProgress(image,MergeLayersTag,(MagickOffsetType) scene, - number_images); - if (proceed == MagickFalse) - break; - image=GetNextImageInList(image); + number_images=GetImageListLength(image); + for (scene=0; scene < (ssize_t) number_images; scene++) + { + image->page.x-=page.x; + image->page.y-=page.y; + image->page.width=width; + image->page.height=height; + proceed=SetImageProgress(image,MergeLayersTag,(MagickOffsetType) scene, + number_images); + if (proceed == MagickFalse) + break; + image=GetNextImageInList(image); + } + return((Image *) NULL); } - return((Image *) NULL); - } - /* Create canvas size of width and height, and background color. */ @@ -2019,7 +2024,6 @@ MagickExport Image *MergeImageLayers(Image *image,const ImageLayerMethod method, (void) SetImageBackgroundColor(canvas,exception); canvas->page=page; canvas->dispose=UndefinedDispose; - /* Compose images onto canvas, with progress monitor */ @@ -2033,6 +2037,8 @@ MagickExport Image *MergeImageLayers(Image *image,const ImageLayerMethod method, if (proceed == MagickFalse) break; image=GetNextImageInList(image); + if (image == (Image *) NULL) + break; } return(canvas); } -- 2.40.0