]> granicus.if.org Git - imagemagick/commitdiff
Not all fonts support outlines for printable characters such as `A'
authorCristy <urban-warrior@imagemagick.org>
Fri, 19 Oct 2018 00:23:00 +0000 (20:23 -0400)
committerCristy <urban-warrior@imagemagick.org>
Fri, 19 Oct 2018 00:23:00 +0000 (20:23 -0400)
MagickCore/annotate.c

index 187aaa909e89b38a4ec7ac158425a2cfe4866bbd..78a29454734e2e0f5c858cfb33a78eda2aa11683 100644 (file)
@@ -1559,6 +1559,9 @@ static MagickBooleanType RenderFreetype(Image *image,const DrawInfo *draw_info,
   code=0;
   for (i=0; i < (ssize_t) length; i++)
   {
+    FT_Outline
+      outline;
+
     /*
       Render UTF-8 sequence.
     */
@@ -1576,8 +1579,8 @@ static MagickBooleanType RenderFreetype(Image *image,const DrawInfo *draw_info,
     ft_status=FT_Get_Glyph(face->glyph,&glyph.image);
     if (ft_status != 0)
       continue;
-    ft_status=FT_Outline_Get_BBox(&((FT_OutlineGlyph) glyph.image)->outline,
-      &bounds);
+    outline=((FT_OutlineGlyph) glyph.image)->outline;
+    ft_status=FT_Outline_Get_BBox(&outline,&bounds);
     if (ft_status != 0)
       continue;
     if ((p == draw_info->text) || (bounds.xMin < metrics->bounds.x1))
@@ -1601,8 +1604,9 @@ static MagickBooleanType RenderFreetype(Image *image,const DrawInfo *draw_info,
         */
         annotate_info->affine.tx=glyph.origin.x/64.0;
         annotate_info->affine.ty=(-glyph.origin.y/64.0);
-        (void) FT_Outline_Decompose(&((FT_OutlineGlyph) glyph.image)->outline,
-          &OutlineMethods,annotate_info);
+        if ((outline.n_contours > 0) && (outline.n_points > 0))
+          ft_status=FT_Outline_Decompose(&outline,&OutlineMethods,
+            annotate_info);
       }
     FT_Vector_Transform(&glyph.origin,&affine);
     (void) FT_Glyph_Transform(glyph.image,&affine,&glyph.origin);