]> granicus.if.org Git - imagemagick/blobdiff - wand/drawing-wand.c
(no commit message)
[imagemagick] / wand / drawing-wand.c
index 401105450475cae830b3be01139ba2414d0a98f1..e7eccec364065c9f04a414c2034df47599a19cea 100644 (file)
@@ -89,7 +89,7 @@ typedef enum
 
 struct _DrawingWand
 {
-  unsigned long
+  size_t
     id;
 
   char
@@ -110,7 +110,7 @@ struct _DrawingWand
     mvg_alloc,          /* total allocated memory */
     mvg_length;         /* total MVG length */
 
-  unsigned long
+  size_t
     mvg_width;          /* current line width */
 
   /* Pattern support */
@@ -124,7 +124,7 @@ struct _DrawingWand
     pattern_offset;
 
   /* Graphic wand */
-  unsigned long
+  size_t
     index;              /* array index */
 
   DrawInfo
@@ -134,7 +134,7 @@ struct _DrawingWand
     filter_off;         /* true if not filtering attributes */
 
   /* Pretty-printing depth */
-  unsigned long
+  size_t
     indent_depth;       /* number of left-hand pad characters */
 
   /* Path operation support */
@@ -148,7 +148,7 @@ struct _DrawingWand
     destroy,
     debug;
 
-  unsigned long
+  size_t
     signature;
 };
 
@@ -160,7 +160,7 @@ struct _DrawVTable
     const unsigned char *);
   void (*DrawArc)(DrawingWand *,const double,const double,const double,
     const double,const double,const double);
-  void (*DrawBezier)(DrawingWand *,const unsigned long,const PointInfo *);
+  void (*DrawBezier)(DrawingWand *,const size_t,const PointInfo *);
   void (*DrawCircle)(DrawingWand *,const double,const double,const double,
     const double);
   void (*DrawColor)(DrawingWand *,const double,const double,const PaintMethod);
@@ -206,8 +206,8 @@ struct _DrawVTable
   void (*DrawPathMoveToRelative)(DrawingWand *,const double,const double);
   void (*DrawPathStart)(DrawingWand *);
   void (*DrawPoint)(DrawingWand *,const double,const double);
-  void (*DrawPolygon)(DrawingWand *,const unsigned long,const PointInfo *);
-  void (*DrawPolyline)(DrawingWand *,const unsigned long,const PointInfo *);
+  void (*DrawPolygon)(DrawingWand *,const size_t,const PointInfo *);
+  void (*DrawPolyline)(DrawingWand *,const size_t,const PointInfo *);
   void (*DrawPopClipPath)(DrawingWand *);
   void (*DrawPopDefs)(DrawingWand *);
   MagickBooleanType (*DrawPopPattern)(DrawingWand *);
@@ -236,7 +236,7 @@ struct _DrawVTable
   void (*DrawSetFontSize)(DrawingWand *,const double);
   void (*DrawSetFontStretch)(DrawingWand *,const StretchType);
   void (*DrawSetFontStyle)(DrawingWand *,const StyleType);
-  void (*DrawSetFontWeight)(DrawingWand *,const unsigned long);
+  void (*DrawSetFontWeight)(DrawingWand *,const size_t);
   void (*DrawSetGravity)(DrawingWand *,const GravityType);
   void (*DrawRotate)(DrawingWand *,const double);
   void (*DrawScale)(DrawingWand *,const double,const double);
@@ -248,15 +248,15 @@ struct _DrawVTable
   void (*DrawSetStrokeDashOffset)(DrawingWand *,const double);
   void (*DrawSetStrokeLineCap)(DrawingWand *,const LineCap);
   void (*DrawSetStrokeLineJoin)(DrawingWand *,const LineJoin);
-  void (*DrawSetStrokeMiterLimit)(DrawingWand *,const unsigned long);
+  void (*DrawSetStrokeMiterLimit)(DrawingWand *,const size_t);
   MagickBooleanType (*DrawSetStrokePatternURL)(DrawingWand *,const char *);
   void (*DrawSetStrokeWidth)(DrawingWand *,const double);
   void (*DrawSetTextAntialias)(DrawingWand *,const MagickBooleanType);
   void (*DrawSetTextDecoration)(DrawingWand *,const DecorationType);
   void (*DrawSetTextUnderColor)(DrawingWand *,const PixelWand *);
   void (*DrawTranslate)(DrawingWand *,const double,const double);
-  void (*DrawSetViewbox)(DrawingWand *,unsigned long,unsigned long,
-    unsigned long,unsigned long);
+  void (*DrawSetViewbox)(DrawingWand *,size_t,size_t,
+    size_t,size_t);
   void (*PeekDrawingWand)(DrawingWand *);
   MagickBooleanType (*PopDrawingWand)(DrawingWand *);
   MagickBooleanType (*PushDrawingWand)(DrawingWand *);
@@ -411,18 +411,18 @@ static void MvgAppendColor(DrawingWand *wand,const PixelPacket *color)
 }
 
 static void MvgAppendPointsCommand(DrawingWand *wand,const char *command,
-  const unsigned long number_coordinates,const PointInfo *coordinates)
+  const size_t number_coordinates,const PointInfo *coordinates)
 {
   const PointInfo
     *coordinate;
 
-  unsigned long
+  size_t
     i;
 
   (void) MvgPrintf(wand,"%s",command);
   for (i=number_coordinates, coordinate=coordinates; i != 0; i--)
   {
-    (void) MvgAutoWrapPrintf(wand," %.15g,%.15g",coordinate->x,coordinate->y);
+    (void) MvgAutoWrapPrintf(wand," %g,%g",coordinate->x,coordinate->y);
     coordinate++;
   }
   (void) MvgPrintf(wand, "\n");
@@ -549,7 +549,7 @@ WandExport DrawingWand *CloneDrawingWand(const DrawingWand *wand)
   DrawingWand
     *clone_wand;
 
-  register long
+  register ssize_t
     i;
 
   assert(wand != (DrawingWand *) NULL);
@@ -562,8 +562,8 @@ WandExport DrawingWand *CloneDrawingWand(const DrawingWand *wand)
       "MemoryAllocationFailed",GetExceptionMessage(errno));
   (void) ResetMagickMemory(clone_wand,0,sizeof(*clone_wand));
   clone_wand->id=AcquireWandId();
-  (void) FormatMagickString(clone_wand->name,MaxTextExtent,"DrawingWand-%lu",
-    clone_wand->id);
+  (void) FormatMagickString(clone_wand->name,MaxTextExtent,"DrawingWand-%.20g",
+    (double) clone_wand->id);
   clone_wand->exception=AcquireExceptionInfo();
   InheritException(clone_wand->exception,wand->exception);
   clone_wand->mvg=AcquireString(wand->mvg);
@@ -579,7 +579,7 @@ WandExport DrawingWand *CloneDrawingWand(const DrawingWand *wand)
   if (clone_wand->graphic_context == (DrawInfo **) NULL)
     ThrowWandFatalException(ResourceLimitFatalError,"MemoryAllocationFailed",
       GetExceptionMessage(errno));
-  for (i=0; i <= (long) wand->index; i++)
+  for (i=0; i <= (ssize_t) wand->index; i++)
     clone_wand->graphic_context[i]=
       CloneDrawInfo((ImageInfo *) NULL,wand->graphic_context[i]);
   clone_wand->filter_off=wand->filter_off;
