]> granicus.if.org Git - imagemagick/commitdiff
Calling SetImageExtent() in a PICT loop is inefficient.
authorcristy <urban-warrior@git.imagemagick.org>
Thu, 1 Jan 2015 17:46:31 +0000 (17:46 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Thu, 1 Jan 2015 17:46:31 +0000 (17:46 +0000)
coders/pict.c

index 38417d1290d9b51052ee07783dc096481edee4c7..dafac52f45010285cf3b47a53f02ee4f37cfb8a3 100644 (file)
@@ -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)