]> granicus.if.org Git - imagemagick/blobdiff - magick/xwindow.c
(no commit message)
[imagemagick] / magick / xwindow.c
index 5554c74621056d210204c08ec339bde7d6bbefd0..3f22290eebc73fe42732dd05fa2f670ad1d4ba81 100644 (file)
@@ -17,7 +17,7 @@
 %                                  July 1992                                  %
 %                                                                             %
 %                                                                             %
-%  Copyright 1999-2010 ImageMagick Studio LLC, a non-profit organization      %
+%  Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization      %
 %  dedicated to making software imaging solutions freely available.           %
 %                                                                             %
 %  You may not use this file except in compliance with the License.  You may  %
@@ -447,6 +447,9 @@ MagickExport void DestroyXResources(void)
 MagickExport MagickBooleanType XAnnotateImage(Display *display,
   const XPixelInfo *pixel,XAnnotateInfo *annotate_info,Image *image)
 {
+  CacheView
+    *annotate_view;
+
   GC
     annotate_context;
 
@@ -503,8 +506,8 @@ MagickExport MagickBooleanType XAnnotateImage(Display *display,
   context_values.background=0;
   context_values.foreground=(size_t) (~0);
   context_values.font=annotate_info->font_info->fid;
-  annotate_context=XCreateGC(display,root_window,(size_t)
-    GCBackground | GCFont | GCForeground,&context_values);
+  annotate_context=XCreateGC(display,root_window,(unsigned long)
+    (GCBackground | GCFont | GCForeground),&context_values);
   if (annotate_context == (GC) NULL)
     return(MagickFalse);
   /*
@@ -538,24 +541,25 @@ MagickExport MagickBooleanType XAnnotateImage(Display *display,
   x=0;
   y=0;
   (void) XParseGeometry(annotate_info->geometry,&x,&y,&width,&height);
-  (void) GetOneVirtualPixel(image,x,y,&annotate_image->background_color,
-    &image->exception);
+  (void) GetOneVirtualPixel(image,(ssize_t) x,(ssize_t) y,
+    &annotate_image->background_color,&image->exception);
   if (annotate_info->stencil == ForegroundStencil)
     annotate_image->matte=MagickTrue;
   exception=(&image->exception);
+  annotate_view=AcquireCacheView(annotate_image);
   for (y=0; y < (int) annotate_image->rows; y++)
   {
-    register ssize_t
+    register int
       x;
 
     register PixelPacket
       *restrict q;
 
-    q=GetAuthenticPixels(annotate_image,0,y,annotate_image->columns,1,
-      exception);
+    q=GetCacheViewAuthenticPixels(annotate_view,0,(ssize_t) y,
+      annotate_image->columns,1,exception);
     if (q == (PixelPacket *) NULL)
       break;
-    for (x=0; x < (ssize_t) annotate_image->columns; x++)
+    for (x=0; x < (int) annotate_image->columns; x++)
     {
       SetOpacityPixelComponent(q,OpaqueOpacity);
       if (XGetPixel(annotate_ximage,x,y) == 0)
@@ -583,9 +587,10 @@ MagickExport MagickBooleanType XAnnotateImage(Display *display,
         }
       q++;
     }
-    if (SyncAuthenticPixels(annotate_image,exception) == MagickFalse)
+    if (SyncCacheViewAuthenticPixels(annotate_view,exception) == MagickFalse)
       break;
   }
+  annotate_view=DestroyCacheView(annotate_view);
   XDestroyImage(annotate_ximage);
   /*
     Determine annotate geometry.
@@ -671,7 +676,7 @@ MagickExport MagickBooleanType XAnnotateImage(Display *display,
   (void) XParseGeometry(annotate_info->geometry,&x,&y,&width,&height);
   matte=image->matte;
   (void) CompositeImage(image,annotate_image->matte != MagickFalse ?
-    OverCompositeOp : CopyCompositeOp,annotate_image,x,y);
+    OverCompositeOp : CopyCompositeOp,annotate_image,(ssize_t) x,(ssize_t) y);
   image->matte=matte;
   annotate_image=DestroyImage(annotate_image);
   return(MagickTrue);
@@ -1148,12 +1153,15 @@ MagickExport XVisualInfo *XBestVisualInfo(Display *display,
     *map_type,
     *visual_type;
 
-  ssize_t
+  int
     visual_mask;
 
   register int
     i;
 
+  size_t
+    one;
+
   static int
     number_visuals;
 
@@ -1176,8 +1184,9 @@ MagickExport XVisualInfo *XBestVisualInfo(Display *display,
   visual_mask=VisualScreenMask;
   visual_template.screen=XDefaultScreen(display);
   visual_template.depth=XDefaultDepth(display,XDefaultScreen(display));
+  one=1;
   if ((resource_info->immutable != MagickFalse) && (resource_info->colors != 0))
-    if (resource_info->colors <= (1UL << (size_t) visual_template.depth))
+    if (resource_info->colors <= (one << (size_t) visual_template.depth))
       visual_mask|=VisualDepthMask;
   if (visual_type != (char *) NULL)
     {
@@ -1543,8 +1552,8 @@ MagickExport void XClientMessage(Display *display,const Window window,
   client_event.window=window;
   client_event.message_type=protocol;
   client_event.format=32;
-  client_event.data.l[0]=(ssize_t) reason;
-  client_event.data.l[1]=(ssize_t) timestamp;
+  client_event.data.l[0]=(long) reason;
+  client_event.data.l[1]=(long) timestamp;
   (void) XSendEvent(display,window,MagickFalse,NoEventMask,(XEvent *) &client_event);
 }
 \f
@@ -1776,36 +1785,7 @@ MagickExport void XDelay(Display *display,const size_t milliseconds)
 {
   assert(display != (Display *) NULL);
   (void) XFlush(display);
-  if (milliseconds == 0)
-    return;
-#if defined(MAGICKCORE_WINDOWS_SUPPORT)
-  Sleep(milliseconds);
-#elif defined(vms)
-  {
-    float
-      timer;
-
-    timer=milliseconds/1000.0;
-    lib$wait(&timer);
-  }
-#elif defined(MAGICKCORE_HAVE_USLEEP)
-  usleep(1000*milliseconds);
-#elif defined(MAGICKCORE_HAVE_SELECT)
-  {
-    struct timeval
-      timer;
-
-    timer.tv_sec=(ssize_t) milliseconds/1000;
-    timer.tv_usec=(ssize_t) (milliseconds % 1000)*1000;
-    (void) select(0,(XFD_SET *) NULL,(XFD_SET *) NULL,(XFD_SET *) NULL,&timer);
-  }
-#elif defined(MAGICKCORE_HAVE_POLL)
-  (void) poll((struct pollfd *) NULL,0,(int) milliseconds);
-#elif defined(__BEOS__)
-  snooze(1000*milliseconds);
-#else
-# error "Time delay method not defined."
-#endif
+  MagickDelay(milliseconds);
 }
 \f
 /*
@@ -1965,18 +1945,18 @@ MagickExport void XDisplayImageInfo(Display *display,
   int
     unique_file;
 
-  ssize_t
-    bytes;
-
   register ssize_t
     i;
 
-  unsigned int
-    levels;
-
   size_t
     number_pixels;
 
+  ssize_t
+    bytes;
+
+  unsigned int
+    levels;
+
   /*
     Write info about the X server to a file.
   */
@@ -2044,9 +2024,8 @@ MagickExport void XDisplayImageInfo(Display *display,
     undo_image=GetPreviousImageInList(undo_image);
   }
   (void) fprintf(file,"Undo Edit Cache\n  levels: %u\n",levels);
-  (void) fprintf(file,"  bytes: %lumb\n",(unsigned long)
-    ((bytes+(1 << 19)) >> 20));
-  (void) fprintf(file,"  limit: %lumb\n\n",(unsigned long)
+  (void) fprintf(file,"  bytes: %.20gmb\n",(double) ((bytes+(1 << 19)) >> 20));
+  (void) fprintf(file,"  limit: %.20gmb\n\n",(double)
     resource_info->undo_cache);
   /*
     Write info about the image to a file.
@@ -2129,14 +2108,15 @@ static void XDitherImage(Image *image,XImage *ximage)
       {  2,-10, 12, -8,  0,-12, 14, -6,  3, -9, 13, -7,  1,-11, 15, -5}
     };
 
-  PixelPacket
-    color;
+  CacheView
+    *image_view;
 
   int
+    value,
     y;
 
-  ssize_t
-    value;
+  PixelPacket
+    color;
 
   register char
     *q;
@@ -2215,9 +2195,11 @@ static void XDitherImage(Image *image,XImage *ximage)
   i=0;
   j=0;
   q=ximage->data;
+  image_view=AcquireCacheView(image);
   for (y=0; y < (int) image->rows; y++)
   {
-    p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+    p=GetCacheViewVirtualPixels(image_view,0,(ssize_t) y,image->columns,1,
+      &image->exception);
     if (p == (const PixelPacket *) NULL)
       break;
     for (x=0; x < (int) image->columns; x++)
@@ -2242,6 +2224,7 @@ static void XDitherImage(Image *image,XImage *ximage)
     if (i == 2)
       i=0;
   }
+  image_view=DestroyCacheView(image_view);
   /*
     Free allocated memory.
   */
@@ -2286,6 +2269,9 @@ static void XDitherImage(Image *image,XImage *ximage)
 MagickExport MagickBooleanType XDrawImage(Display *display,
   const XPixelInfo *pixel,XDrawInfo *draw_info,Image *image)
 {
+  CacheView
+    *draw_view;
+
   ExceptionInfo
     *exception;
 
@@ -2357,8 +2343,11 @@ MagickExport MagickBooleanType XDrawImage(Display *display,
   */
   (void) XSetBackground(display,draw_context,0);
   (void) XSetForeground(display,draw_context,(size_t) (~0));
-  (void) XSetFillStyle(display,draw_context,FillOpaqueStippled);
-  (void) XSetStipple(display,draw_context,draw_info->stipple);
+  if (draw_info->stipple !=  (Pixmap) NULL)
+    {
+      (void) XSetFillStyle(display,draw_context,FillOpaqueStippled);
+      (void) XSetStipple(display,draw_context,draw_info->stipple);
+    }
   switch (draw_info->element)
   {
     case PointElement:
@@ -2457,24 +2446,26 @@ MagickExport MagickBooleanType XDrawImage(Display *display,
   x=0;
   y=0;
   (void) XParseGeometry(draw_info->geometry,&x,&y,&width,&height);
-  (void) GetOneVirtualPixel(image,x,y,&draw_image->background_color,
-    &image->exception);
+  (void) GetOneVirtualPixel(image,(ssize_t) x,(ssize_t) y,
+    &draw_image->background_color,&image->exception);
   if (SetImageStorageClass(draw_image,DirectClass) == MagickFalse)
     return(MagickFalse);
   draw_image->matte=MagickTrue;
   exception=(&image->exception);
+  draw_view=AcquireCacheView(draw_image);
   for (y=0; y < (int) draw_image->rows; y++)
   {
-    register ssize_t
+    register int
       x;
 
     register PixelPacket
       *restrict q;
 
-    q=QueueAuthenticPixels(draw_image,0,y,draw_image->columns,1,exception);
+    q=QueueCacheViewAuthenticPixels(draw_view,0,(ssize_t) y,draw_image->columns,
+      1,exception);
     if (q == (PixelPacket *) NULL)
       break;
-    for (x=0; x < (ssize_t) draw_image->columns; x++)
+    for (x=0; x < (int) draw_image->columns; x++)
     {
       if (XGetPixel(draw_ximage,x,y) == 0)
         {
@@ -2498,9 +2489,10 @@ MagickExport MagickBooleanType XDrawImage(Display *display,
         }
       q++;
     }
-    if (SyncAuthenticPixels(draw_image,exception) == MagickFalse)
+    if (SyncCacheViewAuthenticPixels(draw_view,exception) == MagickFalse)
       break;
   }
+  draw_view=DestroyCacheView(draw_view);
   XDestroyImage(draw_ximage);
   /*
     Determine draw geometry.
@@ -2582,33 +2574,38 @@ MagickExport MagickBooleanType XDrawImage(Display *display,
   /*
     Composite text onto the image.
   */
+  draw_view=AcquireCacheView(draw_image);
   for (y=0; y < (int) draw_image->rows; y++)
   {
-    register ssize_t
+    register int
       x;
 
     register PixelPacket
       *restrict q;
 
-    q=GetAuthenticPixels(draw_image,0,y,draw_image->columns,1,exception);
+    q=GetCacheViewAuthenticPixels(draw_view,0,(ssize_t) y,draw_image->columns,1,
+      exception);
     if (q == (PixelPacket *) NULL)
       break;
-    for (x=0; x < (ssize_t) draw_image->columns; x++)
+    for (x=0; x < (int) draw_image->columns; x++)
     {
       if (q->opacity != (Quantum) TransparentOpacity)
         SetOpacityPixelComponent(q,OpaqueOpacity);
       q++;
     }
-    if (SyncAuthenticPixels(draw_image,exception) == MagickFalse)
+    if (SyncCacheViewAuthenticPixels(draw_view,exception) == MagickFalse)
       break;
   }
+  draw_view=DestroyCacheView(draw_view);
   (void) XParseGeometry(draw_info->geometry,&x,&y,&width,&height);
   if (draw_info->stencil == TransparentStencil)
-    (void) CompositeImage(image,CopyOpacityCompositeOp,draw_image,x,y);
+    (void) CompositeImage(image,CopyOpacityCompositeOp,draw_image,(ssize_t) x,
+      (ssize_t) y);
   else
     {
       matte=image->matte;
-      (void) CompositeImage(image,OverCompositeOp,draw_image,x,y);
+      (void) CompositeImage(image,OverCompositeOp,draw_image,(ssize_t) x,
+        (ssize_t) y);
       image->matte=matte;
     }
   draw_image=DestroyImage(draw_image);
@@ -2762,7 +2759,10 @@ MagickExport void XFreeResources(Display *display,XVisualInfo *visual_info,
     Free font.
   */
   if (font_info != (XFontStruct *) NULL)
-    (void) XFreeFont(display,font_info);
+    {
+      (void) XFreeFont(display,font_info);
+      font_info=(XFontStruct *) NULL;
+    }
   if (map_info != (XStandardColormap *) NULL)
     {
       /*
@@ -3036,7 +3036,7 @@ MagickExport void XGetPixelPacket(Display *display,
   pixel->colors=0;
   if (image != (Image *) NULL)
     if (image->storage_class == PseudoClass)
-      pixel->colors=image->colors;
+      pixel->colors=(ssize_t) image->colors;
   packets=(unsigned int)
     MagickMax((int) pixel->colors,visual_info->colormap_size)+MaxNumberPens;
   if (pixel->pixels != (unsigned long *) NULL)
@@ -3200,8 +3200,7 @@ MagickExport void XGetPixelPacket(Display *display,
             Initialize pixel array for images of type PseudoClass.
           */
           for (i=0; i < (ssize_t) image->colors; i++)
-            pixel->pixels[i]=
-              XGammaPixel(map_info,image->colormap+i);
+            pixel->pixels[i]=XGammaPixel(map_info,image->colormap+i);
           for (i=0; i < MaxNumberPens; i++)
             pixel->pixels[image->colors+i]=pixel->pen_colors[i].pixel;
           pixel->colors+=MaxNumberPens;
@@ -3440,7 +3439,7 @@ MagickExport void XGetResourceInfo(const ImageInfo *image_info,
   XrmDatabase database,const char *client_name,XResourceInfo *resource_info)
 {
   char
-    *cwd,
+    *directory,
     *resource_value;
 
   /*
@@ -3465,7 +3464,8 @@ MagickExport void XGetResourceInfo(const ImageInfo *image_info,
     "borderColor",BorderColor);
   resource_value=XGetResourceClass(database,client_name,"borderWidth",
     (char *) "2");
-  resource_info->border_width=(unsigned int) StringToUnsignedLong(resource_value);
+  resource_info->border_width=(unsigned int) StringToUnsignedLong(
+    resource_value);
   resource_value=XGetResourceClass(database,client_name,"colormap",
     (char *) "shared");
   resource_info->colormap=UndefinedColormap;
@@ -3527,9 +3527,10 @@ MagickExport void XGetResourceInfo(const ImageInfo *image_info,
     client_name,"geometry",(char *) NULL));
   resource_value=XGetResourceClass(database,client_name,"gravity",
     (char *) "Center");
-  resource_info->gravity=(GravityType) ParseMagickOption(MagickGravityOptions,
+  resource_info->gravity=(GravityType) ParseCommandOption(MagickGravityOptions,
     MagickFalse,resource_value);
-  cwd=getcwd(resource_info->home_directory,MaxTextExtent);
+  directory=getcwd(resource_info->home_directory,MaxTextExtent);
+  (void) directory;
   resource_info->icon_geometry=XGetResourceClass(database,client_name,
     "iconGeometry",(char *) NULL);
   resource_value=XGetResourceClass(database,client_name,"iconic",
@@ -4129,6 +4130,9 @@ static Image *XGetWindowImage(Display *display,const Window window,
     }
   if (level <= 1)
     {
+      CacheView
+        *composite_view;
+
       ColormapInfo
         *next;
 
@@ -4273,7 +4277,7 @@ static Image *XGetWindowImage(Display *display,const Window window,
                       (~(window_info[id].visual->blue_mask)+1);
                     for (i=0; i < (int) number_colors; i++)
                     {
-                      colors[i].pixel=red | green | blue;
+                      colors[i].pixel=(unsigned long) (red | green | blue);
                       colors[i].pad='\0';
                       red+=red_bit;
                       if (red > window_info[id].visual->red_mask)
@@ -4291,7 +4295,7 @@ static Image *XGetWindowImage(Display *display,const Window window,
                 /*
                   Append colormap to colormap list.
                 */
-                p=(ColormapInfo *) AcquireAlignedMemory(1,sizeof(*p));
+                p=(ColormapInfo *) AcquireMagickMemory(sizeof(*p));
                 if (p == (ColormapInfo *) NULL)
                   return((Image *) NULL);
                 p->colormap=window_info[id].colormap;
@@ -4319,6 +4323,7 @@ static Image *XGetWindowImage(Display *display,const Window window,
         composite_image->columns=(size_t) ximage->width;
         composite_image->rows=(size_t) ximage->height;
         exception=(&composite_image->exception);
+        composite_view=AcquireCacheView(composite_image);
         switch (composite_image->storage_class)
         {
           case DirectClass:
@@ -4367,7 +4372,7 @@ static Image *XGetWindowImage(Display *display,const Window window,
                 (window_info[id].visual->klass == DirectColor))
               for (y=0; y < (int) composite_image->rows; y++)
               {
-                q=QueueAuthenticPixels(composite_image,0,y,
+                q=QueueCacheViewAuthenticPixels(composite_view,0,(ssize_t) y,
                   composite_image->columns,1,exception);
                 if (q == (PixelPacket *) NULL)
                   break;
@@ -4382,13 +4387,13 @@ static Image *XGetWindowImage(Display *display,const Window window,
                   q->blue=ScaleShortToQuantum(colors[index].blue);
                   q++;
                 }
-                if (SyncAuthenticPixels(composite_image,exception) == MagickFalse)
+                if (SyncCacheViewAuthenticPixels(composite_view,exception) == MagickFalse)
                   break;
               }
             else
               for (y=0; y < (int) composite_image->rows; y++)
               {
-                q=QueueAuthenticPixels(composite_image,0,y,
+                q=QueueCacheViewAuthenticPixels(composite_view,0,(ssize_t) y,
                   composite_image->columns,1,exception);
                 if (q == (PixelPacket *) NULL)
                   break;
@@ -4406,7 +4411,7 @@ static Image *XGetWindowImage(Display *display,const Window window,
                   q->blue=ScaleShortToQuantum((unsigned short) color);
                   q++;
                 }
-                if (SyncAuthenticPixels(composite_image,exception) == MagickFalse)
+                if (SyncCacheViewAuthenticPixels(composite_view,exception) == MagickFalse)
                   break;
               }
             break;
@@ -4436,22 +4441,24 @@ static Image *XGetWindowImage(Display *display,const Window window,
             */
             for (y=0; y < (int) composite_image->rows; y++)
             {
-              q=QueueAuthenticPixels(composite_image,0,y,composite_image->columns,1,exception);
+              q=QueueCacheViewAuthenticPixels(composite_view,0,(ssize_t) y,
+                composite_image->columns,1,exception);
               if (q == (PixelPacket *) NULL)
                 break;
-              indexes=GetAuthenticIndexQueue(composite_image);
+              indexes=GetCacheViewAuthenticIndexQueue(composite_view);
               for (x=0; x < (int) composite_image->columns; x++)
               {
                 index=(IndexPacket) XGetPixel(ximage,x,y);
                 indexes[x]=index;
                 *q++=composite_image->colormap[(ssize_t) index];
               }
-              if (SyncAuthenticPixels(composite_image,exception) == MagickFalse)
+              if (SyncCacheViewAuthenticPixels(composite_view,exception) == MagickFalse)
                 break;
             }
             break;
           }
         }
+        composite_view=DestroyCacheView(composite_view);
         XDestroyImage(ximage);
         if (image == (Image *) NULL)
           {
@@ -4469,8 +4476,8 @@ static Image *XGetWindowImage(Display *display,const Window window,
         y_offset-=(int) crop_info.y;
         if (y_offset < 0)
           y_offset=0;
-        (void) CompositeImage(image,CopyCompositeOp,composite_image,x_offset,
-          y_offset);
+        (void) CompositeImage(image,CopyCompositeOp,composite_image,(ssize_t)
+          x_offset,(ssize_t) y_offset);
       }
       /*
         Relinquish resources.
@@ -4633,7 +4640,7 @@ MagickExport void XGetWindowInfo(Display *display,XVisualInfo *visual_info,
   window->immutable=MagickFalse;
   window->shape=MagickFalse;
   window->data=0;
-  window->mask=(size_t) (CWBackingStore | CWBackPixel | CWBackPixmap |
+  window->mask=(int) (CWBackingStore | CWBackPixel | CWBackPixmap |
     CWBitGravity | CWBorderPixel | CWColormap | CWCursor | CWDontPropagate |
     CWEventMask | CWOverrideRedirect | CWSaveUnder | CWWinGravity);
   window->attributes.background_pixel=pixel->background_color.pixel;
@@ -4970,8 +4977,8 @@ MagickExport Image *XImportImage(const ImageInfo *image_info,
           return((Image *) NULL);
         }
       (void) XTranslateCoordinates(display,target,root,0,0,&x,&y,&child);
-      crop_info.x=x;
-      crop_info.y=y;
+      crop_info.x=(ssize_t) x;
+      crop_info.y=(ssize_t) y;
       crop_info.width=(size_t) window_attributes.width;
       crop_info.height=(size_t) window_attributes.height;
       if (ximage_info->borders != 0)
@@ -5104,7 +5111,7 @@ MagickExport XWindows *XInitializeWindows(Display *display,
   /*
     Allocate windows structure.
   */
-  windows=(XWindows *) AcquireAlignedMemory(1,sizeof(*windows));
+  windows=(XWindows *) AcquireMagickMemory(sizeof(*windows));
   if (windows == (XWindows *) NULL)
     {
       ThrowXWindowFatalException(XServerFatalError,"MemoryAllocationFailed",
@@ -5668,8 +5675,8 @@ MagickExport MagickBooleanType XMakeImage(Display *display,
   matte_image=(XImage *) NULL;
   if ((window->shape != MagickFalse) && (window->image != (Image *) NULL))
     if ((window->image->matte != MagickFalse) &&
-        ((ssize_t) width <= XDisplayWidth(display,window->screen)) &&
-        ((ssize_t) height <= XDisplayHeight(display,window->screen)))
+        ((int) width <= XDisplayWidth(display,window->screen)) &&
+        ((int) height <= XDisplayHeight(display,window->screen)))
       {
         /*
           Create matte image.
@@ -5810,6 +5817,9 @@ MagickExport MagickBooleanType XMakeImage(Display *display,
 static void XMakeImageLSBFirst(const XResourceInfo *resource_info,
   const XWindowInfo *window,Image *image,XImage *ximage,XImage *matte_image)
 {
+  CacheView
+    *canvas_view;
+
   Image
     *canvas;
 
@@ -5865,8 +5875,8 @@ static void XMakeImageLSBFirst(const XResourceInfo *resource_info,
         resource_info->image_info->texture != (char *) NULL ?
         resource_info->image_info->texture : "pattern:checkerboard",
         MaxTextExtent);
-      (void) FormatMagickString(size,MaxTextExtent,"%lux%lu",(unsigned long)
-        image->columns,(unsigned long) image->rows);
+      (void) FormatMagickString(size,MaxTextExtent,"%.20gx%.20g",(double)
+        image->columns,(double) image->rows);
       image_info->size=ConstantString(size);
       pattern=ReadImage(image_info,&image->exception);
       image_info=DestroyImageInfo(image_info);
@@ -5884,6 +5894,7 @@ static void XMakeImageLSBFirst(const XResourceInfo *resource_info,
   pixels=window->pixel_info->pixels;
   q=(unsigned char *) ximage->data;
   x=0;
+  canvas_view=AcquireCacheView(canvas);
   if (ximage->format == XYBitmap)
     {
       register unsigned short
@@ -5909,10 +5920,11 @@ static void XMakeImageLSBFirst(const XResourceInfo *resource_info,
           PixelIntensity(&canvas->colormap[1]);
       for (y=0; y < (int) canvas->rows; y++)
       {
-        p=GetVirtualPixels(canvas,0,y,canvas->columns,1,&canvas->exception);
+        p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,canvas->columns,1,
+          &canvas->exception);
         if (p == (const PixelPacket *) NULL)
           break;
-        indexes=GetVirtualIndexQueue(canvas);
+        indexes=GetCacheViewVirtualIndexQueue(canvas_view);
         bit=0;
         byte=0;
         for (x=0; x < (int) canvas->columns; x++)
@@ -5949,10 +5961,11 @@ static void XMakeImageLSBFirst(const XResourceInfo *resource_info,
           */
           for (y=0; y < (int) canvas->rows; y++)
           {
-            p=GetVirtualPixels(canvas,0,y,canvas->columns,1,&canvas->exception);
+            p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,
+              canvas->columns,1,&canvas->exception);
             if (p == (const PixelPacket *) NULL)
               break;
-            indexes=GetVirtualIndexQueue(canvas);
+            indexes=GetCacheViewVirtualIndexQueue(canvas_view);
             nibble=0;
             for (x=0; x < (int) canvas->columns; x++)
             {
@@ -6000,10 +6013,11 @@ static void XMakeImageLSBFirst(const XResourceInfo *resource_info,
           */
           for (y=0; y < (int) canvas->rows; y++)
           {
-            p=GetVirtualPixels(canvas,0,y,canvas->columns,1,&canvas->exception);
+            p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,
+              canvas->columns,1,&canvas->exception);
             if (p == (const PixelPacket *) NULL)
               break;
-            indexes=GetVirtualIndexQueue(canvas);
+            indexes=GetCacheViewVirtualIndexQueue(canvas_view);
             nibble=0;
             for (x=0; x < (int) canvas->columns; x++)
             {
@@ -6043,10 +6057,11 @@ static void XMakeImageLSBFirst(const XResourceInfo *resource_info,
             }
           for (y=0; y < (int) canvas->rows; y++)
           {
-            p=GetVirtualPixels(canvas,0,y,canvas->columns,1,&canvas->exception);
+            p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,
+              canvas->columns,1,&canvas->exception);
             if (p == (const PixelPacket *) NULL)
               break;
-            indexes=GetVirtualIndexQueue(canvas);
+            indexes=GetCacheViewVirtualIndexQueue(canvas_view);
             for (x=0; x < (int) canvas->columns; x++)
             {
               pixel=pixels[(ssize_t) indexes[x]];
@@ -6073,10 +6088,11 @@ static void XMakeImageLSBFirst(const XResourceInfo *resource_info,
           bytes_per_pixel=(unsigned int) (ximage->bits_per_pixel >> 3);
           for (y=0; y < (int) canvas->rows; y++)
           {
-            p=GetVirtualPixels(canvas,0,y,canvas->columns,1,&canvas->exception);
+            p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,
+              canvas->columns,1,&canvas->exception);
             if (p == (const PixelPacket *) NULL)
               break;
-            indexes=GetVirtualIndexQueue(canvas);
+            indexes=GetCacheViewVirtualIndexQueue(canvas_view);
             for (x=0; x < (int) canvas->columns; x++)
             {
               pixel=pixels[(ssize_t) indexes[x]];
@@ -6107,7 +6123,8 @@ static void XMakeImageLSBFirst(const XResourceInfo *resource_info,
           for (y=0; y < (int) canvas->rows; y++)
           {
             nibble=0;
-            p=GetVirtualPixels(canvas,0,y,canvas->columns,1,&canvas->exception);
+            p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,
+              canvas->columns,1,&canvas->exception);
             if (p == (const PixelPacket *) NULL)
               break;
             for (x=0; x < (int) canvas->columns; x++)
@@ -6158,7 +6175,8 @@ static void XMakeImageLSBFirst(const XResourceInfo *resource_info,
           */
           for (y=0; y < (int) canvas->rows; y++)
           {
-            p=GetVirtualPixels(canvas,0,y,canvas->columns,1,&canvas->exception);
+            p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,
+              canvas->columns,1,&canvas->exception);
             if (p == (const PixelPacket *) NULL)
               break;
             nibble=0;
@@ -6202,7 +6220,8 @@ static void XMakeImageLSBFirst(const XResourceInfo *resource_info,
             }
           for (y=0; y < (int) canvas->rows; y++)
           {
-            p=GetVirtualPixels(canvas,0,y,canvas->columns,1,&canvas->exception);
+            p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,
+              canvas->columns,1,&canvas->exception);
             if (p == (const PixelPacket *) NULL)
               break;
             for (x=0; x < (int) canvas->columns; x++)
@@ -6227,8 +6246,8 @@ static void XMakeImageLSBFirst(const XResourceInfo *resource_info,
               */
               for (y=0; y < (int) canvas->rows; y++)
               {
-                p=GetVirtualPixels(canvas,0,y,canvas->columns,1,
-                  &canvas->exception);
+                p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,
+                  canvas->columns,1,&canvas->exception);
                 if (p == (const PixelPacket *) NULL)
                   break;
                 if ((red_gamma != 1.0) || (green_gamma != 1.0) ||
@@ -6271,8 +6290,8 @@ static void XMakeImageLSBFirst(const XResourceInfo *resource_info,
                 */
                 for (y=0; y < (int) canvas->rows; y++)
                 {
-                  p=GetVirtualPixels(canvas,0,y,canvas->columns,1,
-                    &canvas->exception);
+                  p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,
+                    canvas->columns,1,&canvas->exception);
                   if (p == (const PixelPacket *) NULL)
                     break;
                   if ((red_gamma != 1.0) || (green_gamma != 1.0) ||
@@ -6324,11 +6343,11 @@ static void XMakeImageLSBFirst(const XResourceInfo *resource_info,
                 bytes_per_pixel=(unsigned int) (ximage->bits_per_pixel >> 3);
                 for (y=0; y < (int) canvas->rows; y++)
                 {
-                  p=GetVirtualPixels(canvas,0,y,canvas->columns,1,
-                    &canvas->exception);
+                  p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,
+                    canvas->columns,1,&canvas->exception);
                   if (p == (PixelPacket *) NULL)
                     break;
-                  for (x=0; x < (ssize_t) canvas->columns; x++)
+                  for (x=0; x < (int) canvas->columns; x++)
                   {
                     pixel=XGammaPixel(map_info,p);
                     for (k=0; k < (int) bytes_per_pixel; k++)
@@ -6356,7 +6375,8 @@ static void XMakeImageLSBFirst(const XResourceInfo *resource_info,
       q=(unsigned char *) matte_image->data;
       for (y=0; y < (int) canvas->rows; y++)
       {
-        p=GetVirtualPixels(canvas,0,y,canvas->columns,1,&canvas->exception);
+        p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,canvas->columns,1,
+          &canvas->exception);
         if (p == (const PixelPacket *) NULL)
           break;
         bit=0;
@@ -6364,7 +6384,7 @@ static void XMakeImageLSBFirst(const XResourceInfo *resource_info,
         for (x=(int) canvas->columns-1; x >= 0; x--)
         {
           byte>>=1;
-          if (p->opacity > (ssize_t) (QuantumRange/2))
+          if (GetOpacityPixelComponent(p) > (QuantumRange/2))
             byte|=0x80;
           bit++;
           if (bit == 8)
@@ -6380,6 +6400,7 @@ static void XMakeImageLSBFirst(const XResourceInfo *resource_info,
         q+=scanline_pad;
       }
     }
+  canvas_view=DestroyCacheView(canvas_view);
   if (canvas != image)
     canvas=DestroyImage(canvas);
 }
@@ -6423,6 +6444,9 @@ static void XMakeImageLSBFirst(const XResourceInfo *resource_info,
 static void XMakeImageMSBFirst(const XResourceInfo *resource_info,
   const XWindowInfo *window,Image *image,XImage *ximage,XImage *matte_image)
 {
+  CacheView
+    *canvas_view;
+
   Image
     *canvas;
 
@@ -6478,8 +6502,8 @@ static void XMakeImageMSBFirst(const XResourceInfo *resource_info,
         resource_info->image_info->texture != (char *) NULL ?
         resource_info->image_info->texture : "pattern:checkerboard",
         MaxTextExtent);
-      (void) FormatMagickString(size,MaxTextExtent,"%lux%lu",(unsigned long)
-        image->columns,(unsigned long) image->rows);
+      (void) FormatMagickString(size,MaxTextExtent,"%.20gx%.20g",(double)
+        image->columns,(double) image->rows);
       image_info->size=ConstantString(size);
       pattern=ReadImage(image_info,&image->exception);
       image_info=DestroyImageInfo(image_info);
@@ -6497,6 +6521,7 @@ static void XMakeImageMSBFirst(const XResourceInfo *resource_info,
   pixels=window->pixel_info->pixels;
   q=(unsigned char *) ximage->data;
   x=0;
+  canvas_view=AcquireCacheView(canvas);
   if (ximage->format == XYBitmap)
     {
       register unsigned short
@@ -6522,10 +6547,11 @@ static void XMakeImageMSBFirst(const XResourceInfo *resource_info,
           PixelIntensity(&canvas->colormap[1]);
       for (y=0; y < (int) canvas->rows; y++)
       {
-        p=GetVirtualPixels(canvas,0,y,canvas->columns,1,&canvas->exception);
+        p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,canvas->columns,1,
+          &canvas->exception);
         if (p == (const PixelPacket *) NULL)
           break;
-        indexes=GetVirtualIndexQueue(canvas);
+        indexes=GetCacheViewVirtualIndexQueue(canvas_view);
         bit=0;
         byte=0;
         for (x=(int) canvas->columns-1; x >= 0; x--)
@@ -6562,10 +6588,11 @@ static void XMakeImageMSBFirst(const XResourceInfo *resource_info,
           */
           for (y=0; y < (int) canvas->rows; y++)
           {
-            p=GetVirtualPixels(canvas,0,y,canvas->columns,1,&canvas->exception);
+            p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,
+              canvas->columns,1,&canvas->exception);
             if (p == (const PixelPacket *) NULL)
               break;
-            indexes=GetVirtualIndexQueue(canvas);
+            indexes=GetCacheViewVirtualIndexQueue(canvas_view);
             nibble=0;
             for (x=0; x < (int) canvas->columns; x++)
             {
@@ -6613,10 +6640,11 @@ static void XMakeImageMSBFirst(const XResourceInfo *resource_info,
           */
           for (y=0; y < (int) canvas->rows; y++)
           {
-            p=GetVirtualPixels(canvas,0,y,canvas->columns,1,&canvas->exception);
+            p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,
+              canvas->columns,1,&canvas->exception);
             if (p == (const PixelPacket *) NULL)
               break;
-            indexes=GetVirtualIndexQueue(canvas);
+            indexes=GetCacheViewVirtualIndexQueue(canvas_view);
             nibble=0;
             for (x=0; x < (int) canvas->columns; x++)
             {
@@ -6656,10 +6684,11 @@ static void XMakeImageMSBFirst(const XResourceInfo *resource_info,
             }
           for (y=0; y < (int) canvas->rows; y++)
           {
-            p=GetVirtualPixels(canvas,0,y,canvas->columns,1,&canvas->exception);
+            p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,
+              canvas->columns,1,&canvas->exception);
             if (p == (const PixelPacket *) NULL)
               break;
-            indexes=GetVirtualIndexQueue(canvas);
+            indexes=GetCacheViewVirtualIndexQueue(canvas_view);
             for (x=0; x < (int) canvas->columns; x++)
             {
               pixel=pixels[(ssize_t) indexes[x]];
@@ -6686,10 +6715,11 @@ static void XMakeImageMSBFirst(const XResourceInfo *resource_info,
           bytes_per_pixel=(unsigned int) (ximage->bits_per_pixel >> 3);
           for (y=0; y < (int) canvas->rows; y++)
           {
-            p=GetVirtualPixels(canvas,0,y,canvas->columns,1,&canvas->exception);
+            p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,
+              canvas->columns,1,&canvas->exception);
             if (p == (const PixelPacket *) NULL)
               break;
-            indexes=GetVirtualIndexQueue(canvas);
+            indexes=GetCacheViewVirtualIndexQueue(canvas_view);
             for (x=0; x < (int) canvas->columns; x++)
             {
               pixel=pixels[(ssize_t) indexes[x]];
@@ -6719,7 +6749,8 @@ static void XMakeImageMSBFirst(const XResourceInfo *resource_info,
           */
           for (y=0; y < (int) canvas->rows; y++)
           {
-            p=GetVirtualPixels(canvas,0,y,canvas->columns,1,&canvas->exception);
+            p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,
+              canvas->columns,1,&canvas->exception);
             if (p == (const PixelPacket *) NULL)
               break;
             nibble=0;
@@ -6771,7 +6802,8 @@ static void XMakeImageMSBFirst(const XResourceInfo *resource_info,
           */
           for (y=0; y < (int) canvas->rows; y++)
           {
-            p=GetVirtualPixels(canvas,0,y,canvas->columns,1,&canvas->exception);
+            p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,
+              canvas->columns,1,&canvas->exception);
             if (p == (const PixelPacket *) NULL)
               break;
             nibble=0;
@@ -6815,7 +6847,8 @@ static void XMakeImageMSBFirst(const XResourceInfo *resource_info,
             }
           for (y=0; y < (int) canvas->rows; y++)
           {
-            p=GetVirtualPixels(canvas,0,y,canvas->columns,1,&canvas->exception);
+            p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,
+              canvas->columns,1,&canvas->exception);
             if (p == (const PixelPacket *) NULL)
               break;
             for (x=(int) canvas->columns-1; x >= 0; x--)
@@ -6840,8 +6873,8 @@ static void XMakeImageMSBFirst(const XResourceInfo *resource_info,
               */
               for (y=0; y < (int) canvas->rows; y++)
               {
-                p=GetVirtualPixels(canvas,0,y,canvas->columns,1,
-                  &canvas->exception);
+                p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,
+                  canvas->columns,1,&canvas->exception);
                 if (p == (const PixelPacket *) NULL)
                   break;
                 if ((red_gamma != 1.0) || (green_gamma != 1.0) ||
@@ -6884,8 +6917,8 @@ static void XMakeImageMSBFirst(const XResourceInfo *resource_info,
                 */
                 for (y=0; y < (int) canvas->rows; y++)
                 {
-                  p=GetVirtualPixels(canvas,0,y,canvas->columns,1,
-                    &canvas->exception);
+                  p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,
+                    canvas->columns,1,&canvas->exception);
                   if (p == (const PixelPacket *) NULL)
                     break;
                   if ((red_gamma != 1.0) || (green_gamma != 1.0) ||
@@ -6937,8 +6970,8 @@ static void XMakeImageMSBFirst(const XResourceInfo *resource_info,
                 bytes_per_pixel=(unsigned int) (ximage->bits_per_pixel >> 3);
                 for (y=0; y < (int) canvas->rows; y++)
                 {
-                  p=GetVirtualPixels(canvas,0,y,canvas->columns,1,
-                    &canvas->exception);
+                  p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,
+                    canvas->columns,1,&canvas->exception);
                   if (p == (const PixelPacket *) NULL)
                     break;
                   for (x=(int) canvas->columns-1; x >= 0; x--)
@@ -6969,7 +7002,8 @@ static void XMakeImageMSBFirst(const XResourceInfo *resource_info,
       q=(unsigned char *) matte_image->data;
       for (y=0; y < (int) canvas->rows; y++)
       {
-        p=GetVirtualPixels(canvas,0,y,canvas->columns,1,&canvas->exception);
+        p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,canvas->columns,1,
+          &canvas->exception);
         if (p == (const PixelPacket *) NULL)
           break;
         bit=0;
@@ -6977,7 +7011,7 @@ static void XMakeImageMSBFirst(const XResourceInfo *resource_info,
         for (x=(int) canvas->columns-1; x >= 0; x--)
         {
           byte<<=1;
-          if (p->opacity > (ssize_t) (QuantumRange/2))
+          if (GetOpacityPixelComponent(p) > (QuantumRange/2))
             byte|=0x01;
           bit++;
           if (bit == 8)
@@ -6993,6 +7027,7 @@ static void XMakeImageMSBFirst(const XResourceInfo *resource_info,
         q+=scanline_pad;
       }
     }
+  canvas_view=DestroyCacheView(canvas_view);
   if (canvas != image)
     canvas=DestroyImage(canvas);
 }
@@ -7030,9 +7065,6 @@ MagickExport void XMakeMagnifyImage(Display *display,XWindows *windows)
   int
     y;
 
-  ssize_t
-    n;
-
   MagickPixelPacket
     pixel;
 
@@ -7046,6 +7078,9 @@ MagickExport void XMakeMagnifyImage(Display *display,XWindows *windows)
     *p,
     *q;
 
+  ssize_t
+    n;
+
   static unsigned int
     previous_magnify = 0;
 
@@ -7096,7 +7131,7 @@ MagickExport void XMakeMagnifyImage(Display *display,XWindows *windows)
       while ((1 << i) <= (int) magnify)
         i++;
       (void) FormatMagickString(windows->magnify.name,MaxTextExtent,
-        "Magnify %luX",(unsigned long) i);
+        "Magnify %.20gX",(double) i);
       status=XStringListToTextProperty(&windows->magnify.name,1,&window_name);
       if (status != False)
         {
@@ -7413,8 +7448,9 @@ MagickExport void XMakeMagnifyImage(Display *display,XWindows *windows)
   /*
     Show center pixel color.
   */
-  (void) GetOneVirtualMagickPixel(windows->image.image,windows->magnify.x,
-    windows->magnify.y,&pixel,&windows->image.image->exception);
+  (void) GetOneVirtualMagickPixel(windows->image.image,(ssize_t)
+    windows->magnify.x,(ssize_t) windows->magnify.y,&pixel,
+    &windows->image.image->exception);
   (void) FormatMagickString(tuple,MaxTextExtent,"%d,%d: ",
     windows->magnify.x,windows->magnify.y);
   (void) ConcatenateMagickString(tuple,"(",MaxTextExtent);
@@ -7870,6 +7906,9 @@ MagickExport void XMakeStandardColormap(Display *display,
         colormap_type=PrivateColormap;
       if (colormap_type == SharedColormap)
         {
+          CacheView
+            *image_view;
+
           DiversityPacket
             *diversity;
 
@@ -7901,21 +7940,24 @@ MagickExport void XMakeStandardColormap(Display *display,
             diversity[i].index=(unsigned short) i;
             diversity[i].count=0;
           }
+          image_view=AcquireCacheView(image);
           for (y=0; y < (int) image->rows; y++)
           {
-            register ssize_t
+            register int
               x;
 
-            register PixelPacket
-              *restrict q;
+            register const PixelPacket
+              *restrict p;
 
-            q=GetAuthenticPixels(image,0,y,image->columns,1,exception);
-            if (q == (PixelPacket *) NULL)
+            p=GetCacheViewAuthenticPixels(image_view,0,(ssize_t) y,
+              image->columns,1,exception);
+            if (p == (const PixelPacket *) NULL)
               break;
-            indexes=GetAuthenticIndexQueue(image);
-            for (x=(ssize_t) image->columns-1; x >= 0; x--)
+            indexes=GetCacheViewAuthenticIndexQueue(image_view);
+            for (x=(int) image->columns-1; x >= 0; x--)
               diversity[(ssize_t) indexes[x]].count++;
           }
+          image_view=DestroyCacheView(image_view);
           /*
             Sort colors by decreasing intensity.
           */
@@ -7924,7 +7966,7 @@ MagickExport void XMakeStandardColormap(Display *display,
           for (i=0; i < (ssize_t) image->colors; )
           {
             diversity[i].count<<=4;  /* increase this colors popularity */
-            i+=MagickMax((ssize_t) (image->colors >> 4),2);
+            i+=MagickMax((int) (image->colors >> 4),2);
           }
           diversity[image->colors-1].count<<=4;
           qsort((void *) diversity,image->colors,sizeof(*diversity),
@@ -8033,7 +8075,7 @@ MagickExport void XMakeStandardColormap(Display *display,
               p=colors+image->colors;
               for (i=0; i < (ssize_t) retain_colors; i++)
               {
-                p->pixel=(size_t) i;
+                p->pixel=(unsigned long) i;
                 p++;
               }
               (void) XQueryColors(display,
@@ -8195,7 +8237,7 @@ MagickExport void XMakeStandardColormap(Display *display,
           &pixel->pen_colors[i]);
         pixel->pixels[image->colors+i]=pixel->pen_colors[i].pixel;
       }
-      pixel->colors=image->colors+MaxNumberPens;
+      pixel->colors=(ssize_t) (image->colors+MaxNumberPens);
     }
   colors=(XColor *) RelinquishMagickMemory(colors);
   if (IsEventLogging())
@@ -8280,7 +8322,7 @@ MagickExport void XMakeWindow(Display *display,Window parent,char **argv,
   size_hints=XAllocSizeHints();
   if (size_hints == (XSizeHints *) NULL)
     ThrowXWindowFatalException(XServerFatalError,"UnableToMakeXWindow",argv[0]);
-  size_hints->flags=(ssize_t) window_info->flags;
+  size_hints->flags=(int) window_info->flags;
   size_hints->x=window_info->x;
   size_hints->y=window_info->y;
   size_hints->width=(int) window_info->width;
@@ -8360,7 +8402,8 @@ MagickExport void XMakeWindow(Display *display,Window parent,char **argv,
     window_info->id=XCreateWindow(display,parent,window_info->x,window_info->y,
       (unsigned int) size_hints->width,(unsigned int) size_hints->height,
       window_info->border_width,(int) window_info->depth,InputOutput,
-      window_info->visual,window_info->mask,&window_info->attributes);
+      window_info->visual,(unsigned long) window_info->mask,
+      &window_info->attributes);
   else
     {
       MagickStatusType
@@ -8375,8 +8418,8 @@ MagickExport void XMakeWindow(Display *display,Window parent,char **argv,
       /*
         Window already exists;  change relevant attributes.
       */
-      (void) XChangeWindowAttributes(display,window_info->id,window_info->mask,
-        &window_info->attributes);
+      (void) XChangeWindowAttributes(display,window_info->id,(unsigned long)
+        window_info->mask,&window_info->attributes);
       mask=ConfigureNotify;
       while (XCheckTypedWindowEvent(display,window_info->id,(int) mask,&sans_event)) ;
       window_changes.x=window_info->x;
@@ -9266,7 +9309,7 @@ MagickExport void XUserPreferences(XResourceInfo *resource_info)
   value=resource_info->gamma_correct ? "True" : "False";
   XrmPutStringResource(&preferences_database,specifier,(char *) value);
   (void) FormatMagickString(specifier,MaxTextExtent,"%s.undoCache",client_name);
-  (void) FormatMagickString(cache,MaxTextExtent,"%lu",(unsigned long)
+  (void) FormatMagickString(cache,MaxTextExtent,"%.20g",(double)
     resource_info->undo_cache);
   XrmPutStringResource(&preferences_database,specifier,cache);
   (void) FormatMagickString(specifier,MaxTextExtent,"%s.usePixmap",client_name);
@@ -9419,7 +9462,7 @@ MagickExport Window XWindowByID(Display *display,const Window root_window,
   if (id == 0)
     return(XSelectWindow(display,&rectangle_info));
   if (root_window == id)
-    return(id);
+    return(root_window);
   status=XQueryTree(display,root_window,&child,&child,&children,
     &number_children);
   if (status == False)