@@ -680,7 +680,7 @@ WandExport void DrawAffine(DrawingWand *wand,const AffineMatrix *affine)
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
   assert(affine != (const AffineMatrix *) NULL);
   AdjustAffine(wand,affine);
-  (void) MvgPrintf(wand,"affine %.15g,%.15g,%.15g,%.15g,%.15g,%.15g\n",
+  (void) MvgPrintf(wand,"affine %g,%g,%g,%g,%g,%g\n",
     affine->sx,affine->rx,affine->ry,affine->sy,affine->tx,affine->ty);
 }
 \f
@@ -770,7 +770,7 @@ WandExport void DrawAnnotation(DrawingWand *wand,const double x,const double y,
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
   assert(text != (const unsigned char *) NULL);
   escaped_text=EscapeString((const char *) text,'\'');
-  (void) MvgPrintf(wand,"text %.15g,%.15g '%s'\n",x,y,escaped_text);
+  (void) MvgPrintf(wand,"text %g,%g '%s'\n",x,y,escaped_text);
   escaped_text=DestroyString(escaped_text);
 }
 \f
@@ -817,7 +817,7 @@ WandExport void DrawArc(DrawingWand *wand,const double sx,const double sy,
   assert(wand->signature == WandSignature);
   if (wand->debug != MagickFalse)
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
-  (void) MvgPrintf(wand,"arc %.15g,%.15g %.15g,%.15g %.15g,%.15g\n",sx,sy,ex,
+  (void) MvgPrintf(wand,"arc %g,%g %g,%g %g,%g\n",sx,sy,ex,
     ey,sd,ed);
 }
 \f
@@ -837,7 +837,7 @@ WandExport void DrawArc(DrawingWand *wand,const double sx,const double sy,
 %  The format of the DrawBezier method is:
 %
 %      void DrawBezier(DrawingWand *wand,
-%        const unsigned long number_coordinates,const PointInfo *coordinates)
+%        const size_t number_coordinates,const PointInfo *coordinates)
 %
 %  A description of each parameter follows:
 %
@@ -849,7 +849,7 @@ WandExport void DrawArc(DrawingWand *wand,const double sx,const double sy,
 %
 */
 WandExport void DrawBezier(DrawingWand *wand,
-  const unsigned long number_coordinates,const PointInfo *coordinates)
+  const size_t number_coordinates,const PointInfo *coordinates)
 {
   assert(wand != (DrawingWand *) NULL);
   assert(wand->signature == WandSignature);
@@ -897,7 +897,7 @@ WandExport void DrawCircle(DrawingWand *wand,const double ox,const double oy,
   assert(wand->signature == WandSignature);
   if (wand->debug != MagickFalse)
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
-  (void) MvgPrintf(wand,"circle %.15g,%.15g %.15g,%.15g\n",ox,oy,px,py);
+  (void) MvgPrintf(wand,"circle %g,%g %g,%g\n",ox,oy,px,py);
 }
 \f
 /*
@@ -995,7 +995,7 @@ WandExport MagickBooleanType DrawComposite(DrawingWand *wand,
   register char
     *p;
 
-  register long
+  register ssize_t
     i;
 
   size_t
@@ -1033,18 +1033,18 @@ WandExport MagickBooleanType DrawComposite(DrawingWand *wand,
       char
         buffer[MaxTextExtent];
 
-      (void) FormatMagickString(buffer,MaxTextExtent,"%ld bytes",
+      (void) FormatMagickString(buffer,MaxTextExtent,"%.20g bytes",(double)
         (4L*blob_length/3L+4L));
       ThrowDrawException(ResourceLimitWarning,"MemoryAllocationFailed",
         wand->name);
       return(MagickFalse);
     }
-  mode=MagickOptionToMnemonic(MagickComposeOptions,(long) compose);
+  mode=MagickOptionToMnemonic(MagickComposeOptions,(ssize_t) compose);
   media_type=MagickToMime(image->magick);
-  (void) MvgPrintf(wand,"image %s %.15g,%.15g %.15g,%.15g 'data:%s;base64,\n",
+  (void) MvgPrintf(wand,"image %s %g,%g %g,%g 'data:%s;base64,\n",
     mode,x,y,width,height,media_type);
   p=base64;
-  for (i=(long) encoded_length; i > 0; i-=76)
+  for (i=(ssize_t) encoded_length; i > 0; i-=76)
   {
     (void) MvgPrintf(wand,"%.76s",p);
     p+=76;
@@ -1100,8 +1100,8 @@ WandExport void DrawColor(DrawingWand *wand,const double x,const double y,
   assert(wand->signature == WandSignature);
   if (wand->debug != MagickFalse)
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
-  (void) MvgPrintf(wand,"color %.15g,%.15g '%s'\n",x,y,MagickOptionToMnemonic(
-    MagickMethodOptions,(long) paint_method));
+  (void) MvgPrintf(wand,"color %g,%g '%s'\n",x,y,MagickOptionToMnemonic(
+    MagickMethodOptions,(ssize_t) paint_method));
 }
 \f
 /*
@@ -1175,7 +1175,7 @@ WandExport void DrawEllipse(DrawingWand *wand,const double ox,const double oy,
   assert(wand->signature == WandSignature);
   if (wand->debug != MagickFalse)
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
-  (void) MvgPrintf(wand,"ellipse %.15g,%.15g %.15g,%.15g %.15g,%.15g\n",ox,oy,
+  (void) MvgPrintf(wand,"ellipse %g,%g %g,%g %g,%g\n",ox,oy,
     rx,ry,start,end);
 }
 \f
@@ -1683,14 +1683,14 @@ WandExport StyleType DrawGetFontStyle(const DrawingWand *wand)
 %
 %  The format of the DrawGetFontWeight method is:
 %
-%      unsigned long DrawGetFontWeight(const DrawingWand *wand)
+%      size_t DrawGetFontWeight(const DrawingWand *wand)
 %
 %  A description of each parameter follows:
 %
 %    o wand: the drawing wand.
 %
 */
-WandExport unsigned long DrawGetFontWeight(const DrawingWand *wand)
+WandExport size_t DrawGetFontWeight(const DrawingWand *wand)
 {
   assert(wand != (const DrawingWand *) NULL);
   assert(wand->signature == WandSignature);
@@ -1855,7 +1855,7 @@ WandExport void DrawGetStrokeColor(const DrawingWand *wand,
 %  The format of the DrawGetStrokeDashArray method is:
 %
 %      double *DrawGetStrokeDashArray(const DrawingWand *wand,
-%        unsigned long *number_elements)
+%        size_t *number_elements)
 %
 %  A description of each parameter follows:
 %
@@ -1865,7 +1865,7 @@ WandExport void DrawGetStrokeColor(const DrawingWand *wand,
 %
 */
 WandExport double *DrawGetStrokeDashArray(const DrawingWand *wand,
-  unsigned long *number_elements)
+  size_t *number_elements)
 {
   double
     *dash_array;
@@ -1876,17 +1876,17 @@ WandExport double *DrawGetStrokeDashArray(const DrawingWand *wand,
   register double
     *q;
 
-  register long
+  register ssize_t
     i;
 
-  unsigned long
+  size_t
     n;
 
   assert(wand != (const DrawingWand *) NULL);
   assert(wand->signature == WandSignature);
   if (wand->debug != MagickFalse)
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
-  assert(number_elements != (unsigned long *) NULL);
+  assert(number_elements != (size_t *) NULL);
   n=0;
   p=CurrentContext->dash_pattern;
   if (p != (const double *) NULL)
@@ -1900,7 +1900,7 @@ WandExport double *DrawGetStrokeDashArray(const DrawingWand *wand,
         sizeof(*dash_array));
       p=CurrentContext->dash_pattern;
       q=dash_array;
-      for (i=0; i < (long) n; i++)
+      for (i=0; i < (ssize_t) n; i++)
         *q++=(*p++);
     }
   return(dash_array);
@@ -2024,14 +2024,14 @@ WandExport LineJoin DrawGetStrokeLineJoin(const DrawingWand *wand)
 %
 %  The format of the DrawGetStrokeMiterLimit method is:
 %
-%      unsigned long DrawGetStrokeMiterLimit(const DrawingWand *wand)
+%      size_t DrawGetStrokeMiterLimit(const DrawingWand *wand)
 %
 %  A description of each parameter follows:
 %
 %    o wand: the drawing wand.
 %
 */
-WandExport unsigned long DrawGetStrokeMiterLimit(const DrawingWand *wand)
+WandExport size_t DrawGetStrokeMiterLimit(const DrawingWand *wand)
 {
   assert(wand != (const DrawingWand *) NULL);
   assert(wand->signature == WandSignature);
@@ -2381,7 +2381,7 @@ WandExport char *DrawGetVectorGraphics(DrawingWand *wand)
   MagickPixelPacket
     pixel;
 
-  register long
+  register ssize_t
     i;
 
   XMLTreeInfo
@@ -2403,14 +2403,14 @@ WandExport char *DrawGetVectorGraphics(DrawingWand *wand)
   if (child != (XMLTreeInfo *) NULL)
     {
       (void) CopyMagickString(value,MagickOptionToMnemonic(
-        MagickClipPathOptions,(long) CurrentContext->clip_units),MaxTextExtent);
+        MagickClipPathOptions,(ssize_t) CurrentContext->clip_units),MaxTextExtent);
       (void) SetXMLTreeContent(child,value);
     }
   child=AddChildToXMLTree(xml_info,"decorate",0);
   if (child != (XMLTreeInfo *) NULL)
     {
       (void) CopyMagickString(value,MagickOptionToMnemonic(
-        MagickDecorateOptions,(long) CurrentContext->decorate),MaxTextExtent);
+        MagickDecorateOptions,(ssize_t) CurrentContext->decorate),MaxTextExtent);
       (void) SetXMLTreeContent(child,value);
     }
   child=AddChildToXMLTree(xml_info,"encoding",0);
@@ -2430,7 +2430,7 @@ WandExport char *DrawGetVectorGraphics(DrawingWand *wand)
   child=AddChildToXMLTree(xml_info,"fill-opacity",0);
   if (child != (XMLTreeInfo *) NULL)
     {
-      (void) FormatMagickString(value,MaxTextExtent,"%.15g",
+      (void) FormatMagickString(value,MaxTextExtent,"%g",
         (double) QuantumScale*(QuantumRange-CurrentContext->fill.opacity));
       (void) SetXMLTreeContent(child,value);
     }
@@ -2438,7 +2438,7 @@ WandExport char *DrawGetVectorGraphics(DrawingWand *wand)
   if (child != (XMLTreeInfo *) NULL)
     {
       (void) CopyMagickString(value,MagickOptionToMnemonic(
-        MagickFillRuleOptions,(long) CurrentContext->fill_rule),MaxTextExtent);
+        MagickFillRuleOptions,(ssize_t) CurrentContext->fill_rule),MaxTextExtent);
       (void) SetXMLTreeContent(child,value);
     }
   child=AddChildToXMLTree(xml_info,"font",0);
