From 8db9ca45d3b9861f5b18cdc760c8e8f0f157b270 Mon Sep 17 00:00:00 2001 From: cristy Date: Thu, 14 Mar 2013 13:35:37 +0000 Subject: [PATCH] --- coders/caption.c | 73 +++++++++++++++++++++++------------------------- coders/label.c | 71 +++++++++++++++++++++++----------------------- 2 files changed, 70 insertions(+), 74 deletions(-) diff --git a/coders/caption.c b/coders/caption.c index 33081cbd2..b6a00318d 100644 --- a/coders/caption.c +++ b/coders/caption.c @@ -131,8 +131,6 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info, assert(exception != (ExceptionInfo *) NULL); assert(exception->signature == MagickSignature); image=AcquireImage(image_info,exception); - if (image->columns == 0) - ThrowReaderException(OptionError,"MustSpecifyImageSize"); (void) ResetImagePage(image,"0x0+0+0"); /* Format caption. @@ -155,8 +153,41 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info, if (gravity != (char *) NULL) draw_info->gravity=(GravityType) ParseCommandOption(MagickGravityOptions, MagickFalse,gravity); - if (((image->columns != 0) || (image->rows != 0)) && - (image_info->pointsize == 0.0)) + 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; + } + 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; + } + if (image_info->pointsize == 0.0) { char *text; @@ -168,40 +199,6 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info, /* Auto fit text into bounding box. */ - 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) - break; - } - image->columns=width; - } - 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) - break; - } - image->rows=height; - } for ( ; ; draw_info->pointsize*=2.0) { text=AcquireString(caption); diff --git a/coders/label.c b/coders/label.c index 3df2cab71..672d80728 100644 --- a/coders/label.c +++ b/coders/label.c @@ -130,8 +130,41 @@ static Image *ReadLABELImage(const ImageInfo *image_info, label=GetImageProperty(image,"label",exception); draw_info=CloneDrawInfo(image_info,(DrawInfo *) NULL); draw_info->text=ConstantString(label); - if (((image->columns != 0) || (image->rows != 0)) && - (image_info->pointsize == 0.0)) + 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; + } + 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; + } + if (image_info->pointsize == 0.0) { double high, @@ -140,40 +173,6 @@ static Image *ReadLABELImage(const ImageInfo *image_info, /* Auto fit text into bounding box. */ - 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) - break; - } - image->columns=width; - } - 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) - break; - } - image->rows=height; - } for ( ; ; draw_info->pointsize*=2.0) { (void) FormatLocaleString(geometry,MaxTextExtent,"%+g%+g", -- 2.40.0