From: cristy Date: Thu, 14 Mar 2013 14:24:14 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~4086 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=54ec42737fdec7527afa06ca95be82c8ca0bd866;p=imagemagick --- diff --git a/coders/caption.c b/coders/caption.c index b6a00318d..7c3429d2a 100644 --- a/coders/caption.c +++ b/coders/caption.c @@ -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) && diff --git a/coders/label.c b/coders/label.c index 672d80728..d7d1e4b01 100644 --- a/coders/label.c +++ b/coders/label.c @@ -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;