@@ -2450,7 +2450,7 @@ WandExport char *DrawGetVectorGraphics(DrawingWand *wand)
   child=AddChildToXMLTree(xml_info,"font-size",0);
   if (child != (XMLTreeInfo *) NULL)
     {
-      (void) FormatMagickString(value,MaxTextExtent,"%.15g",
+      (void) FormatMagickString(value,MaxTextExtent,"%g",
         CurrentContext->pointsize);
       (void) SetXMLTreeContent(child,value);
     }
@@ -2458,20 +2458,20 @@ WandExport char *DrawGetVectorGraphics(DrawingWand *wand)
   if (child != (XMLTreeInfo *) NULL)
     {
       (void) CopyMagickString(value,MagickOptionToMnemonic(
-        MagickStretchOptions,(long) CurrentContext->stretch),MaxTextExtent);
+        MagickStretchOptions,(ssize_t) CurrentContext->stretch),MaxTextExtent);
       (void) SetXMLTreeContent(child,value);
     }
   child=AddChildToXMLTree(xml_info,"font-style",0);
   if (child != (XMLTreeInfo *) NULL)
     {
       (void) CopyMagickString(value,MagickOptionToMnemonic(
-        MagickStyleOptions,(long) CurrentContext->style),MaxTextExtent);
+        MagickStyleOptions,(ssize_t) CurrentContext->style),MaxTextExtent);
       (void) SetXMLTreeContent(child,value);
     }
   child=AddChildToXMLTree(xml_info,"font-weight",0);
   if (child != (XMLTreeInfo *) NULL)
     {
-      (void) FormatMagickString(value,MaxTextExtent,"%lu",
+      (void) FormatMagickString(value,MaxTextExtent,"%.20g",(double)
         CurrentContext->weight);
       (void) SetXMLTreeContent(child,value);
     }
@@ -2479,7 +2479,7 @@ WandExport char *DrawGetVectorGraphics(DrawingWand *wand)
   if (child != (XMLTreeInfo *) NULL)
     {
       (void) CopyMagickString(value,MagickOptionToMnemonic(MagickGravityOptions,
-        (long) CurrentContext->gravity),MaxTextExtent);
+        (ssize_t) CurrentContext->gravity),MaxTextExtent);
       (void) SetXMLTreeContent(child,value);
     }
   child=AddChildToXMLTree(xml_info,"stroke",0);
