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

index 6db7a4a75bdd49a6a5508d6177f9fb0ca98ecd50..d06cabc49702ada423611e7d354ed47e413372b2 100644 (file)
@@ -169,11 +169,12 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info,
         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))
+        if ((height >= image->rows) || (image_info->pointsize != 0.0))
           break;
       }
+      draw_info->pointsize/=2.0;
+      width=(size_t) floor(metrics.width+draw_info->stroke_width+0.5);
       image->columns=width;
     }
   if (image->rows == 0)
@@ -195,13 +196,12 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info,
         if ((width >= image->columns) || (image_info->pointsize != 0.0))
           break;
       }
+      draw_info->pointsize/=2.0;
+      status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
       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)
-    i=FormatMagickCaption(image,draw_info,MagickTrue,&metrics,&caption,
-      exception);
-  else
+  if (fabs(image_info->pointsize) < MagickEpsilon)
     {
       double
         high,
@@ -269,9 +269,10 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info,
         draw_info->pointsize--;
       }
       draw_info->pointsize--;
-      i=FormatMagickCaption(image,draw_info,MagickFalse,&metrics,&caption,
-        exception);
     }
+  (void) CloneString(&draw_info->text,caption);
+  i=FormatMagickCaption(image,draw_info,MagickFalse,&metrics,&caption,
+    exception);
   if (SetImageBackgroundColor(image,exception) == MagickFalse)
     {
       image=DestroyImageList(image);
index a0860a8503b0d6e98c6ca530ac5d8b0f3f5f7961..68d0ad361ba59f9941f78e00b5a262af49629814 100644 (file)
@@ -131,27 +131,8 @@ static Image *ReadLABELImage(const ImageInfo *image_info,
   label=GetImageProperty(image,"label",exception);
   draw_info=CloneDrawInfo(image_info,(DrawInfo *) NULL);
   draw_info->text=ConstantString(label);
-  status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
-  if (image->columns == 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;
-      image->columns=(size_t) floor(metrics.width+draw_info->stroke_width+0.5);
-    }
-  if (image->rows == 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);
-      image->rows=(size_t) floor(metrics.height+draw_info->stroke_width+0.5);
-    }
-  if (image_info->pointsize == 0.0)
+  if (((image->columns == 0) || (image->rows == 0)) &&
+      (fabs(image_info->pointsize) < MagickEpsilon))
     {
       double
         high,
@@ -169,9 +150,11 @@ 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 (((image->columns != 0) && (width >= image->columns)) ||
+            ((image->rows != 0) && (height >= image->rows)))
           break;
-        if ((width >= (image->columns << 1)) || (height >= (image->rows << 1)))
+        if (((image->columns != 0) && (width >= (2*image->columns))) ||
+            ((image->rows != 0) && (height >= (2*image->rows))))
           break;
       }
       high=draw_info->pointsize/2.0;
@@ -185,7 +168,8 @@ 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 (((image->columns != 0) && (width < image->columns)) ||
+            ((image->rows != 0) && (height < image->rows)))
           low=draw_info->pointsize+1.0;
         else
           high=draw_info->pointsize-1.0;
@@ -199,7 +183,8 @@ 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 (((image->columns != 0) && (width < image->columns)) ||
+            ((image->rows != 0) && (height < image->rows)))
           break;
         draw_info->pointsize--;
       }
@@ -211,6 +196,15 @@ static Image *ReadLABELImage(const ImageInfo *image_info,
       image=DestroyImageList(image);
       return((Image *) NULL);
     }
+  if (image->columns == 0)
+    image->columns=(size_t) (metrics.width+draw_info->stroke_width+0.5);
+  if (image->columns == 0)
+    image->columns=(size_t) (draw_info->pointsize+draw_info->stroke_width+0.5);
+  if (image->rows == 0)
+    image->rows=(size_t) (metrics.ascent-metrics.descent+
+      draw_info->stroke_width+0.5);
+  if (image->rows == 0)
+    image->rows=(size_t) (draw_info->pointsize+draw_info->stroke_width+0.5);
   if (draw_info->gravity == UndefinedGravity)
     {
       (void) FormatLocaleString(geometry,MaxTextExtent,"%+g%+g",