]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Thu, 14 Mar 2013 14:24:14 +0000 (14:24 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Thu, 14 Mar 2013 14:24:14 +0000 (14:24 +0000)
coders/caption.c
coders/label.c

index b6a00318ddca7e277bb4fbee4eccc5cace6fea4a..7c3429d2a7e75b4f5cf396b2b490f891765ab342 100644 (file)
@@ -95,7 +95,8 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info,
   char
     *caption,
     geometry[MaxTextExtent],
-    *property;
+    *property,
+    *text;
 
   const char
     *gravity,
@@ -153,20 +154,23 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info,
   if (gravity != (char *) NULL)
     draw_info->gravity=(GravityType) ParseCommandOption(MagickGravityOptions,
       MagickFalse,gravity);
-  status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
   if (image->columns == 0)
     {
       for ( ; ; draw_info->pointsize*=2.0)
       {
+        text=AcquireString(caption);
+        i=FormatMagickCaption(image,draw_info,MagickTrue,&metrics,&text,
+          exception);
+        (void) CloneString(&draw_info->text,text);
+        text=DestroyString(text);
         (void) FormatLocaleString(geometry,MaxTextExtent,"%+g%+g",
           -metrics.bounds.x1,metrics.ascent);
         if (draw_info->gravity == UndefinedGravity)
           (void) CloneString(&draw_info->geometry,geometry);
         status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
-        (void) status;
         width=(size_t) floor(metrics.width+draw_info->stroke_width+0.5);
         height=(size_t) floor(metrics.height+draw_info->stroke_width+0.5);
-        if ((height > image->rows) || (image_info->pointsize != 0.0))
+        if ((width >= image->columns) || (image_info->pointsize != 0.0))
           break;
       }
       image->columns=width;
@@ -175,6 +179,11 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info,
     {
       for ( ; ; draw_info->pointsize*=2.0)
       {
+        text=AcquireString(caption);
+        i=FormatMagickCaption(image,draw_info,MagickTrue,&metrics,&text,
+          exception);
+        (void) CloneString(&draw_info->text,text);
+        text=DestroyString(text);
         (void) FormatLocaleString(geometry,MaxTextExtent,"%+g%+g",
           -metrics.bounds.x1,metrics.ascent);
         if (draw_info->gravity == UndefinedGravity)
@@ -182,10 +191,11 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info,
         status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
         width=(size_t) floor(metrics.width+draw_info->stroke_width+0.5);
         height=(size_t) floor(metrics.height+draw_info->stroke_width+0.5);
-        if ((width > image->columns) || (image_info->pointsize != 0.0))
+        if ((width >= image->columns) || (image_info->pointsize != 0.0))
           break;
       }
-      image->rows=height;
+      image->rows=(size_t) ((i+1)*(metrics.ascent-metrics.descent+
+        draw_info->interline_spacing+draw_info->stroke_width)+0.5);
     }
   if (image_info->pointsize == 0.0)
     {
@@ -204,7 +214,6 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info,
         text=AcquireString(caption);
         i=FormatMagickCaption(image,draw_info,MagickTrue,&metrics,&text,
           exception);
-        (void) i;
         (void) CloneString(&draw_info->text,text);
         text=DestroyString(text);
         (void) FormatLocaleString(geometry,MaxTextExtent,"%+g%+g",
@@ -214,9 +223,9 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info,
         status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
         width=(size_t) floor(metrics.width+draw_info->stroke_width+0.5);
         height=(size_t) floor(metrics.height+draw_info->stroke_width+0.5);
-        if ((width > image->columns) && (height > image->rows))
+        if ((width >= image->columns) && (height >= image->rows))
           break;
-        if ((width > (image->columns << 1)) || (height > (image->rows << 1)))
+        if ((width >= (image->columns << 1)) || (height >= (image->rows << 1)))
           break;
       }
       high=draw_info->pointsize/2.0;
@@ -268,6 +277,7 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info,
   /*
     Draw caption.
   */
+  i=FormatMagickCaption(image,draw_info,MagickTrue,&metrics,&caption,exception);
   (void) CloneString(&draw_info->text,caption);
   status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
   if ((draw_info->gravity != UndefinedGravity) &&
index 672d80728ea77546c266527c098d8c97d2e1f114..d7d1e4b017672f30ca82322eba639a171fa06658 100644 (file)
@@ -133,36 +133,22 @@ static Image *ReadLABELImage(const ImageInfo *image_info,
   status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
   if (image->columns == 0)
     {
-      for ( ; ; draw_info->pointsize*=2.0)
-      {
-        (void) FormatLocaleString(geometry,MaxTextExtent,"%+g%+g",
-          -metrics.bounds.x1,metrics.ascent);
-        if (draw_info->gravity == UndefinedGravity)
-          (void) CloneString(&draw_info->geometry,geometry);
-        status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
-        (void) status;
-        width=(size_t) floor(metrics.width+draw_info->stroke_width+0.5);
-        height=(size_t) floor(metrics.height+draw_info->stroke_width+0.5);
-        if ((height > image->rows) || (image_info->pointsize != 0.0))
-          break;
-      }
-      image->columns=width;
+      (void) FormatLocaleString(geometry,MaxTextExtent,"%+g%+g",
+        -metrics.bounds.x1,metrics.ascent);
+      if (draw_info->gravity == UndefinedGravity)
+        (void) CloneString(&draw_info->geometry,geometry);
+      status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
+      (void) status;
+      image->columns=(size_t) floor(metrics.width+draw_info->stroke_width+0.5);
     }
   if (image->rows == 0)
     {
-      for ( ; ; draw_info->pointsize*=2.0)
-      {
-        (void) FormatLocaleString(geometry,MaxTextExtent,"%+g%+g",
-          -metrics.bounds.x1,metrics.ascent);
-        if (draw_info->gravity == UndefinedGravity)
-          (void) CloneString(&draw_info->geometry,geometry);
-        status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
-        width=(size_t) floor(metrics.width+draw_info->stroke_width+0.5);
-        height=(size_t) floor(metrics.height+draw_info->stroke_width+0.5);
-        if ((width > image->columns) || (image_info->pointsize != 0.0))
-          break;
-      }
-      image->rows=height;
+      (void) FormatLocaleString(geometry,MaxTextExtent,"%+g%+g",
+        -metrics.bounds.x1,metrics.ascent);
+      if (draw_info->gravity == UndefinedGravity)
+        (void) CloneString(&draw_info->geometry,geometry);
+      status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
+      image->rows=(size_t) floor(metrics.height+draw_info->stroke_width+0.5);
     }
   if (image_info->pointsize == 0.0)
     {
@@ -182,9 +168,9 @@ static Image *ReadLABELImage(const ImageInfo *image_info,
         status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
         width=(size_t) floor(metrics.width+draw_info->stroke_width+0.5);
         height=(size_t) floor(metrics.height+draw_info->stroke_width+0.5);
-        if ((width > image->columns) && (height > image->rows))
+        if ((width >= image->columns) && (height >= image->rows))
           break;
-        if ((width > (image->columns << 1)) || (height > (image->rows << 1)))
+        if ((width >= (image->columns << 1)) || (height >= (image->rows << 1)))
           break;
       }
       high=draw_info->pointsize/2.0;