@@ -2512,7 +2512,7 @@ WandExport char *DrawGetVectorGraphics(DrawingWand *wand)
       {
         if (i != 0)
           (void) ConcatenateString(&dash_pattern,",");
-        (void) FormatMagickString(value,MaxTextExtent,"%.15g",
+        (void) FormatMagickString(value,MaxTextExtent,"%g",
           CurrentContext->dash_pattern[i]);
         (void) ConcatenateString(&dash_pattern,value);
       }
@@ -2522,7 +2522,7 @@ WandExport char *DrawGetVectorGraphics(DrawingWand *wand)
   child=AddChildToXMLTree(xml_info,"stroke-dashoffset",0);
   if (child != (XMLTreeInfo *) NULL)
     {
-      (void) FormatMagickString(value,MaxTextExtent,"%.15g",
+      (void) FormatMagickString(value,MaxTextExtent,"%g",
         CurrentContext->dash_offset);
       (void) SetXMLTreeContent(child,value);
     }
@@ -2530,34 +2530,35 @@ WandExport char *DrawGetVectorGraphics(DrawingWand *wand)
   if (child != (XMLTreeInfo *) NULL)
     {
       (void) CopyMagickString(value,MagickOptionToMnemonic(MagickLineCapOptions,
-        (long) CurrentContext->linecap),MaxTextExtent);
+        (ssize_t) CurrentContext->linecap),MaxTextExtent);
       (void) SetXMLTreeContent(child,value);
     }
   child=AddChildToXMLTree(xml_info,"stroke-linejoin",0);
   if (child != (XMLTreeInfo *) NULL)
     {
       (void) CopyMagickString(value,MagickOptionToMnemonic(
-        MagickLineJoinOptions,(long) CurrentContext->linejoin),MaxTextExtent);
+        MagickLineJoinOptions,(ssize_t) CurrentContext->linejoin),
+        MaxTextExtent);
       (void) SetXMLTreeContent(child,value);
     }
   child=AddChildToXMLTree(xml_info,"stroke-miterlimit",0);
   if (child != (XMLTreeInfo *) NULL)
     {
-      (void) FormatMagickString(value,MaxTextExtent,"%lu",
+      (void) FormatMagickString(value,MaxTextExtent,"%.20g",(double)
         CurrentContext->miterlimit);
       (void) SetXMLTreeContent(child,value);
     }
   child=AddChildToXMLTree(xml_info,"stroke-opacity",0);
   if (child != (XMLTreeInfo *) NULL)
     {
-      (void) FormatMagickString(value,MaxTextExtent,"%.15g",
+      (void) FormatMagickString(value,MaxTextExtent,"%g",
         (double) QuantumScale*(QuantumRange-CurrentContext->stroke.opacity));
       (void) SetXMLTreeContent(child,value);
     }
   child=AddChildToXMLTree(xml_info,"stroke-width",0);
   if (child != (XMLTreeInfo *) NULL)
     {
-      (void) FormatMagickString(value,MaxTextExtent,"%.15g",
+      (void) FormatMagickString(value,MaxTextExtent,"%g",
         CurrentContext->stroke_width);
       (void) SetXMLTreeContent(child,value);
     }
@@ -2565,7 +2566,7 @@ WandExport char *DrawGetVectorGraphics(DrawingWand *wand)
   if (child != (XMLTreeInfo *) NULL)
     {
       (void) CopyMagickString(value,MagickOptionToMnemonic(MagickAlignOptions,
-        (long) CurrentContext->align),MaxTextExtent);
+        (ssize_t) CurrentContext->align),MaxTextExtent);
       (void) SetXMLTreeContent(child,value);
     }
   child=AddChildToXMLTree(xml_info,"text-antialias",0);
@@ -2670,7 +2671,7 @@ WandExport void DrawLine(DrawingWand *wand,const double sx,const double sy,
   assert(wand->signature == WandSignature);
   if (wand->debug != MagickFalse)
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
-  (void) MvgPrintf(wand,"line %.15g,%.15g %.15g,%.15g\n",sx,sy,ex,ey);
+  (void) MvgPrintf(wand,"line %g,%g %g,%g\n",sx,sy,ex,ey);
 }
 \f
 /*
@@ -2719,8 +2720,8 @@ WandExport void DrawMatte(DrawingWand *wand,const double x,const double y,
   assert(wand->signature == WandSignature);
   if (wand->debug != MagickFalse)
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
-  (void) MvgPrintf(wand,"matte %.15g,%.15g '%s'\n",x,y,MagickOptionToMnemonic(
-    MagickMethodOptions,(long) paint_method));
+  (void) MvgPrintf(wand,"matte %g,%g '%s'\n",x,y,MagickOptionToMnemonic(
+    MagickMethodOptions,(ssize_t) paint_method));
 }
 \f
 /*
@@ -2812,11 +2813,11 @@ static void DrawPathCurveTo(DrawingWand *wand,const PathMode mode,
     {
       wand->path_operation=PathCurveToOperation;
       wand->path_mode=mode;
-      (void) MvgAutoWrapPrintf(wand, "%c%.15g,%.15g %.15g,%.15g %.15g,%.15g",
+      (void) MvgAutoWrapPrintf(wand, "%c%g,%g %g,%g %g,%g",
         mode == AbsolutePathMode ? 'C' : 'c',x1,y1,x2,y2,x,y);
     }
   else
-    (void) MvgAutoWrapPrintf(wand," %.15g,%.15g %.15g,%.15g %.15g,%.15g",x1,y1,
+    (void) MvgAutoWrapPrintf(wand," %g,%g %g,%g %g,%g",x1,y1,
       x2,y2,x,y);
 }
 
@@ -2927,11 +2928,11 @@ static void DrawPathCurveToQuadraticBezier(DrawingWand *wand,
     {
       wand->path_operation=PathCurveToQuadraticBezierOperation;
       wand->path_mode=mode;
-      (void) MvgAutoWrapPrintf(wand, "%c%.15g,%.15g %.15g,%.15g",
+      (void) MvgAutoWrapPrintf(wand, "%c%g,%g %g,%g",
          mode == AbsolutePathMode ? 'Q' : 'q',x1,y1,x,y);
     }
   else
-    (void) MvgAutoWrapPrintf(wand," %.15g,%.15g %.15g,%.15g",x1,y1,x,y);
+    (void) MvgAutoWrapPrintf(wand," %g,%g %g,%g",x1,y1,x,y);
 }
 
 WandExport void DrawPathCurveToQuadraticBezierAbsolute(DrawingWand *wand,
@@ -3039,11 +3040,11 @@ static void DrawPathCurveToQuadraticBezierSmooth(DrawingWand *wand,
     {
       wand->path_operation=PathCurveToQuadraticBezierSmoothOperation;
       wand->path_mode=mode;
-      (void) MvgAutoWrapPrintf(wand,"%c%.15g,%.15g",mode == AbsolutePathMode ?
+      (void) MvgAutoWrapPrintf(wand,"%c%g,%g",mode == AbsolutePathMode ?
         'T' : 't',x,y);
     }
   else
-    (void) MvgAutoWrapPrintf(wand," %.15g,%.15g",x,y);
+    (void) MvgAutoWrapPrintf(wand," %g,%g",x,y);
 }
 
 WandExport void DrawPathCurveToQuadraticBezierSmoothAbsolute(DrawingWand *wand,
@@ -3153,11 +3154,11 @@ static void DrawPathCurveToSmooth(DrawingWand *wand,const PathMode mode,
     {
       wand->path_operation=PathCurveToSmoothOperation;
       wand->path_mode=mode;
-      (void) MvgAutoWrapPrintf(wand,"%c%.15g,%.15g %.15g,%.15g",
+      (void) MvgAutoWrapPrintf(wand,"%c%g,%g %g,%g",
         mode == AbsolutePathMode ? 'S' : 's',x2,y2,x,y);
     }
   else
-    (void) MvgAutoWrapPrintf(wand," %.15g,%.15g %.15g,%.15g",x2,y2,x,y);
+    (void) MvgAutoWrapPrintf(wand," %g,%g %g,%g",x2,y2,x,y);
 }
 
 WandExport void DrawPathCurveToSmoothAbsolute(DrawingWand *wand,const double x2,
@@ -3283,12 +3284,12 @@ static void DrawPathEllipticArc(DrawingWand *wand, const PathMode mode,
     {
       wand->path_operation=PathEllipticArcOperation;
       wand->path_mode=mode;
-      (void) MvgAutoWrapPrintf(wand, "%c%.15g,%.15g %.15g %u %u %.15g,%.15g",
+      (void) MvgAutoWrapPrintf(wand, "%c%g,%g %g %u %u %g,%g",
         mode == AbsolutePathMode ? 'A' : 'a',rx,ry,x_axis_rotation,
         large_arc_flag,sweep_flag,x,y);
     }
   else
-    (void) MvgAutoWrapPrintf(wand," %.15g,%.15g %.15g %u %u %.15g,%.15g",rx,ry,
+    (void) MvgAutoWrapPrintf(wand," %g,%g %g %u %u %g,%g",rx,ry,
       x_axis_rotation,large_arc_flag,sweep_flag,x,y);
 }
 
@@ -3435,11 +3436,11 @@ static void DrawPathLineTo(DrawingWand *wand,const PathMode mode,
     {
       wand->path_operation=PathLineToOperation;
       wand->path_mode=mode;
-      (void) MvgAutoWrapPrintf(wand,"%c%.15g,%.15g",mode == AbsolutePathMode ?
+      (void) MvgAutoWrapPrintf(wand,"%c%g,%g",mode == AbsolutePathMode ?
         'L' : 'l',x,y);
     }
   else
-    (void) MvgAutoWrapPrintf(wand," %.15g,%.15g",x,y);
+    (void) MvgAutoWrapPrintf(wand," %g,%g",x,y);
 }
 
 WandExport void DrawPathLineToAbsolute(DrawingWand *wand,const double x,
@@ -3531,11 +3532,11 @@ static void DrawPathLineToHorizontal(DrawingWand *wand,const PathMode mode,
     {
       wand->path_operation=PathLineToHorizontalOperation;
       wand->path_mode=mode;
-      (void) MvgAutoWrapPrintf(wand,"%c%.15g",mode == AbsolutePathMode ?
+      (void) MvgAutoWrapPrintf(wand,"%c%g",mode == AbsolutePathMode ?
         'H' : 'h',x);
     }
   else
-    (void) MvgAutoWrapPrintf(wand," %.15g",x);
+    (void) MvgAutoWrapPrintf(wand," %g",x);
 }
 
 WandExport void DrawPathLineToHorizontalAbsolute(DrawingWand *wand,
@@ -3621,11 +3622,11 @@ static void DrawPathLineToVertical(DrawingWand *wand,const PathMode mode,
     {
       wand->path_operation=PathLineToVerticalOperation;
       wand->path_mode=mode;
-      (void) MvgAutoWrapPrintf(wand,"%c%.15g",mode == AbsolutePathMode ?
+      (void) MvgAutoWrapPrintf(wand,"%c%g",mode == AbsolutePathMode ?
         'V' : 'v',y);
     }
   else
-    (void) MvgAutoWrapPrintf(wand," %.15g",y);
+    (void) MvgAutoWrapPrintf(wand," %g",y);
 }
 
 WandExport void DrawPathLineToVerticalAbsolute(DrawingWand *wand,const double y)
@@ -3714,11 +3715,11 @@ static void DrawPathMoveTo(DrawingWand *wand,const PathMode mode,const double x,
     {
       wand->path_operation=PathMoveToOperation;
       wand->path_mode=mode;
-      (void) MvgAutoWrapPrintf(wand,"%c%.15g,%.15g",mode == AbsolutePathMode ?
+      (void) MvgAutoWrapPrintf(wand,"%c%g,%g",mode == AbsolutePathMode ?
         'M' : 'm',x,y);
     }
   else
-    (void) MvgAutoWrapPrintf(wand," %.15g,%.15g",x,y);
+    (void) MvgAutoWrapPrintf(wand," %g,%g",x,y);
 }
 
 WandExport void DrawPathMoveToAbsolute(DrawingWand *wand,const double x,
@@ -3839,7 +3840,7 @@ WandExport void DrawPoint(DrawingWand *wand,const double x,const double y)
   assert(wand->signature == WandSignature);
   if (wand->debug != MagickFalse)
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
-  (void) MvgPrintf(wand,"point %.15g,%.15g\n",x,y);
+  (void) MvgPrintf(wand,"point %g,%g\n",x,y);
 }
 \f
 /*
@@ -3859,7 +3860,7 @@ WandExport void DrawPoint(DrawingWand *wand,const double x,const double y)
 %  The format of the DrawPolygon method is:
 %
 %      void DrawPolygon(DrawingWand *wand,
-%        const unsigned long number_coordinates,const PointInfo *coordinates)
+%        const size_t number_coordinates,const PointInfo *coordinates)
 %
 %  A description of each parameter follows:
 %
@@ -3871,7 +3872,7 @@ WandExport void DrawPoint(DrawingWand *wand,const double x,const double y)
 %
 */
 WandExport void DrawPolygon(DrawingWand *wand,
-  const unsigned long number_coordinates,const PointInfo *coordinates)
+  const size_t number_coordinates,const PointInfo *coordinates)
 {
   assert(wand != (DrawingWand *) NULL);
   assert(wand->signature == WandSignature);
@@ -3897,7 +3898,7 @@ WandExport void DrawPolygon(DrawingWand *wand,
 %  The format of the DrawPolyline method is:
 %
 %      void DrawPolyline(DrawingWand *wand,
-%        const unsigned long number_coordinates,const PointInfo *coordinates)
+%        const size_t number_coordinates,const PointInfo *coordinates)
 %
 %  A description of each parameter follows:
 %
@@ -3909,7 +3910,7 @@ WandExport void DrawPolygon(DrawingWand *wand,
 %
 */
 WandExport void DrawPolyline(DrawingWand *wand,
-  const unsigned long number_coordinates,const PointInfo *coordinates)
+  const size_t number_coordinates,const PointInfo *coordinates)
 {
   assert(wand != (DrawingWand *) NULL);
   assert(wand->signature == WandSignature);
@@ -4026,9 +4027,9 @@ WandExport MagickBooleanType DrawPopPattern(DrawingWand *wand)
     }
   (void) FormatMagickString(key,MaxTextExtent,"%s",wand->pattern_id);
   (void) SetImageArtifact(wand->image,key,wand->mvg+wand->pattern_offset);
-  (void) FormatMagickString(geometry,MaxTextExtent,"%lux%lu%+ld%+ld",
-    wand->pattern_bounds.width,wand->pattern_bounds.height,
-    wand->pattern_bounds.x,wand->pattern_bounds.y);
+  (void) FormatMagickString(geometry,MaxTextExtent,"%.20gx%.20g%+.20g%+.20g",
+    (double) wand->pattern_bounds.width,(double) wand->pattern_bounds.height,
+    (double) wand->pattern_bounds.x,(double) wand->pattern_bounds.y);
   (void) SetImageArtifact(wand->image,key,geometry);
   wand->pattern_id=DestroyString(wand->pattern_id);
   wand->pattern_offset=0;
@@ -4169,14 +4170,14 @@ WandExport MagickBooleanType DrawPushPattern(DrawingWand *wand,
       return(MagickFalse);
     }
   wand->filter_off=MagickTrue;
-  (void) MvgPrintf(wand,"push pattern %s %.15g,%.15g %.15g,%.15g\n",pattern_id,
+  (void) MvgPrintf(wand,"push pattern %s %g,%g %g,%g\n",pattern_id,
     x,y,width,height);
   wand->indent_depth++;
   wand->pattern_id=AcquireString(pattern_id);
-  wand->pattern_bounds.x=(long) ceil(x-0.5);
-  wand->pattern_bounds.y=(long) ceil(y-0.5);
-  wand->pattern_bounds.width=(unsigned long) (width+0.5);
-  wand->pattern_bounds.height=(unsigned long) (height+0.5);
+  wand->pattern_bounds.x=(ssize_t) ceil(x-0.5);
+  wand->pattern_bounds.y=(ssize_t) ceil(y-0.5);
+  wand->pattern_bounds.width=(size_t) floor(width+0.5);
+  wand->pattern_bounds.height=(size_t) floor(height+0.5);
   wand->pattern_offset=wand->mvg_length;
   return(MagickTrue);
 }
@@ -4218,7 +4219,7 @@ WandExport void DrawRectangle(DrawingWand *wand,const double x1,const double y1,
   assert(wand->signature == WandSignature);
   if (wand->debug != MagickFalse)
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
-  (void) MvgPrintf(wand,"rectangle %.15g,%.15g %.15g,%.15g\n",x1,y1,x2,y2);
+  (void) MvgPrintf(wand,"rectangle %g,%g %g,%g\n",x1,y1,x2,y2);
 }
 \f
 /*
@@ -4338,7 +4339,7 @@ WandExport void DrawRotate(DrawingWand *wand,const double degrees)
   affine.ry=(-sin(DegreesToRadians(fmod(degrees,360.0))));
   affine.sy=cos(DegreesToRadians(fmod(degrees,360.0)));
   AdjustAffine(wand,&affine);
-  (void) MvgPrintf(wand,"rotate %.15g\n",degrees);
+  (void) MvgPrintf(wand,"rotate %g\n",degrees);
 }
 \f
 /*
@@ -4385,7 +4386,7 @@ WandExport void DrawRoundRectangle(DrawingWand *wand,double x1,double y1,
   assert(wand->signature == WandSignature);
   if (wand->debug != MagickFalse)
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
-  (void) MvgPrintf(wand,"roundrectangle %.15g,%.15g %.15g,%.15g %.15g,%.15g\n",
+  (void) MvgPrintf(wand,"roundrectangle %g,%g %g,%g %g,%g\n",
     x1,y1,x2,y2,rx,ry);
 }
 \f
@@ -4429,7 +4430,7 @@ WandExport void DrawScale(DrawingWand *wand,const double x,const double y)
   affine.sx=x;
   affine.sy=y;
   AdjustAffine(wand,&affine);
-  (void) MvgPrintf(wand,"scale %.15g,%.15g\n",x,y);
+  (void) MvgPrintf(wand,"scale %g,%g\n",x,y);
 }
 \f
 /*
@@ -4509,7 +4510,7 @@ WandExport void DrawSetBorderColor(DrawingWand *wand,const PixelWand *border_wan
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
 %  DrawSetClipPath() associates a named clipping path with the image.  Only
-%  the areas drawn on by the clipping path will be modified as long as it
+%  the areas drawn on by the clipping path will be modified as ssize_t as it
 %  remains in effect.
 %
 %  The format of the DrawSetClipPath method is:
@@ -4582,7 +4583,7 @@ WandExport void DrawSetClipRule(DrawingWand *wand,const FillRule fill_rule)
     {
       CurrentContext->fill_rule=fill_rule;
       (void) MvgPrintf(wand, "clip-rule '%s'\n",MagickOptionToMnemonic(
-        MagickFillRuleOptions,(long) fill_rule));
+        MagickFillRuleOptions,(ssize_t) fill_rule));
     }
 }
 \f
@@ -4636,7 +4637,7 @@ WandExport void DrawSetClipUnits(DrawingWand *wand,
           AdjustAffine(wand,&affine);
         }
       (void) MvgPrintf(wand, "clip-units '%s'\n",MagickOptionToMnemonic(
-        MagickClipPathOptions,(long) clip_units));
+        MagickClipPathOptions,(ssize_t) clip_units));
     }
 }
 \f
@@ -4723,12 +4724,12 @@ WandExport void DrawSetFillOpacity(DrawingWand *wand,const double fill_opacity)
   assert(wand->signature == WandSignature);
   if (wand->debug != MagickFalse)
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
-  opacity=RoundToQuantum((double) QuantumRange*(1.0-fill_opacity));
+  opacity=ClampToQuantum((double) QuantumRange*(1.0-fill_opacity));
   if ((wand->filter_off != MagickFalse) ||
       (CurrentContext->fill.opacity != opacity))
     {
       CurrentContext->fill.opacity=opacity;
-      (void) MvgPrintf(wand,"fill-opacity %.15g\n",fill_opacity);
+      (void) MvgPrintf(wand,"fill-opacity %g\n",fill_opacity);
     }
 }
 \f
@@ -4766,12 +4767,12 @@ WandExport void DrawSetOpacity(DrawingWand *wand,const double opacity)
   assert(wand->signature == WandSignature);
   if (wand->debug != MagickFalse)
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
-  quantum_opacity=RoundToQuantum((double) QuantumRange*(1.0-opacity));
+  quantum_opacity=ClampToQuantum((double) QuantumRange*(1.0-opacity));
   if ((wand->filter_off != MagickFalse) ||
       (CurrentContext->opacity != quantum_opacity))
     {
-      CurrentContext->opacity=opacity;
-      (void) MvgPrintf(wand,"opacity %.15g\n",opacity);
+      CurrentContext->opacity=(Quantum) opacity;
+      (void) MvgPrintf(wand,"opacity %g\n",opacity);
     }
 }
 \f
@@ -4874,7 +4875,7 @@ WandExport void DrawSetFillRule(DrawingWand *wand,const FillRule fill_rule)
     {
       CurrentContext->fill_rule=fill_rule;
       (void) MvgPrintf(wand, "fill-rule '%s'\n",MagickOptionToMnemonic(
-        MagickFillRuleOptions,(long) fill_rule));
+        MagickFillRuleOptions,(ssize_t) fill_rule));
     }
 }
 \f
@@ -4998,7 +4999,7 @@ WandExport void DrawSetFontSize(DrawingWand *wand,const double pointsize)
       (fabs(CurrentContext->pointsize-pointsize) > MagickEpsilon))
     {
       CurrentContext->pointsize=pointsize;
-      (void) MvgPrintf(wand,"font-size %.15g\n",pointsize);
+      (void) MvgPrintf(wand,"font-size %g\n",pointsize);
     }
 }
 \f
@@ -5043,7 +5044,7 @@ WandExport void DrawSetFontStretch(DrawingWand *wand,
     {
       CurrentContext->stretch=font_stretch;
       (void) MvgPrintf(wand, "font-stretch '%s'\n",MagickOptionToMnemonic(
-        MagickStretchOptions,(long) font_stretch));
+        MagickStretchOptions,(ssize_t) font_stretch));
     }
 }
 \f
@@ -5083,7 +5084,7 @@ WandExport void DrawSetFontStyle(DrawingWand *wand,const StyleType style)
     {
       CurrentContext->style=style;
       (void) MvgPrintf(wand, "font-style '%s'\n",MagickOptionToMnemonic(
-        MagickStyleOptions,(long) style));
+        MagickStyleOptions,(ssize_t) style));
     }
 }
 \f
@@ -5103,7 +5104,7 @@ WandExport void DrawSetFontStyle(DrawingWand *wand,const StyleType style)
 %  The format of the DrawSetFontWeight method is:
 %
 %      void DrawSetFontWeight(DrawingWand *wand,
-%        const unsigned long font_weight)
+%        const size_t font_weight)
 %
 %  A description of each parameter follows:
 %
@@ -5113,7 +5114,7 @@ WandExport void DrawSetFontStyle(DrawingWand *wand,const StyleType style)
 %
 */
 WandExport void DrawSetFontWeight(DrawingWand *wand,
-  const unsigned long font_weight)
+  const size_t font_weight)
 {
   assert(wand != (DrawingWand *) NULL);
   assert(wand->signature == WandSignature);
@@ -5123,7 +5124,7 @@ WandExport void DrawSetFontWeight(DrawingWand *wand,
       (CurrentContext->weight != font_weight))
     {
       CurrentContext->weight=font_weight;
-      (void) MvgPrintf(wand,"font-weight %lu\n",font_weight);
+      (void) MvgPrintf(wand,"font-weight %.20g\n",(double) font_weight);
     }
 }
 \f
