From d6d3b0d9471405f7d42f9e51aa19e21ebfd59dcc Mon Sep 17 00:00:00 2001 From: cristy Date: Thu, 1 Jan 2015 17:46:31 +0000 Subject: [PATCH] Calling SetImageExtent() in a PICT loop is inefficient. --- coders/pict.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/coders/pict.c b/coders/pict.c index 38417d129..dafac52f4 100644 --- a/coders/pict.c +++ b/coders/pict.c @@ -901,6 +901,15 @@ static Image *ReadPICTImage(const ImageInfo *image_info, image->resolution.x=DefaultResolution; image->resolution.y=DefaultResolution; image->units=UndefinedResolution; + if ((image_info->ping != MagickFalse) && (image_info->number_scenes != 0)) + if (image->scene >= (image_info->scene+image_info->number_scenes-1)) + { + (void) CloseBlob(image); + return(GetFirstImageInList(image)); + } + status=SetImageExtent(image,image->columns,image->rows,exception); + if (status == MagickFalse) + return(DestroyImageList(image)); /* Interpret PICT opcodes. */ @@ -910,9 +919,6 @@ static Image *ReadPICTImage(const ImageInfo *image_info, if ((image_info->ping != MagickFalse) && (image_info->number_scenes != 0)) if (image->scene >= (image_info->scene+image_info->number_scenes-1)) break; - status=SetImageExtent(image,image->columns,image->rows,exception); - if (status == MagickFalse) - return(DestroyImageList(image)); if ((version == 1) || ((TellBlob(image) % 2) != 0)) code=ReadBlobByte(image); if (version == 2) -- 2.50.1