]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Mon, 29 Aug 2011 00:36:28 +0000 (00:36 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Mon, 29 Aug 2011 00:36:28 +0000 (00:36 +0000)
20 files changed:
Magick++/lib/Image.cpp
MagickCore/annotate.c
MagickCore/annotate.h
MagickCore/display.c
MagickCore/draw.c
MagickCore/effect.c
MagickCore/fx.c
MagickCore/fx.h
MagickCore/montage.c
MagickWand/magick-image.c
MagickWand/magick-wand.c
MagickWand/mogrify.c
PerlMagick/Magick.xs
PerlMagick/t/Generic.ttf [new file with mode: 0644]
coders/caption.c
coders/label.c
coders/msl.c
coders/plasma.c
coders/svg.c
coders/txt.c

index 9f90d632521bdb4c40dfb88620b681353ac21166..56665e5a87bd9431a8a3daa653e598ed4c004a0d 100644 (file)
@@ -445,14 +445,17 @@ void Magick::Image::annotate ( const std::string &text_,
           +current.tx;
     }
 
-  AnnotateImage( image(), drawInfo );
+  ExceptionInfo exceptionInfo;
+  GetExceptionInfo( &exceptionInfo );
+  AnnotateImage( image(), drawInfo, &exceptionInfo );
 
   // Restore original values
   drawInfo->affine = oaffine;
   drawInfo->text = 0;
   drawInfo->geometry = 0;
 
-  throwImageException();
+  throwException( exceptionInfo );
+  (void) DestroyExceptionInfo( &exceptionInfo );
 }
 // Annotate with text (bounding area is entire image) and placement gravity.
 void Magick::Image::annotate ( const std::string &text_,
@@ -467,12 +470,15 @@ void Magick::Image::annotate ( const std::string &text_,
 
   drawInfo->gravity = gravity_;
 
-  AnnotateImage( image(), drawInfo );
+  ExceptionInfo exceptionInfo;
+  GetExceptionInfo( &exceptionInfo );
+  AnnotateImage( image(), drawInfo, &exceptionInfo );
 
   drawInfo->gravity = NorthWestGravity;
   drawInfo->text = 0;
 
-  throwImageException();
+  throwException( exceptionInfo );
+  (void) DestroyExceptionInfo( &exceptionInfo );
 }
 
 // Blur image
@@ -1986,9 +1992,12 @@ void Magick::Image::sigmoidalContrast ( const size_t sharpen_, const double cont
 // film to light during the development process)
 void Magick::Image::solarize ( const double factor_ )
 {
+  ExceptionInfo exceptionInfo;
+  GetExceptionInfo( &exceptionInfo );
   modifyImage();
-  SolarizeImage ( image(), factor_ );
-  throwImageException();
+  SolarizeImage ( image(), factor_, &exceptionInfo );
+  throwException( exceptionInfo );
+  (void) DestroyExceptionInfo( &exceptionInfo );
 }
 
 // Sparse color image, given a set of coordinates, interpolates the colors
@@ -3096,8 +3105,12 @@ void Magick::Image::fontTypeMetrics( const std::string &text_,
 {
   DrawInfo *drawInfo = options()->drawInfo();
   drawInfo->text = const_cast<char *>(text_.c_str());
-  GetTypeMetrics( image(), drawInfo, &(metrics->_typeMetric) );
+  ExceptionInfo exceptionInfo;
+  GetExceptionInfo( &exceptionInfo );
+  GetTypeMetrics( image(), drawInfo, &(metrics->_typeMetric), &exceptionInfo );
   drawInfo->text = 0;
+  throwException( exceptionInfo );
+  (void) DestroyExceptionInfo( &exceptionInfo );
 }
 
 // Image format string
index 4fe8beaf1f0d1dbc1bf42ce2bee0b2fd6af739db..1dcde88e46c8ad407d6c44ec3b70e0521653461f 100644 (file)
@@ -112,11 +112,14 @@ static SemaphoreInfo
   Forward declarations.
 */
 static MagickBooleanType
-  RenderType(Image *,const DrawInfo *,const PointInfo *,TypeMetric *),
-  RenderPostscript(Image *,const DrawInfo *,const PointInfo *,TypeMetric *),
+  RenderType(Image *,const DrawInfo *,const PointInfo *,TypeMetric *,
+    ExceptionInfo *),
+  RenderPostscript(Image *,const DrawInfo *,const PointInfo *,TypeMetric *,
+    ExceptionInfo *),
   RenderFreetype(Image *,const DrawInfo *,const char *,const PointInfo *,
-    TypeMetric *),
-  RenderX11(Image *,const DrawInfo *,const PointInfo *,TypeMetric *);
+    TypeMetric *,ExceptionInfo *),
+  RenderX11(Image *,const DrawInfo *,const PointInfo *,TypeMetric *,
+    ExceptionInfo *);
 \f
 /*
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -206,7 +209,8 @@ MagickExport void AnnotateComponentTerminus(void)
 %
 %  The format of the AnnotateImage method is:
 %
-%      MagickBooleanType AnnotateImage(Image *image,DrawInfo *draw_info)
+%      MagickBooleanType AnnotateImage(Image *image,DrawInfo *draw_info,
+%        ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
@@ -214,9 +218,11 @@ MagickExport void AnnotateComponentTerminus(void)
 %
 %    o draw_info: the draw info.
 %
+%    o exception: return any errors or warnings in this structure.
+%
 */
 MagickExport MagickBooleanType AnnotateImage(Image *image,
-  const DrawInfo *draw_info)
+  const DrawInfo *draw_info,ExceptionInfo *exception)
 {
   char
     primitive[MaxTextExtent],
@@ -276,10 +282,10 @@ MagickExport MagickBooleanType AnnotateImage(Image *image,
   if (annotate_info->geometry != (char *) NULL)
     {
       (void) ParsePageGeometry(image,annotate_info->geometry,&geometry,
-        &image->exception);
+        exception);
       (void) ParseGeometry(annotate_info->geometry,&geometry_info);
     }
-  if (SetImageStorageClass(image,DirectClass,&image->exception) == MagickFalse)
+  if (SetImageStorageClass(image,DirectClass,exception) == MagickFalse)
     return(MagickFalse);
   status=MagickTrue;
   for (i=0; textlist[i] != (char *) NULL; i++)
@@ -290,7 +296,7 @@ MagickExport MagickBooleanType AnnotateImage(Image *image,
     annotate_info->affine.tx=geometry_info.xi-image->page.x;
     annotate_info->affine.ty=geometry_info.psi-image->page.y;
     (void) CloneString(&annotate->text,textlist[i]);
-    (void) GetTypeMetrics(image,annotate,&metrics);
+    (void) GetTypeMetrics(image,annotate,&metrics,exception);
     height=(ssize_t) (metrics.ascent-metrics.descent+
       draw_info->interline_spacing+0.5);
     switch (annotate->gravity)
@@ -479,7 +485,7 @@ MagickExport MagickBooleanType AnnotateImage(Image *image,
     /*
       Annotate image with text.
     */
-    status=RenderType(image,annotate,&offset,&metrics);
+    status=RenderType(image,annotate,&offset,&metrics,exception);
     if (status == MagickFalse)
       break;
     if (annotate->decorate == LineThroughDecoration)
@@ -518,7 +524,8 @@ MagickExport MagickBooleanType AnnotateImage(Image *image,
 %  The format of the FormatMagickCaption method is:
 %
 %      ssize_t FormatMagickCaption(Image *image,DrawInfo *draw_info,
-%        const MagickBooleanType split,TypeMetric *metrics,char **caption)
+%        const MagickBooleanType split,TypeMetric *metrics,char **caption,
+%        ExceptionInfo *exception)
 %
 %  A description of each parameter follows.
 %
@@ -532,9 +539,12 @@ MagickExport MagickBooleanType AnnotateImage(Image *image,
 %
 %    o caption: the caption.
 %
+%    o exception: return any errors or warnings in this structure.
+%
 */
 MagickExport ssize_t FormatMagickCaption(Image *image,DrawInfo *draw_info,
-  const MagickBooleanType split,TypeMetric *metrics,char **caption)
+  const MagickBooleanType split,TypeMetric *metrics,char **caption,
+  ExceptionInfo *exception)
 {
   MagickBooleanType
     status;
@@ -564,7 +574,7 @@ MagickExport ssize_t FormatMagickCaption(Image *image,DrawInfo *draw_info,
     for (i=0; i < (ssize_t) GetUTFOctets(p); i++)
       *q++=(*(p+i));
     *q='\0';
-    status=GetTypeMetrics(image,draw_info,metrics);
+    status=GetTypeMetrics(image,draw_info,metrics,exception);
     if (status == MagickFalse)
       break;
     width=(size_t) floor(metrics->width+0.5);
@@ -639,7 +649,7 @@ MagickExport ssize_t FormatMagickCaption(Image *image,DrawInfo *draw_info,
 %  The format of the GetMultilineTypeMetrics method is:
 %
 %      MagickBooleanType GetMultilineTypeMetrics(Image *image,
-%        const DrawInfo *draw_info,TypeMetric *metrics)
+%        const DrawInfo *draw_info,TypeMetric *metrics,ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
@@ -649,9 +659,11 @@ MagickExport ssize_t FormatMagickCaption(Image *image,DrawInfo *draw_info,
 %
 %    o metrics: Return the font metrics in this structure.
 %
+%    o exception: return any errors or warnings in this structure.
+%
 */
 MagickExport MagickBooleanType GetMultilineTypeMetrics(Image *image,
-  const DrawInfo *draw_info,TypeMetric *metrics)
+  const DrawInfo *draw_info,TypeMetric *metrics,ExceptionInfo *exception)
 {
   char
     **textlist;
@@ -693,12 +705,12 @@ MagickExport MagickBooleanType GetMultilineTypeMetrics(Image *image,
     Find the widest of the text lines.
   */
   annotate_info->text=textlist[0];
-  status=GetTypeMetrics(image,annotate_info,&extent);
+  status=GetTypeMetrics(image,annotate_info,&extent,exception);
   *metrics=extent;
   for (i=1; textlist[i] != (char *) NULL; i++)
   {
     annotate_info->text=textlist[i];
-    status=GetTypeMetrics(image,annotate_info,&extent);
+    status=GetTypeMetrics(image,annotate_info,&extent,exception);
     if (extent.width > metrics->width)
       *metrics=extent;
   }
@@ -748,7 +760,7 @@ MagickExport MagickBooleanType GetMultilineTypeMetrics(Image *image,
 %  The format of the GetTypeMetrics method is:
 %
 %      MagickBooleanType GetTypeMetrics(Image *image,const DrawInfo *draw_info,
-%        TypeMetric *metrics)
+%        TypeMetric *metrics,ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
@@ -758,9 +770,11 @@ MagickExport MagickBooleanType GetMultilineTypeMetrics(Image *image,
 %
 %    o metrics: Return the font metrics in this structure.
 %
+%    o exception: return any errors or warnings in this structure.
+%
 */
 MagickExport MagickBooleanType GetTypeMetrics(Image *image,
-  const DrawInfo *draw_info,TypeMetric *metrics)
+  const DrawInfo *draw_info,TypeMetric *metrics,ExceptionInfo *exception)
 {
   DrawInfo
     *annotate_info;
@@ -784,7 +798,7 @@ MagickExport MagickBooleanType GetTypeMetrics(Image *image,
   (void) ResetMagickMemory(metrics,0,sizeof(*metrics));
   offset.x=0.0;
   offset.y=0.0;
-  status=RenderType(image,annotate_info,&offset,metrics);
+  status=RenderType(image,annotate_info,&offset,metrics,exception);
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(AnnotateEvent,GetMagickModule(),"Metrics: text: %s; "
       "width: %g; height: %g; ascent: %g; descent: %g; max advance: %g; "
@@ -816,7 +830,7 @@ MagickExport MagickBooleanType GetTypeMetrics(Image *image,
 %  The format of the RenderType method is:
 %
 %      MagickBooleanType RenderType(Image *image,DrawInfo *draw_info,
-%        const PointInfo *offset,TypeMetric *metrics)
+%        const PointInfo *offset,TypeMetric *metrics,ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
@@ -828,9 +842,11 @@ MagickExport MagickBooleanType GetTypeMetrics(Image *image,
 %
 %    o metrics: bounding box of text.
 %
+%    o exception: return any errors or warnings in this structure.
+%
 */
 static MagickBooleanType RenderType(Image *image,const DrawInfo *draw_info,
-  const PointInfo *offset,TypeMetric *metrics)
+  const PointInfo *offset,TypeMetric *metrics,ExceptionInfo *exception)
 {
   const TypeInfo
     *type_info;
@@ -847,51 +863,52 @@ static MagickBooleanType RenderType(Image *image,const DrawInfo *draw_info,
       if (*draw_info->font == '@')
         {
           status=RenderFreetype(image,draw_info,draw_info->encoding,offset,
-            metrics);
+            metrics,exception);
           return(status);
         }
       if (*draw_info->font == '-')
-        return(RenderX11(image,draw_info,offset,metrics));
+        return(RenderX11(image,draw_info,offset,metrics,exception));
       if (IsPathAccessible(draw_info->font) != MagickFalse)
         {
           status=RenderFreetype(image,draw_info,draw_info->encoding,offset,
-            metrics);
+            metrics,exception);
           return(status);
         }
-      type_info=GetTypeInfo(draw_info->font,&image->exception);
+      type_info=GetTypeInfo(draw_info->font,exception);
       if (type_info == (const TypeInfo *) NULL)
-        (void) ThrowMagickException(&image->exception,GetMagickModule(),
-          TypeWarning,"UnableToReadFont","`%s'",draw_info->font);
+        (void) ThrowMagickException(exception,GetMagickModule(),TypeWarning,
+          "UnableToReadFont","`%s'",draw_info->font);
     }
   if ((type_info == (const TypeInfo *) NULL) &&
       (draw_info->family != (const char *) NULL))
     {
       type_info=GetTypeInfoByFamily(draw_info->family,draw_info->style,
-        draw_info->stretch,draw_info->weight,&image->exception);
+        draw_info->stretch,draw_info->weight,exception);
       if (type_info == (const TypeInfo *) NULL)
-        (void) ThrowMagickException(&image->exception,GetMagickModule(),
-          TypeWarning,"UnableToReadFont","`%s'",draw_info->family);
+        (void) ThrowMagickException(exception,GetMagickModule(),TypeWarning,
+          "UnableToReadFont","`%s'",draw_info->family);
     }
   if (type_info == (const TypeInfo *) NULL)
     type_info=GetTypeInfoByFamily("Arial",draw_info->style,
-      draw_info->stretch,draw_info->weight,&image->exception);
+      draw_info->stretch,draw_info->weight,exception);
   if (type_info == (const TypeInfo *) NULL)
     type_info=GetTypeInfoByFamily("Helvetica",draw_info->style,
-      draw_info->stretch,draw_info->weight,&image->exception);
+      draw_info->stretch,draw_info->weight,exception);
   if (type_info == (const TypeInfo *) NULL)
     type_info=GetTypeInfoByFamily("Century Schoolbook",draw_info->style,
-      draw_info->stretch,draw_info->weight,&image->exception);
+      draw_info->stretch,draw_info->weight,exception);
   if (type_info == (const TypeInfo *) NULL)
     type_info=GetTypeInfoByFamily("Sans",draw_info->style,
-      draw_info->stretch,draw_info->weight,&image->exception);
+      draw_info->stretch,draw_info->weight,exception);
   if (type_info == (const TypeInfo *) NULL)
     type_info=GetTypeInfoByFamily((const char *) NULL,draw_info->style,
-      draw_info->stretch,draw_info->weight,&image->exception);
+      draw_info->stretch,draw_info->weight,exception);
   if (type_info == (const TypeInfo *) NULL)
-    type_info=GetTypeInfo("*",&image->exception);
+    type_info=GetTypeInfo("*",exception);
   if (type_info == (const TypeInfo *) NULL)
     {
-      status=RenderFreetype(image,draw_info,draw_info->encoding,offset,metrics);
+      status=RenderFreetype(image,draw_info,draw_info->encoding,offset,metrics,
+        exception);
       return(status);
     }
   annotate_info=CloneDrawInfo((ImageInfo *) NULL,draw_info);
@@ -900,7 +917,8 @@ static MagickBooleanType RenderType(Image *image,const DrawInfo *draw_info,
     (void) CloneString(&annotate_info->metrics,type_info->metrics);
   if (type_info->glyphs != (char *) NULL)
     (void) CloneString(&annotate_info->font,type_info->glyphs);
-  status=RenderFreetype(image,annotate_info,type_info->encoding,offset,metrics);
+  status=RenderFreetype(image,annotate_info,type_info->encoding,offset,metrics,
+    exception);
   annotate_info=DestroyDrawInfo(annotate_info);
   return(status);
 }
@@ -922,7 +940,8 @@ static MagickBooleanType RenderType(Image *image,const DrawInfo *draw_info,
 %  The format of the RenderFreetype method is:
 %
 %      MagickBooleanType RenderFreetype(Image *image,DrawInfo *draw_info,
-%        const char *encoding,const PointInfo *offset,TypeMetric *metrics)
+%        const char *encoding,const PointInfo *offset,TypeMetric *metrics,
+%        ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
@@ -936,6 +955,8 @@ static MagickBooleanType RenderType(Image *image,const DrawInfo *draw_info,
 %
 %    o metrics: bounding box of text.
 %
+%    o exception: return any errors or warnings in this structure.
+%
 */
 
 #if defined(MAGICKCORE_FREETYPE_DELEGATE)
@@ -1006,7 +1027,8 @@ static int TraceQuadraticBezier(FT_Vector *control,FT_Vector *to,
 }
 
 static MagickBooleanType RenderFreetype(Image *image,const DrawInfo *draw_info,
-  const char *encoding,const PointInfo *offset,TypeMetric *metrics)
+  const char *encoding,const PointInfo *offset,TypeMetric *metrics,
+  ExceptionInfo *exception)
 {
 #if !defined(FT_OPEN_PATHNAME)
 #define FT_OPEN_PATHNAME  ft_open_pathname
@@ -1112,9 +1134,9 @@ static MagickBooleanType RenderFreetype(Image *image,const DrawInfo *draw_info,
   if (status != 0)
     {
       (void) FT_Done_FreeType(library);
-      (void) ThrowMagickException(&image->exception,GetMagickModule(),
-        TypeError,"UnableToReadFont","`%s'",draw_info->font);
-      return(RenderPostscript(image,draw_info,offset,metrics));
+      (void) ThrowMagickException(exception,GetMagickModule(),TypeError,
+        "UnableToReadFont","`%s'",draw_info->font);
+      return(RenderPostscript(image,draw_info,offset,metrics,exception));
     }
   if ((draw_info->metrics != (char *) NULL) &&
       (IsPathAccessible(draw_info->metrics) != MagickFalse))
@@ -1240,9 +1262,9 @@ static MagickBooleanType RenderFreetype(Image *image,const DrawInfo *draw_info,
   if (draw_info->render != MagickFalse)
     {
       if (image->storage_class != DirectClass)
-        (void) SetImageStorageClass(image,DirectClass,&image->exception);
+        (void) SetImageStorageClass(image,DirectClass,exception);
       if (image->matte == MagickFalse)
-        (void) SetImageAlphaChannel(image,OpaqueAlphaChannel,&image->exception);
+        (void) SetImageAlphaChannel(image,OpaqueAlphaChannel,exception);
     }
   direction=1.0;
   if (draw_info->direction == RightToLeftDirection)
@@ -1330,9 +1352,6 @@ static MagickBooleanType RenderFreetype(Image *image,const DrawInfo *draw_info,
         CacheView
           *image_view;
 
-        ExceptionInfo
-          *exception;
-
         MagickBooleanType
           status;
 
@@ -1340,7 +1359,6 @@ static MagickBooleanType RenderFreetype(Image *image,const DrawInfo *draw_info,
           Rasterize the glyph.
         */
         status=MagickTrue;
-        exception=(&image->exception);
         image_view=AcquireCacheView(image);
         for (y=0; y < (ssize_t) bitmap->bitmap.rows; y++)
         {
@@ -1502,9 +1520,9 @@ static MagickBooleanType RenderFreetype(Image *image,const DrawInfo *draw_info,
 #else
 static MagickBooleanType RenderFreetype(Image *image,const DrawInfo *draw_info,
   const char *magick_unused(encoding),const PointInfo *offset,
-  TypeMetric *metrics)
+  TypeMetric *metrics,ExceptionInfo *exception)
 {
-  (void) ThrowMagickException(&image->exception,GetMagickModule(),
+  (void) ThrowMagickException(exception,GetMagickModule(),
     MissingDelegateWarning,"DelegateLibrarySupportNotBuiltIn","`%s' (Freetype)",
     draw_info->font != (char *) NULL ? draw_info->font : "none");
   return(RenderPostscript(image,draw_info,offset,metrics));
@@ -1528,7 +1546,7 @@ static MagickBooleanType RenderFreetype(Image *image,const DrawInfo *draw_info,
 %  The format of the RenderPostscript method is:
 %
 %      MagickBooleanType RenderPostscript(Image *image,DrawInfo *draw_info,
-%        const PointInfo *offset,TypeMetric *metrics)
+%        const PointInfo *offset,TypeMetric *metrics,ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
@@ -1540,6 +1558,8 @@ static MagickBooleanType RenderFreetype(Image *image,const DrawInfo *draw_info,
 %
 %    o metrics: bounding box of text.
 %
+%    o exception: return any errors or warnings in this structure.
+%
 */
 
 static inline size_t MagickMin(const size_t x,const size_t y)
@@ -1580,7 +1600,8 @@ static char *EscapeParenthesis(const char *text)
 }
 
 static MagickBooleanType RenderPostscript(Image *image,
-  const DrawInfo *draw_info,const PointInfo *offset,TypeMetric *metrics)
+  const DrawInfo *draw_info,const PointInfo *offset,TypeMetric *metrics,
+  ExceptionInfo *exception)
 {
   char
     filename[MaxTextExtent],
@@ -1626,8 +1647,7 @@ static MagickBooleanType RenderPostscript(Image *image,
     file=fdopen(unique_file,"wb");
   if ((unique_file == -1) || (file == (FILE *) NULL))
     {
-      ThrowFileException(&image->exception,FileOpenError,"UnableToOpenFile",
-        filename);
+      ThrowFileException(exception,FileOpenError,"UnableToOpenFile",filename);
       return(MagickFalse);
     }
   (void) FormatLocaleFile(file,"%%!PS-Adobe-3.0\n");
@@ -1690,8 +1710,8 @@ static MagickBooleanType RenderPostscript(Image *image,
   if (draw_info->density != (char *) NULL)
     (void) CloneString(&annotate_info->density,draw_info->density);
   annotate_info->antialias=draw_info->text_antialias;
-  annotate_image=ReadImage(annotate_info,&image->exception);
-  CatchException(&image->exception);
+  annotate_image=ReadImage(annotate_info,exception);
+  CatchException(exception);
   annotate_info=DestroyImageInfo(annotate_info);
   (void) RelinquishUniqueFileResource(filename);
   if (annotate_image == (Image *) NULL)
@@ -1719,7 +1739,7 @@ static MagickBooleanType RenderPostscript(Image *image,
       RectangleInfo
         crop_info;
 
-      crop_info=GetImageBoundingBox(annotate_image,&annotate_image->exception);
+      crop_info=GetImageBoundingBox(annotate_image,exception);
       crop_info.height=(size_t) ((resolution.y/DefaultResolution)*
         ExpandAffine(&draw_info->affine)*draw_info->pointsize+0.5);
       crop_info.y=(ssize_t) ceil((resolution.y/DefaultResolution)*extent.y/8.0-
@@ -1751,9 +1771,6 @@ static MagickBooleanType RenderPostscript(Image *image,
     }
   if (draw_info->fill.alpha != TransparentAlpha)
     {
-      ExceptionInfo
-        *exception;
-
       MagickBooleanType
         sync;
 
@@ -1766,7 +1783,6 @@ static MagickBooleanType RenderPostscript(Image *image,
       /*
         Render fill color.
       */
-      exception=(&image->exception);
       if (image->matte == MagickFalse)
         (void) SetImageAlphaChannel(image,OpaqueAlphaChannel,exception);
       if (annotate_image->matte == MagickFalse)
@@ -1827,7 +1843,7 @@ static MagickBooleanType RenderPostscript(Image *image,
 %  The format of the RenderX11 method is:
 %
 %      MagickBooleanType RenderX11(Image *image,DrawInfo *draw_info,
-%        const PointInfo *offset,TypeMetric *metrics)
+%        const PointInfo *offset,TypeMetric *metrics,ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
@@ -1839,10 +1855,12 @@ static MagickBooleanType RenderPostscript(Image *image,
 %
 %    o metrics: bounding box of text.
 %
+%    o exception: return any errors or warnings in this structure.
+%
 */
 #if defined(MAGICKCORE_X11_DELEGATE)
 static MagickBooleanType RenderX11(Image *image,const DrawInfo *draw_info,
-  const PointInfo *offset,TypeMetric *metrics)
+  const PointInfo *offset,TypeMetric *metrics,ExceptionInfo *exception)
 {
   MagickBooleanType
     status;
@@ -2039,12 +2057,12 @@ static MagickBooleanType RenderX11(Image *image,const DrawInfo *draw_info,
 }
 #else
 static MagickBooleanType RenderX11(Image *image,const DrawInfo *draw_info,
-  const PointInfo *offset,TypeMetric *metrics)
+  const PointInfo *offset,TypeMetric *metrics,ExceptionInfo *exception)
 {
   (void) draw_info;
   (void) offset;
   (void) metrics;
-  (void) ThrowMagickException(&image->exception,GetMagickModule(),
+  (void) ThrowMagickException(exception,GetMagickModule(),
     MissingDelegateError,"DelegateLibrarySupportNotBuiltIn","`%s' (X11)",
     image->filename);
   return(MagickFalse);
index 14df56ab6328c1266ad3293cbb6daa9e54e00462..06957deef8f9f9a38ef1312d05b0c02ac93e4e8d 100644 (file)
@@ -26,13 +26,14 @@ extern "C" {
 
 extern MagickExport MagickBooleanType
   AnnotateComponentGenesis(void),
-  AnnotateImage(Image *,const DrawInfo *),
-  GetMultilineTypeMetrics(Image *,const DrawInfo *,TypeMetric *),
-  GetTypeMetrics(Image *,const DrawInfo *,TypeMetric *);
+  AnnotateImage(Image *,const DrawInfo *,ExceptionInfo *),
+  GetMultilineTypeMetrics(Image *,const DrawInfo *,TypeMetric *,
+    ExceptionInfo *),
+  GetTypeMetrics(Image *,const DrawInfo *,TypeMetric *,ExceptionInfo *);
 
 extern MagickExport ssize_t
   FormatMagickCaption(Image *,DrawInfo *,const MagickBooleanType,TypeMetric *,
-    char **);
+    char **,ExceptionInfo *);
 
 extern MagickExport void
   AnnotateComponentTerminus(void);
index 5399c4b523bbf74bf6e17ac8ca58b17c4a37592b..f1d9f0e388ea19b20af71e11d1a7064fc915a7c9 100644 (file)
@@ -8517,7 +8517,7 @@ static Image *XMagickCommand(Display *display,XResourceInfo *resource_info,
       XSetCursorState(display,windows,MagickTrue);
       XCheckRefreshWindows(display,windows);
       threshold=SiPrefixToDouble(factor,QuantumRange);
-      (void) SolarizeImage(*image,threshold);
+      (void) SolarizeImage(*image,threshold,exception);
       XSetCursorState(display,windows,MagickFalse);
       if (windows->image.orphan != MagickFalse)
         break;
index 6b754ba8eb93aada85a4f2eafdb8dd014193a8b1..cde1013754a65a3bdf8fc5cdeeb77294cf31ce28 100644 (file)
@@ -4419,7 +4419,7 @@ MagickExport MagickBooleanType DrawPrimitive(Image *image,
       (void) FormatLocaleString(geometry,MaxTextExtent,"%+f%+f",
         primitive_info->point.x,primitive_info->point.y);
       (void) CloneString(&clone_info->geometry,geometry);
-      status=AnnotateImage(image,clone_info);
+      status=AnnotateImage(image,clone_info,exception);
       clone_info=DestroyDrawInfo(clone_info);
       break;
     }
index 7cd1a346c408de7baeed0b5efcc8c6aa92a38c21..7e9ff0bc6b0060ad60ba36a4038a47ddf900f1d1 100644 (file)
@@ -2622,7 +2622,7 @@ MagickExport Image *PreviewImage(const Image *image,const PreviewType preview,
         if (preview_image == (Image *) NULL)
           break;
         (void) SolarizeImage(preview_image,(double) QuantumRange*
-          percentage/100.0);
+          percentage/100.0,exception);
         (void) FormatLocaleString(label,MaxTextExtent,"solarize %g",
           (QuantumRange*percentage)/100.0);
         break;
index 552062efddf3cd2fe6a5c2c6ad52127e001c6b59..7d6954cf03d8db71276678078d022325978d1564 100644 (file)
@@ -3511,7 +3511,7 @@ MagickExport Image *MorphImages(const Image *image,
 %  The format of the PlasmaImage method is:
 %
 %      MagickBooleanType PlasmaImage(Image *image,const SegmentInfo *segment,
-%        size_t attenuate,size_t depth)
+%        size_t attenuate,size_t depth,ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
@@ -3523,6 +3523,8 @@ MagickExport Image *MorphImages(const Image *image,
 %
 %    o depth: Limit the plasma recursion depth.
 %
+%    o exception: return any errors or warnings in this structure.
+%
 */
 
 static inline Quantum PlasmaPixel(RandomInfo *random_info,
@@ -3538,11 +3540,8 @@ static inline Quantum PlasmaPixel(RandomInfo *random_info,
 
 MagickExport MagickBooleanType PlasmaImageProxy(Image *image,
   CacheView *image_view,RandomInfo *random_info,const SegmentInfo *segment,
-  size_t attenuate,size_t depth)
+  size_t attenuate,size_t depth,ExceptionInfo *exception)
 {
-  ExceptionInfo
-    *exception;
-
   MagickRealType
     plasma;
 
@@ -3574,22 +3573,22 @@ MagickExport MagickBooleanType PlasmaImageProxy(Image *image,
       local_info.x2=(double) x_mid;
       local_info.y2=(double) y_mid;
       (void) PlasmaImageProxy(image,image_view,random_info,&local_info,
-        attenuate,depth);
+        attenuate,depth,exception);
       local_info=(*segment);
       local_info.y1=(double) y_mid;
       local_info.x2=(double) x_mid;
       (void) PlasmaImageProxy(image,image_view,random_info,&local_info,
-        attenuate,depth);
+        attenuate,depth,exception);
       local_info=(*segment);
       local_info.x1=(double) x_mid;
       local_info.y2=(double) y_mid;
       (void) PlasmaImageProxy(image,image_view,random_info,&local_info,
-        attenuate,depth);
+        attenuate,depth,exception);
       local_info=(*segment);
       local_info.x1=(double) x_mid;
       local_info.y1=(double) y_mid;
       return(PlasmaImageProxy(image,image_view,random_info,&local_info,
-        attenuate,depth));
+        attenuate,depth,exception));
     }
   x_mid=(ssize_t) ceil((segment->x1+segment->x2)/2-0.5);
   y_mid=(ssize_t) ceil((segment->y1+segment->y2)/2-0.5);
@@ -3599,7 +3598,6 @@ MagickExport MagickBooleanType PlasmaImageProxy(Image *image,
   /*
     Average pixels and apply plasma.
   */
-  exception=(&image->exception);
   plasma=(MagickRealType) QuantumRange/(2.0*attenuate);
   if ((segment->x1 != (double) x_mid) || (segment->x2 != (double) x_mid))
     {
@@ -3728,7 +3726,8 @@ MagickExport MagickBooleanType PlasmaImageProxy(Image *image,
 }
 \f
 MagickExport MagickBooleanType PlasmaImage(Image *image,
-  const SegmentInfo *segment,size_t attenuate,size_t depth)
+  const SegmentInfo *segment,size_t attenuate,size_t depth,
+  ExceptionInfo *exception)
 {
   CacheView
     *image_view;
@@ -3745,11 +3744,12 @@ MagickExport MagickBooleanType PlasmaImage(Image *image,
   assert(image->signature == MagickSignature);
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
-  if (SetImageStorageClass(image,DirectClass,&image->exception) == MagickFalse)
+  if (SetImageStorageClass(image,DirectClass,exception) == MagickFalse)
     return(MagickFalse);
   image_view=AcquireCacheView(image);
   random_info=AcquireRandomInfo();
-  status=PlasmaImageProxy(image,image_view,random_info,segment,attenuate,depth);
+  status=PlasmaImageProxy(image,image_view,random_info,segment,attenuate,depth,
+    exception);
   random_info=DestroyRandomInfo(random_info);
   image_view=DestroyCacheView(image_view);
   return(status);
@@ -3848,7 +3848,7 @@ MagickExport Image *PolaroidImage(const Image *image,const DrawInfo *draw_info,
         value);
       (void) CloneString(&annotate_info->text,caption);
       count=FormatMagickCaption(caption_image,annotate_info,MagickTrue,&metrics,
-        &caption);
+        &caption,exception);
       status=SetImageExtent(caption_image,image->columns,(size_t)
         ((count+1)*(metrics.ascent-metrics.descent)+0.5),exception);
       if (status == MagickFalse)
@@ -3863,7 +3863,7 @@ MagickExport Image *PolaroidImage(const Image *image,const DrawInfo *draw_info,
           if (annotate_info->gravity == UndefinedGravity)
             (void) CloneString(&annotate_info->geometry,AcquireString(
               geometry));
-          (void) AnnotateImage(caption_image,annotate_info);
+          (void) AnnotateImage(caption_image,annotate_info,exception);
           height+=caption_image->rows;
         }
       annotate_info=DestroyDrawInfo(annotate_info);
@@ -4411,7 +4411,8 @@ MagickExport Image *SketchImage(const Image *image,const double radius,
 %
 %  The format of the SolarizeImage method is:
 %
-%      MagickBooleanType SolarizeImage(Image *image,const double threshold)
+%      MagickBooleanType SolarizeImage(Image *image,const double threshold,
+%        ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
@@ -4419,18 +4420,17 @@ MagickExport Image *SketchImage(const Image *image,const double radius,
 %
 %    o threshold:  Define the extent of the solarization.
 %
+%    o exception: return any errors or warnings in this structure.
+%
 */
 MagickExport MagickBooleanType SolarizeImage(Image *image,
-  const double threshold)
+  const double threshold,ExceptionInfo *exception)
 {
 #define SolarizeImageTag  "Solarize/Image"
 
   CacheView
     *image_view;
 
-  ExceptionInfo
-    *exception;
-
   MagickBooleanType
     status;
 
@@ -4469,7 +4469,6 @@ MagickExport MagickBooleanType SolarizeImage(Image *image,
   */
   status=MagickTrue;
   progress=0;
-  exception=(&image->exception);
   image_view=AcquireCacheView(image);
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
   #pragma omp parallel for schedule(dynamic,4) shared(progress,status)
@@ -4484,8 +4483,7 @@ MagickExport MagickBooleanType SolarizeImage(Image *image,
 
     if (status == MagickFalse)
       continue;
-    q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,
-      exception);
+    q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,exception);
     if (q == (const Quantum *) NULL)
       {
         status=MagickFalse;
index 9f978582c953b221e410c76a59baeb2c8d19e03e..bf99249f5a21696871981b730fb49fb3d6675835 100644 (file)
@@ -62,8 +62,8 @@ extern MagickExport Image
   *WaveImage(const Image *,const double,const double,ExceptionInfo *);
 
 extern MagickExport MagickBooleanType
-  PlasmaImage(Image *,const SegmentInfo *,size_t,size_t),
-  SolarizeImage(Image *,const double);
+  PlasmaImage(Image *,const SegmentInfo *,size_t,size_t,ExceptionInfo *),
+  SolarizeImage(Image *,const double,ExceptionInfo *);
 
 #if defined(__cplusplus) || defined(c_plusplus)
 }
index ce2837452a02b465b849a0725be5a15750dd3bef..af46c4a82d6b2af51a04c4989f19dfd88e2b2875 100644 (file)
@@ -548,7 +548,7 @@ MagickExport Image *MontageImageList(const ImageInfo *image_info,
   draw_info->stroke=montage_info->stroke;
   draw_info->fill=montage_info->fill;
   draw_info->text=AcquireString("");
-  (void) GetTypeMetrics(image_list[0],draw_info,&metrics);
+  (void) GetTypeMetrics(image_list[0],draw_info,&metrics,exception);
   texture=NewImageList();
   if (montage_info->texture != (char *) NULL)
     {
@@ -696,13 +696,13 @@ MagickExport Image *MontageImageList(const ImageInfo *image_info,
         clone_info=CloneDrawInfo(image_info,draw_info);
         clone_info->gravity=CenterGravity;
         clone_info->pointsize*=2.0;
-        (void) GetTypeMetrics(image_list[0],clone_info,&metrics);
+        (void) GetTypeMetrics(image_list[0],clone_info,&metrics,exception);
         (void) FormatLocaleString(geometry,MaxTextExtent,
           "%.20gx%.20g%+.20g%+.20g",(double) montage->columns,(double)
           (metrics.ascent-metrics.descent),0.0,(double) extract_info.y+4);
         (void) CloneString(&clone_info->geometry,geometry);
         (void) CloneString(&clone_info->text,title);
-        (void) AnnotateImage(montage,clone_info);
+        (void) AnnotateImage(montage,clone_info,exception);
         clone_info=DestroyDrawInfo(clone_info);
       }
     (void) SetImageProgressMonitor(montage,progress_monitor,
@@ -848,7 +848,7 @@ MagickExport Image *MontageImageList(const ImageInfo *image_info,
                 (montage_info->shadow != MagickFalse ? 4 : 0))+bevel_width));
               (void) CloneString(&draw_info->geometry,geometry);
               (void) CloneString(&draw_info->text,value);
-              (void) AnnotateImage(montage,draw_info);
+              (void) AnnotateImage(montage,draw_info,exception);
             }
         }
       x_offset+=(ssize_t) (width+2*(extract_info.x+border_width));
index 2ac924f2acd28ee5f67bab202bf93d8bfc52a4aa..4fe769a49247fa0701fae53d364c05cab6d61c75 100644 (file)
@@ -603,10 +603,8 @@ WandExport MagickBooleanType MagickAnnotateImage(MagickWand *wand,
   draw_info->affine.ry=(-sin(DegreesToRadians(fmod(angle,360.0))));
   draw_info->affine.sy=cos(DegreesToRadians(fmod(angle,360.0)));
   (void) CloneString(&draw_info->geometry,geometry);
-  status=AnnotateImage(wand->images,draw_info);
+  status=AnnotateImage(wand->images,draw_info,&wand->images->exception);
   draw_info=DestroyDrawInfo(draw_info);
-  if (status == MagickFalse)
-    InheritException(wand->exception,&wand->images->exception);
   return(status);
 }
 \f
@@ -10630,9 +10628,7 @@ WandExport MagickBooleanType MagickSolarizeImage(MagickWand *wand,
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
   if (wand->images == (Image *) NULL)
     ThrowWandException(WandError,"ContainsNoImages",wand->name);
-  status=SolarizeImage(wand->images,threshold);
-  if (status == MagickFalse)
-    InheritException(wand->exception,&wand->images->exception);
+  status=SolarizeImage(wand->images,threshold,&wand->images->exception);
   return(status);
 }
 \f
index 0b125e875786ede998b9293b592c09aa813377d5..af10560843758b9ef01aae330ffc677cab338f56 100644 (file)
@@ -553,11 +553,11 @@ WandExport double *MagickQueryFontMetrics(MagickWand *wand,
     }
   (void) CloneString(&draw_info->text,text);
   (void) ResetMagickMemory(&metrics,0,sizeof(metrics));
-  status=GetTypeMetrics(wand->images,draw_info,&metrics);
+  status=GetTypeMetrics(wand->images,draw_info,&metrics,
+    &wand->images->exception);
   draw_info=DestroyDrawInfo(draw_info);
   if (status == MagickFalse)
     {
-      InheritException(wand->exception,&wand->images->exception);
       font_metrics=(double *) RelinquishMagickMemory(font_metrics);
       return((double *) NULL);
     }
@@ -661,11 +661,11 @@ WandExport double *MagickQueryMultilineFontMetrics(MagickWand *wand,
     }
   (void) CloneString(&draw_info->text,text);
   (void) ResetMagickMemory(&metrics,0,sizeof(metrics));
-  status=GetMultilineTypeMetrics(wand->images,draw_info,&metrics);
+  status=GetMultilineTypeMetrics(wand->images,draw_info,&metrics,
+    &wand->images->exception);
   draw_info=DestroyDrawInfo(draw_info);
   if (status == MagickFalse)
     {
-      InheritException(wand->exception,&wand->images->exception);
       font_metrics=(double *) RelinquishMagickMemory(font_metrics);
       return((double *) NULL);
     }
index d2774f4f6247583e85f9e06f7e264dd55c9482b7..a70f5bb7cf6fa79103384e6c87a93e39f2c3cbe9 100644 (file)
@@ -789,8 +789,7 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc,
               fmod(geometry_info.sigma,360.0))));
             draw_info->affine.sy=cos(DegreesToRadians(
               fmod(geometry_info.sigma,360.0)));
-            (void) AnnotateImage(*image,draw_info);
-            InheritException(exception,&(*image)->exception);
+            (void) AnnotateImage(*image,draw_info,exception);
             break;
           }
         if (LocaleCompare("antialias",option+1) == 0)
@@ -2738,8 +2737,7 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc,
 
             (void) SyncImageSettings(mogrify_info,*image);
             threshold=SiPrefixToDouble(argv[i+1],QuantumRange);
-            (void) SolarizeImage(*image,threshold);
-            InheritException(exception,&(*image)->exception);
+            (void) SolarizeImage(*image,threshold,exception);
             break;
           }
         if (LocaleCompare("sparse-color",option+1) == 0)
index 7aea07bdb6a9ff2a3ba0c936bf62151c04c8f8c9..7bfb67430dbc92721b719bd1fdc1f7886f9a4b26 100644 (file)
@@ -8129,7 +8129,7 @@ Mogrify(ref,...)
           if (attribute_flag[32] != 0)
             draw_info->direction=(DirectionType)
               argument_list[32].integer_reference;
-          (void) AnnotateImage(image,draw_info);
+          (void) AnnotateImage(image,draw_info,exception);
           draw_info=DestroyDrawInfo(draw_info);
           break;
         }
@@ -8934,9 +8934,9 @@ Mogrify(ref,...)
             flags=ParseGeometry(argument_list[0].string_reference,
               &geometry_info);
           if (attribute_flag[1] != 0)
-            geometry_info.rho=SiPrefixToDouble(argument_list[1].string_reference,
-             QuantumRange);
-          (void) SolarizeImage(image,geometry_info.rho);
+            geometry_info.rho=SiPrefixToDouble(
+             argument_list[1].string_reference,QuantumRange);
+          (void) SolarizeImage(image,geometry_info.rho,exception);
           break;
         }
         case 53:  /* Sync */
@@ -12318,7 +12318,7 @@ QueryFontMetrics(ref,...)
         (void) FormatLocaleString(draw_info->geometry,MaxTextExtent,
           "%.15g,%.15g",x,y);
       }
-    status=GetTypeMetrics(image,draw_info,&metrics);
+    status=GetTypeMetrics(image,draw_info,&metrics,exception);
     (void) CatchImageException(image);
     if (status == MagickFalse)
       PUSHs(&sv_undef);
@@ -12691,8 +12691,8 @@ QueryMultilineFontMetrics(ref,...)
         (void) FormatLocaleString(draw_info->geometry,MaxTextExtent,
           "%.15g,%.15g",x,y);
       }
-    status=GetMultilineTypeMetrics(image,draw_info,&metrics);
-    (void) CatchImageException(image);
+    status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
+    (void) CatchException(exception);
     if (status == MagickFalse)
       PUSHs(&sv_undef);
     else
diff --git a/PerlMagick/t/Generic.ttf b/PerlMagick/t/Generic.ttf
new file mode 100644 (file)
index 0000000..8ea6470
Binary files /dev/null and b/PerlMagick/t/Generic.ttf differ
index bdf09d89352a90a4cb90595f01986c6278c34144..03b49d7b5e99ea4f3216380d7a06017fd68534de 100644 (file)
@@ -154,14 +154,15 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info,
       for ( ; ; )
       {
         text=AcquireString(caption);
-        i=FormatMagickCaption(image,draw_info,MagickFalse,&metrics,&text);
+        i=FormatMagickCaption(image,draw_info,MagickFalse,&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);
+        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);
@@ -173,14 +174,15 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info,
       for ( ; ; )
       {
         text=AcquireString(caption);
-        i=FormatMagickCaption(image,draw_info,MagickFalse,&metrics,&text);
+        i=FormatMagickCaption(image,draw_info,MagickFalse,&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);
+        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+1)) || (height > (image->rows+1)))
@@ -189,7 +191,7 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info,
       }
       draw_info->pointsize--;
     }
-  i=FormatMagickCaption(image,draw_info,MagickTrue,&metrics,&caption);
+  i=FormatMagickCaption(image,draw_info,MagickTrue,&metrics,&caption,exception);
   if (image->rows == 0)
     image->rows=(size_t) ((i+1)*(metrics.ascent-metrics.descent+
       draw_info->interline_spacing+draw_info->stroke_width)+0.5);
@@ -206,7 +208,7 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info,
     Draw caption.
   */
   (void) CloneString(&draw_info->text,caption);
-  status=GetMultilineTypeMetrics(image,draw_info,&metrics);
+  status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
   if ((draw_info->gravity != UndefinedGravity) &&
       (draw_info->direction != RightToLeftDirection))
     image->page.x=(ssize_t) (metrics.bounds.x1-draw_info->stroke_width/2.0);
@@ -221,7 +223,7 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info,
           metrics.ascent+draw_info->stroke_width/2.0);
       draw_info->geometry=AcquireString(geometry);
     }
-  (void) AnnotateImage(image,draw_info);
+  (void) AnnotateImage(image,draw_info,exception);
   draw_info=DestroyDrawInfo(draw_info);
   caption=DestroyString(caption);
   return(GetFirstImageInList(image));
index 2a746a437429435204536c48592cabf98c06b316..5c73428d9072421f94a548e19fc17f19bb57977f 100644 (file)
@@ -135,7 +135,7 @@ static Image *ReadLABELImage(const ImageInfo *image_info,
       /*
         Fit label to canvas size.
       */
-      status=GetMultilineTypeMetrics(image,draw_info,&metrics);
+      status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
       for ( ; status != MagickFalse; draw_info->pointsize*=2.0)
       {
         width=(size_t) floor(metrics.width+draw_info->stroke_width+0.5);
@@ -143,7 +143,7 @@ static Image *ReadLABELImage(const ImageInfo *image_info,
         if (((image->columns != 0) && (width >= image->columns)) ||
             ((image->rows != 0) && (height >= image->rows)))
           break;
-        status=GetMultilineTypeMetrics(image,draw_info,&metrics);
+        status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
       }
       draw_info->pointsize/=2.0;
       for ( ; status != MagickFalse; draw_info->pointsize--)
@@ -158,10 +158,10 @@ static Image *ReadLABELImage(const ImageInfo *image_info,
           break;
         if (draw_info->pointsize < 2.0)
           break;
-        status=GetMultilineTypeMetrics(image,draw_info,&metrics);
+        status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
       }
     }
-  status=GetMultilineTypeMetrics(image,draw_info,&metrics);
+  status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
   if (status == MagickFalse)
     {
       InheritException(exception,&image->exception);
@@ -195,7 +195,7 @@ static Image *ReadLABELImage(const ImageInfo *image_info,
       image=DestroyImageList(image);
       return((Image *) NULL);
     }
-  (void) AnnotateImage(image,draw_info);
+  (void) AnnotateImage(image,draw_info,exception);
   if (image_info->pointsize == 0.0)
     {
       char
index 3441e3619914769ca2047e9e4a7f0edc369bb4de..eee2b45547a7ea404cbeb6178518271b612d8118 100644 (file)
@@ -1079,7 +1079,8 @@ static void MSLStartElement(void *context,const xmlChar *tag,
             affine.tx;
           draw_info->affine.ty=affine.rx*current.tx+affine.sy*current.ty+
             affine.ty;
-          (void) AnnotateImage(msl_info->image[n],draw_info);
+          (void) AnnotateImage(msl_info->image[n],draw_info,
+            &msl_info->image[n]->exception);
           draw_info=DestroyDrawInfo(draw_info);
           break;
         }
@@ -4816,7 +4817,8 @@ static void MSLStartElement(void *context,const xmlChar *tag,
             affine.tx;
           draw_info->affine.ty=affine.rx*current.tx+affine.sy*current.ty+
             affine.ty;
-          status=GetTypeMetrics(msl_info->attributes[n],draw_info,&metrics);
+          status=GetTypeMetrics(msl_info->attributes[n],draw_info,&metrics,
+            &msl_info->image[n]->exception);
           if (status != MagickFalse)
             {
               Image
@@ -6618,7 +6620,8 @@ static void MSLStartElement(void *context,const xmlChar *tag,
                 }
               }
             }
-          (void) SolarizeImage(msl_info->image[n],geometry_info.rho);
+          (void) SolarizeImage(msl_info->image[n],geometry_info.rho,
+            &msl_info->image[n]->exception);
           break;
         }
       if (LocaleCompare((const char *) tag,"spread") == 0)
index 1f5cb4a9864ad728ed23686eb6b3f6b78286ca5a..61ac232183414d0d39f31541e2f251dd18edf87f 100644 (file)
@@ -214,7 +214,7 @@ static Image *ReadPlasmaImage(const ImageInfo *image_info,
     i>>=1;
   for (depth=1; ; depth++)
   {
-    if (PlasmaImage(image,&segment_info,0,depth) != MagickFalse)
+    if (PlasmaImage(image,&segment_info,0,depth,exception) != MagickFalse)
       break;
     status=SetImageProgress(image,LoadImageTag,(MagickOffsetType) depth,
       max_depth);
index d38a8650e26af5ccf860da1b41ad2f9198988a9e..8a542056a63e43f8c93335b2979af4c2142a35a8 100644 (file)
@@ -1116,7 +1116,8 @@ static void SVGStartElement(void *context,const xmlChar *name,
               draw_info->pointsize=svg_info->pointsize;
               draw_info->text=AcquireString(svg_info->text);
               (void) ConcatenateString(&draw_info->text," ");
-              GetTypeMetrics(svg_info->image,draw_info,&metrics);
+              (void) GetTypeMetrics(svg_info->image,draw_info,
+                &metrics,svg_info->exception);
               svg_info->bounds.x+=metrics.width;
               draw_info=DestroyDrawInfo(draw_info);
               *svg_info->text='\0';
@@ -2431,7 +2432,8 @@ static void SVGEndElement(void *context,const xmlChar *name)
               draw_info->pointsize=svg_info->pointsize;
               draw_info->text=AcquireString(svg_info->text);
               (void) ConcatenateString(&draw_info->text," ");
-              GetTypeMetrics(svg_info->image,draw_info,&metrics);
+              (void) GetTypeMetrics(svg_info->image,draw_info,&metrics,
+                svg_info->exception);
               svg_info->bounds.x+=metrics.width;
               draw_info=DestroyDrawInfo(draw_info);
               *svg_info->text='\0';
index b44f5056630e3ddd4e6eca49add094d746a85e3f..e7e4b8e8e258bb59ac26177d48387784ad68ce8e 100644 (file)
@@ -251,7 +251,7 @@ static Image *ReadTEXTImage(const ImageInfo *image_info,Image *image,
   (void) FormatLocaleString(geometry,MaxTextExtent,"0x0%+ld%+ld",(long) page.x,
     (long) page.y);
   (void) CloneString(&draw_info->geometry,geometry);
-  status=GetTypeMetrics(image,draw_info,&metrics);
+  status=GetTypeMetrics(image,draw_info,&metrics,exception);
   if (status == MagickFalse)
     ThrowReaderException(TypeError,"UnableToGetTypeMetrics");
   page.y=(ssize_t) ceil((double) page.y+metrics.ascent-0.5);
@@ -290,7 +290,7 @@ static Image *ReadTEXTImage(const ImageInfo *image_info,Image *image,
         (void) SetImageProgressMonitor(image,progress_monitor,
           image->client_data);
       }
-    (void) AnnotateImage(image,draw_info);
+    (void) AnnotateImage(image,draw_info,exception);
     if (p == (char *) NULL)
       break;
     /*
@@ -324,7 +324,7 @@ static Image *ReadTEXTImage(const ImageInfo *image_info,Image *image,
       (void) TextureImage(image,texture);
       (void) SetImageProgressMonitor(image,progress_monitor,image->client_data);
     }
-  (void) AnnotateImage(image,draw_info);
+  (void) AnnotateImage(image,draw_info,exception);
   if (texture != (Image *) NULL)
     texture=DestroyImage(texture);
   draw_info=DestroyDrawInfo(draw_info);