@@ -5166,7 +5167,7 @@ WandExport void DrawSetGravity(DrawingWand *wand,const GravityType gravity)
     {
       CurrentContext->gravity=gravity;
       (void) MvgPrintf(wand,"gravity '%s'\n",MagickOptionToMnemonic(
-        MagickGravityOptions,(long) gravity));
+        MagickGravityOptions,(ssize_t) gravity));
     }
 }
 \f
@@ -5345,7 +5346,7 @@ WandExport void DrawSetStrokeAntialias(DrawingWand *wand,
 %  The format of the DrawSetStrokeDashArray method is:
 %
 %      MagickBooleanType DrawSetStrokeDashArray(DrawingWand *wand,
-%        const unsigned long number_elements,const double *dash_array)
+%        const size_t number_elements,const double *dash_array)
 %
 %  A description of each parameter follows:
 %
@@ -5357,7 +5358,7 @@ WandExport void DrawSetStrokeAntialias(DrawingWand *wand,
 %
 */
 WandExport MagickBooleanType DrawSetStrokeDashArray(DrawingWand *wand,
-  const unsigned long number_elements,const double *dash_array)
+  const size_t number_elements,const double *dash_array)
 {
   MagickBooleanType
     update;
@@ -5368,10 +5369,10 @@ WandExport MagickBooleanType DrawSetStrokeDashArray(DrawingWand *wand,
   register double
     *q;
 
-  register long
+  register ssize_t
     i;
 
-  unsigned long
+  size_t
     n_new,
     n_old;
 
@@ -5397,7 +5398,7 @@ WandExport MagickBooleanType DrawSetStrokeDashArray(DrawingWand *wand,
         {
           p=dash_array;
           q=CurrentContext->dash_pattern;
-          for (i=0; i < (long) n_new; i++)
+          for (i=0; i < (ssize_t) n_new; i++)
           {
             if (fabs((*p)-(*q)) > MagickEpsilon)
               {
@@ -5425,7 +5426,7 @@ WandExport MagickBooleanType DrawSetStrokeDashArray(DrawingWand *wand,
             }
           q=CurrentContext->dash_pattern;
           p=dash_array;
-          for (i=0; i < (long) n_new; i++)
+          for (i=0; i < (ssize_t) n_new; i++)
             *q++=(*p++);
           *q=0;
         }
@@ -5435,9 +5436,9 @@ WandExport MagickBooleanType DrawSetStrokeDashArray(DrawingWand *wand,
       else
         {
           p=dash_array;
-          (void) MvgPrintf(wand,"%.15g",*p++);
-          for (i=1; i < (long) n_new; i++)
-            (void) MvgPrintf(wand,",%.15g",*p++);
+          (void) MvgPrintf(wand,"%g",*p++);
+          for (i=1; i < (ssize_t) n_new; i++)
+            (void) MvgPrintf(wand,",%g",*p++);
           (void) MvgPrintf(wand,"\n");
         }
     }
@@ -5481,7 +5482,7 @@ WandExport void DrawSetStrokeDashOffset(DrawingWand *wand,
      (fabs(CurrentContext->dash_offset-dash_offset) > MagickEpsilon))
     {
       CurrentContext->dash_offset=dash_offset;
-      (void) MvgPrintf(wand,"stroke-dashoffset %.15g\n",dash_offset);
+      (void) MvgPrintf(wand,"stroke-dashoffset %g\n",dash_offset);
     }
 }
 \f
@@ -5523,7 +5524,7 @@ WandExport void DrawSetStrokeLineCap(DrawingWand *wand,const LineCap linecap)
     {
       CurrentContext->linecap=linecap;
       (void) MvgPrintf(wand,"stroke-linecap '%s'\n",MagickOptionToMnemonic(
-        MagickLineCapOptions,(long) linecap));
+        MagickLineCapOptions,(ssize_t) linecap));
     }
 }
 \f
@@ -5565,7 +5566,7 @@ WandExport void DrawSetStrokeLineJoin(DrawingWand *wand,const LineJoin linejoin)
     {
       CurrentContext->linejoin=linejoin;
       (void) MvgPrintf(wand, "stroke-linejoin '%s'\n",MagickOptionToMnemonic(
-        MagickLineJoinOptions,(long) linejoin));
+        MagickLineJoinOptions,(ssize_t) linejoin));
     }
 }
 \f
@@ -5589,7 +5590,7 @@ WandExport void DrawSetStrokeLineJoin(DrawingWand *wand,const LineJoin linejoin)
 %  The format of the DrawSetStrokeMiterLimit method is:
 %
 %      void DrawSetStrokeMiterLimit(DrawingWand *wand,
-%        const unsigned long miterlimit)
+%        const size_t miterlimit)
 %
 %  A description of each parameter follows:
 %
@@ -5599,7 +5600,7 @@ WandExport void DrawSetStrokeLineJoin(DrawingWand *wand,const LineJoin linejoin)
 %
 */
 WandExport void DrawSetStrokeMiterLimit(DrawingWand *wand,
-  const unsigned long miterlimit)
+  const size_t miterlimit)
 {
   assert(wand != (DrawingWand *) NULL);
   assert(wand->signature == WandSignature);
@@ -5608,7 +5609,7 @@ WandExport void DrawSetStrokeMiterLimit(DrawingWand *wand,
   if (CurrentContext->miterlimit != miterlimit)
     {
       CurrentContext->miterlimit=miterlimit;
-      (void) MvgPrintf(wand,"stroke-miterlimit %lu\n",miterlimit);
+      (void) MvgPrintf(wand,"stroke-miterlimit %.20g\n",(double) miterlimit);
     }
 }
 \f
@@ -5647,12 +5648,12 @@ WandExport void DrawSetStrokeOpacity(DrawingWand *wand,
   assert(wand->signature == WandSignature);
   if (wand->debug != MagickFalse)
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
-  opacity=RoundToQuantum((double) QuantumRange*(1.0-stroke_opacity));
+  opacity=ClampToQuantum((double) QuantumRange*(1.0-stroke_opacity));
   if ((wand->filter_off != MagickFalse) ||
       (CurrentContext->stroke.opacity != opacity))
     {
       CurrentContext->stroke.opacity=opacity;
-      (void) MvgPrintf(wand,"stroke-opacity %.15g\n",stroke_opacity);
+      (void) MvgPrintf(wand,"stroke-opacity %g\n",stroke_opacity);
     }
 }
 \f
@@ -5692,7 +5693,7 @@ WandExport void DrawSetStrokeWidth(DrawingWand *wand,const double stroke_width)
       (fabs(CurrentContext->stroke_width-stroke_width) > MagickEpsilon))
     {
       CurrentContext->stroke_width=stroke_width;
-      (void) MvgPrintf(wand,"stroke-width %.15g\n",stroke_width);
+      (void) MvgPrintf(wand,"stroke-width %g\n",stroke_width);
     }
 }
 \f
@@ -5734,7 +5735,7 @@ WandExport void DrawSetTextAlignment(DrawingWand *wand,
     {
       CurrentContext->align=alignment;
       (void) MvgPrintf(wand,"text-align '%s'\n",MagickOptionToMnemonic(
-        MagickAlignOptions,(long) alignment));
+        MagickAlignOptions,(ssize_t) alignment));
     }
 }
 \f
@@ -5819,7 +5820,7 @@ WandExport void DrawSetTextDecoration(DrawingWand *wand,
     {
       CurrentContext->decorate=decoration;
       (void) MvgPrintf(wand,"decorate '%s'\n",MagickOptionToMnemonic(
-        MagickDecorateOptions,(long) decoration));
+        MagickDecorateOptions,(ssize_t) decoration));
     }
 }
 \f
@@ -6132,7 +6133,7 @@ WandExport MagickBooleanType DrawSetVectorGraphics(DrawingWand *wand,
     {
       value=GetXMLTreeContent(child);
       if (value != (const char *) NULL)
-        CurrentContext->fill.opacity=RoundToQuantum((MagickRealType)
+        CurrentContext->fill.opacity=ClampToQuantum((MagickRealType)
           QuantumRange*(1.0-StringToDouble(value)));
     }
   child=GetXMLTreeChild(xml_info,"fill-rule");
@@ -6212,10 +6213,10 @@ WandExport MagickBooleanType DrawSetVectorGraphics(DrawingWand *wand,
       const char
         *q;
 
-      long
+      ssize_t
         j;
 
-      register long
+      register ssize_t
         x;
 
       value=GetXMLTreeContent(child);
@@ -6295,7 +6296,7 @@ WandExport MagickBooleanType DrawSetVectorGraphics(DrawingWand *wand,
     {
       value=GetXMLTreeContent(child);
       if (value != (const char *) NULL)
-        CurrentContext->stroke.opacity=RoundToQuantum((MagickRealType)
+        CurrentContext->stroke.opacity=ClampToQuantum((MagickRealType)
           QuantumRange*(1.0-StringToDouble(value)));
     }
   child=GetXMLTreeChild(xml_info,"stroke-width");
@@ -6377,7 +6378,7 @@ WandExport void DrawSkewX(DrawingWand *wand,const double degrees)
   GetAffineMatrix(&affine);
   affine.ry=tan(DegreesToRadians(fmod(degrees,360.0)));
   AdjustAffine(wand,&affine);
-  (void) MvgPrintf(wand,"skewX %.15g\n",degrees);
+  (void) MvgPrintf(wand,"skewX %g\n",degrees);
 }
 \f
 /*
@@ -6417,7 +6418,7 @@ WandExport void DrawSkewY(DrawingWand *wand,const double degrees)
   GetAffineMatrix(&affine);
   affine.rx=tan(DegreesToRadians(fmod(degrees,360.0)));
   DrawAffine(wand,&affine);
-  (void) MvgPrintf(wand,"skewY %.15g\n",degrees);
+  (void) MvgPrintf(wand,"skewY %g\n",degrees);
 }
 \f
 /*
@@ -6462,7 +6463,7 @@ WandExport void DrawTranslate(DrawingWand *wand,const double x,const double y)
   affine.tx=x;
   affine.ty=y;
   AdjustAffine(wand,&affine);
-  (void) MvgPrintf(wand,"translate %.15g,%.15g\n",x,y);
+  (void) MvgPrintf(wand,"translate %g,%g\n",x,y);
 }
 \f
 /*
@@ -6484,8 +6485,8 @@ WandExport void DrawTranslate(DrawingWand *wand,const double x,const double y)
 %
 %  The format of the DrawSetViewbox method is:
 %
-%      void DrawSetViewbox(DrawingWand *wand,unsigned long x1,
-%        unsigned long y1,unsigned long x2,unsigned long y2)
+%      void DrawSetViewbox(DrawingWand *wand,size_t x1,
+%        size_t y1,size_t x2,size_t y2)
 %
 %  A description of each parameter follows:
 %
@@ -6500,14 +6501,15 @@ WandExport void DrawTranslate(DrawingWand *wand,const double x,const double y)
 %    o y2: bottom y ordinate
 %
 */
-WandExport void DrawSetViewbox(DrawingWand *wand,unsigned long x1,
-  unsigned long y1,unsigned long x2,unsigned long y2)
+WandExport void DrawSetViewbox(DrawingWand *wand,ssize_t x1,ssize_t y1,
+  ssize_t x2,ssize_t y2)
 {
   assert(wand != (DrawingWand *) NULL);
   assert(wand->signature == WandSignature);
   if (wand->debug != MagickFalse)
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
-  (void) MvgPrintf(wand,"viewbox %lu %lu %lu %lu\n",x1,y1,x2,y2);
+  (void) MvgPrintf(wand,"viewbox %.20g %.20g %.20g %.20g\n",(double) x1,
+    (double) y1,(double) x2,(double) y2);
 }
 \f
 /*
@@ -6570,7 +6572,7 @@ WandExport DrawingWand *NewDrawingWand(void)
   DrawingWand
     *wand;
 
-  unsigned long
+  size_t
     depth;
 
   quantum=GetMagickQuantumDepth(&depth);
@@ -6582,8 +6584,8 @@ WandExport DrawingWand *NewDrawingWand(void)
       GetExceptionMessage(errno));
   (void) ResetMagickMemory(wand,0,sizeof(*wand));
   wand->id=AcquireWandId();
-  (void) FormatMagickString(wand->name,MaxTextExtent,"%s-%lu",DrawingWandId,
-    wand->id);
+  (void) FormatMagickString(wand->name,MaxTextExtent,"%s-%.20g",DrawingWandId,
+    (double) wand->id);
   if (wand->debug != MagickFalse)
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
   wand->mvg=(char *) NULL;