]> granicus.if.org Git - imagemagick/blobdiff - magick/quantum-export.c
(no commit message)
[imagemagick] / magick / quantum-export.c
index 880348c6296dab2f9e486db8a7a96ab1588e4ac8..a3785592b06f81feeca146beae0071cce4b12883 100644 (file)
 %
 %  The format of the ExportQuantumPixels method is:
 %
-%      size_t ExportQuantumPixels(const Image *image,const CacheView *image_view,
-%        const QuantumInfo *quantum_info,const QuantumType quantum_type,
-%        unsigned char *pixels,ExceptionInfo *exception)
+%      size_t ExportQuantumPixels(const Image *image,
+%        const CacheView *image_view,const QuantumInfo *quantum_info,
+%        const QuantumType quantum_type,unsigned char *pixels,
+%        ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
@@ -172,23 +173,23 @@ static inline unsigned char *PopFloatPixel(const QuantumState *quantum_state,
 }
 
 static inline unsigned char *PopQuantumPixel(QuantumState *quantum_state,
-  const unsigned long depth,const QuantumAny pixel,unsigned char *pixels)
+  const size_t depth,const QuantumAny pixel,unsigned char *pixels)
 {
-  register long
+  register ssize_t
     i;
 
-  register unsigned long
+  size_t
     quantum_bits;
 
   if (quantum_state->bits == 0UL)
-    quantum_state->bits=8UL;
-  for (i=(long) depth; i > 0L; )
+    quantum_state->bits=8U;
+  for (i=(ssize_t) depth; i > 0L; )
   {
-    quantum_bits=(unsigned long) i;
+    quantum_bits=(size_t) i;
     if (quantum_bits > quantum_state->bits)
       quantum_bits=quantum_state->bits;
-    i-=quantum_bits;
-    if (quantum_state->bits == 8)
+    i-=(ssize_t) quantum_bits;
+    if (quantum_state->bits == 8UL)
       *pixels='\0';
     quantum_state->bits-=quantum_bits;
     *pixels|=(((pixel >> i) &~ ((~0UL) << quantum_bits)) <<
@@ -203,30 +204,30 @@ static inline unsigned char *PopQuantumPixel(QuantumState *quantum_state,
 }
 
 static inline unsigned char *PopQuantumLongPixel(QuantumState *quantum_state,
-  const unsigned long depth,const unsigned long pixel,unsigned char *pixels)
+  const size_t depth,const size_t pixel,unsigned char *pixels)
 {
-  register long
+  register ssize_t
     i;
 
-  unsigned long
+  size_t
     quantum_bits;
 
-  if (quantum_state->bits == 0UL)
+  if (quantum_state->bits == 0U)
     quantum_state->bits=32UL;
-  for (i=(long) depth; i > 0; )
+  for (i=(ssize_t) depth; i > 0; )
   {
-    quantum_bits=(unsigned long) i;
+    quantum_bits=(size_t) i;
     if (quantum_bits > quantum_state->bits)
       quantum_bits=quantum_state->bits;
     quantum_state->pixel|=(((pixel >> (depth-i)) &
-      quantum_state->mask[quantum_bits]) << (32UL-quantum_state->bits));
-    i-=quantum_bits;
+      quantum_state->mask[quantum_bits]) << (32U-quantum_state->bits));
+    i-=(ssize_t) quantum_bits;
     quantum_state->bits-=quantum_bits;
     if (quantum_state->bits == 0U)
       {
         pixels=PopLongPixel(quantum_state->endian,quantum_state->pixel,pixels);
         quantum_state->pixel=0U;
-        quantum_state->bits=32UL;
+        quantum_state->bits=32U;
       }
   }
   return(pixels);
@@ -239,9 +240,6 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
   EndianType
     endian;
 
-  long
-    bit;
-
   MagickRealType
     alpha;
 
@@ -260,7 +258,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
   register const PixelPacket
     *restrict p;
 
-  register long
+  register ssize_t
     x;
 
   register unsigned char
@@ -269,6 +267,9 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
   size_t
     extent;
 
+  ssize_t
+    bit;
+
   assert(image != (Image *) NULL);
   assert(image->signature == MagickSignature);
   if (image->debug != MagickFalse)
@@ -277,10 +278,13 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
   assert(quantum_info->signature == MagickSignature);
   if (pixels == (unsigned char *) NULL)
     pixels=GetQuantumPixels(quantum_info);
-  number_pixels=GetImageExtent(image);
-  p=GetVirtualPixelQueue(image);
-  indexes=GetVirtualIndexQueue(image);
-  if (image_view != (CacheView *) NULL)
+  if (image_view == (CacheView *) NULL)
+    {
+      number_pixels=GetImageExtent(image);
+      p=GetVirtualPixelQueue(image);
+      indexes=GetVirtualIndexQueue(image);
+    }
+  else
     {
       number_pixels=GetCacheViewExtent(image_view);
       p=GetCacheViewVirtualPixelQueue(image_view);
@@ -297,7 +301,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
       q=GetAuthenticPixelQueue(image);
       if (image_view != (CacheView *) NULL)
         q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
-      for (x=0; x < (long) image->columns; x++)
+      for (x=0; x < (ssize_t) image->columns; x++)
       {
         alpha=QuantumScale*((double) QuantumRange-q->opacity);
         q->red=ClampToQuantum(alpha*q->red);
@@ -306,7 +310,8 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         q++;
       }
     }
-  if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum))
+  if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum) ||
+      (quantum_type == BGROQuantum))
     {
       register PixelPacket
         *restrict q;
@@ -314,7 +319,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
       q=GetAuthenticPixelQueue(image);
       if (image_view != (CacheView *) NULL)
         q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
-      for (x=0; x < (long) number_pixels; x++)
+      for (x=0; x < (ssize_t) number_pixels; x++)
       {
         q->opacity=(Quantum) GetAlphaPixelComponent(q);
         q++;
@@ -331,7 +336,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
       q=GetAuthenticPixelQueue(image);
       if (image_view != (CacheView *) NULL)
         q=GetAuthenticPixelQueue(image);
-      for (x=0; x < (long) number_pixels; x++)
+      for (x=0; x < (ssize_t) number_pixels; x++)
       {
         quantum=q->red;
         q->red=q->green;
@@ -361,7 +366,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
           register unsigned char
             pixel;
 
-          for (x=((long) number_pixels-7); x > 0; x-=8)
+          for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
           {
             pixel=(unsigned char) *indexes++;
             *q=((pixel & 0x01) << 7);
@@ -384,7 +389,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
           if ((number_pixels % 8) != 0)
             {
               *q='\0';
-              for (bit=7; bit >= (long) (8-(number_pixels % 8)); bit--)
+              for (bit=7; bit >= (ssize_t) (8-(number_pixels % 8)); bit--)
               {
                 pixel=(unsigned char) *indexes++;
                 *q|=((pixel & 0x01) << (unsigned char) bit);
@@ -398,7 +403,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
           register unsigned char
             pixel;
 
-          for (x=0; x < (long) (number_pixels-1) ; x+=2)
+          for (x=0; x < (ssize_t) (number_pixels-1) ; x+=2)
           {
             pixel=(unsigned char) *indexes++;
             *q=((pixel & 0xf) << 4);
@@ -416,7 +421,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         case 8:
         {
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             q=PopCharPixel((unsigned char) indexes[x],q);
             q+=quantum_info->pad;
@@ -427,7 +432,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         {
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 q=PopShortPixel(endian,SinglePrecisionToHalf(QuantumScale*
                   indexes[x]),q);
@@ -435,7 +440,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             q=PopShortPixel(endian,(unsigned short) indexes[x],q);
             q+=quantum_info->pad;
@@ -446,7 +451,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         {
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
                 p++;
@@ -454,9 +459,9 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopLongPixel(endian,(unsigned long) indexes[x],q);
+            q=PopLongPixel(endian,(unsigned int) indexes[x],q);
             q+=quantum_info->pad;
           }
           break;
@@ -465,7 +470,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         {
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
                 p++;
@@ -476,9 +481,9 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         default:
         {
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopQuantumPixel(&quantum_state,image->depth,indexes[x],q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,indexes[x],q);
             p++;
             q+=quantum_info->pad;
           }
@@ -502,29 +507,29 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
           register unsigned char
             pixel;
 
-          for (x=((long) number_pixels-3); x > 0; x-=4)
+          for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
           {
             pixel=(unsigned char) *indexes++;
             *q=((pixel & 0x01) << 7);
-            pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
+            pixel=(unsigned char) (GetOpacityPixelComponent(p) == (Quantum) TransparentOpacity ?
               1 : 0);
             *q|=((pixel & 0x01) << 6);
             p++;
             pixel=(unsigned char) *indexes++;
             *q|=((pixel & 0x01) << 5);
-            pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
+            pixel=(unsigned char) (GetOpacityPixelComponent(p) == (Quantum) TransparentOpacity ?
               1 : 0);
             *q|=((pixel & 0x01) << 4);
             p++;
             pixel=(unsigned char) *indexes++;
             *q|=((pixel & 0x01) << 3);
-            pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
+            pixel=(unsigned char) (GetOpacityPixelComponent(p) == (Quantum) TransparentOpacity ?
               1 : 0);
             *q|=((pixel & 0x01) << 2);
             p++;
             pixel=(unsigned char) *indexes++;
             *q|=((pixel & 0x01) << 1);
-            pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
+            pixel=(unsigned char) (GetOpacityPixelComponent(p) == (Quantum) TransparentOpacity ?
               1 : 0);
             *q|=((pixel & 0x01) << 0);
             p++;
@@ -533,11 +538,11 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
           if ((number_pixels % 4) != 0)
             {
               *q='\0';
-              for (bit=3; bit >= (long) (4-(number_pixels % 4)); bit-=2)
+              for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
               {
                 pixel=(unsigned char) *indexes++;
                 *q|=((pixel & 0x01) << (unsigned char) (bit+4));
-                pixel=(unsigned char) (p->opacity == (Quantum)
+                pixel=(unsigned char) (GetOpacityPixelComponent(p) == (Quantum)
                   TransparentOpacity ? 1 : 0);
                 *q|=((pixel & 0x01) << (unsigned char) (bit+4-1));
                 p++;
@@ -551,7 +556,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
           register unsigned char
             pixel;
 
-          for (x=0; x < (long) number_pixels ; x++)
+          for (x=0; x < (ssize_t) number_pixels ; x++)
           {
             pixel=(unsigned char) *indexes++;
             *q=((pixel & 0xf) << 4);
@@ -568,7 +573,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
           register unsigned char
             pixel;
 
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             q=PopCharPixel((unsigned char) indexes[x],q);
             pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
@@ -586,7 +591,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 q=PopShortPixel(endian,(unsigned short) indexes[x],q);
                 pixel=SinglePrecisionToHalf(QuantumScale*
@@ -597,7 +602,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             q=PopShortPixel(endian,(unsigned short) indexes[x],q);
             pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
@@ -610,12 +615,12 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         case 32:
         {
-          register unsigned long
+          register unsigned int
             pixel;
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 float
                   pixel;
@@ -628,9 +633,9 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopLongPixel(endian,(unsigned long) indexes[x],q);
+            q=PopLongPixel(endian,(unsigned int) indexes[x],q);
             pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
               GetOpacityPixelComponent(p)));
             q=PopLongPixel(endian,pixel,q);
@@ -643,7 +648,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         {
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 double
                   pixel;
@@ -659,12 +664,535 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         default:
         {
-          range=GetQuantumRange(image->depth);
-          for (x=0; x < (long) number_pixels; x++)
+          range=GetQuantumRange(quantum_info->depth);
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopQuantumPixel(&quantum_state,image->depth,indexes[x],q);
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              (Quantum) (GetAlphaPixelComponent(p)),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,indexes[x],q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny((Quantum) (GetAlphaPixelComponent(p)),range),q);
+            p++;
+            q+=quantum_info->pad;
+          }
+          break;
+        }
+      }
+      break;
+    }
+    case BGRQuantum:
+    {
+      switch (quantum_info->depth)
+      {
+        case 8:
+        {
+          for (x=0; x < (ssize_t) number_pixels; x++)
+          {
+            q=PopCharPixel(ScaleQuantumToChar(GetBluePixelComponent(p)),q);
+            q=PopCharPixel(ScaleQuantumToChar(GetGreenPixelComponent(p)),q);
+            q=PopCharPixel(ScaleQuantumToChar(GetRedPixelComponent(p)),q);
+            p++;
+            q+=quantum_info->pad;
+          }
+          break;
+        }
+        case 10:
+        {
+          register unsigned int
+            pixel;
+
+          range=GetQuantumRange(quantum_info->depth);
+          if (quantum_info->pack == MagickFalse)
+            {
+              for (x=0; x < (ssize_t) number_pixels; x++)
+              {
+                pixel=(unsigned int) (ScaleQuantumToAny(GetRedPixelComponent(p),range) << 22 |
+                  ScaleQuantumToAny(GetGreenPixelComponent(p),range) << 12 |
+                  ScaleQuantumToAny(GetBluePixelComponent(p),range) << 2);
+                q=PopLongPixel(endian,pixel,q);
+                p++;
+                q+=quantum_info->pad;
+              }
+              break;
+            }
+          if (quantum_info->quantum == 32UL)
+            {
+              for (x=0; x < (ssize_t) number_pixels; x++)
+              {
+                pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
+                q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
+                  q);
+                pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
+                q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
+                  q);
+                pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
+                q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
+                  q);
+                p++;
+                q+=quantum_info->pad;
+              }
+              break;
+            }
+          for (x=0; x < (ssize_t) number_pixels; x++)
+          {
+            pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+            pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+            pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+            p++;
+            q+=quantum_info->pad;
+          }
+          break;
+        }
+        case 12:
+        {
+          register unsigned int
+            pixel;
+
+          range=GetQuantumRange(quantum_info->depth);
+          if (quantum_info->pack == MagickFalse)
+            {
+              for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
+              {
+                switch (x % 3)
+                {
+                  default:
+                  case 0:
+                  {
+                    pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
+                    break;
+                  }
+                  case 1:
+                  {
+                    pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
+                    break;
+                  }
+                  case 2:
+                  {
+                    pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
+                    p++;
+                    break;
+                  }
+                }
+                q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
+                switch ((x+1) % 3)
+                {
+                  default:
+                  case 0:
+                  {
+                    pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
+                    break;
+                  }
+                  case 1:
+                  {
+                    pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
+                    break;
+                  }
+                  case 2:
+                  {
+                    pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
+                    p++;
+                    break;
+                  }
+                }
+                q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
+                q+=quantum_info->pad;
+              }
+              for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
+              {
+                switch ((x+bit) % 3)
+                {
+                  default:
+                  case 0:
+                  {
+                    pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
+                    break;
+                  }
+                  case 1:
+                  {
+                    pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
+                    break;
+                  }
+                  case 2:
+                  {
+                    pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
+                    p++;
+                    break;
+                  }
+                }
+                q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
+                q+=quantum_info->pad;
+              }
+              if (bit != 0)
+                p++;
+              break;
+            }
+          if (quantum_info->quantum == 32UL)
+            {
+              for (x=0; x < (ssize_t) number_pixels; x++)
+              {
+                pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
+                q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
+                  q);
+                pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
+                q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
+                  q);
+                pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
+                q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
+                  q);
+                p++;
+                q+=quantum_info->pad;
+              }
+              break;
+            }
+          for (x=0; x < (ssize_t) number_pixels; x++)
+          {
+            pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+            pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+            pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+            p++;
+            q+=quantum_info->pad;
+          }
+          break;
+        }
+        case 16:
+        {
+          register unsigned short
+            pixel;
+
+          if (quantum_info->format == FloatingPointQuantumFormat)
+            {
+              for (x=0; x < (ssize_t) number_pixels; x++)
+              {
+                pixel=SinglePrecisionToHalf(QuantumScale*
+                  GetBluePixelComponent(p));
+                q=PopShortPixel(endian,pixel,q);
+                pixel=SinglePrecisionToHalf(QuantumScale*
+                  GetGreenPixelComponent(p));
+                q=PopShortPixel(endian,pixel,q);
+                pixel=SinglePrecisionToHalf(QuantumScale*
+                  GetRedPixelComponent(p));
+                q=PopShortPixel(endian,pixel,q);
+                p++;
+                q+=quantum_info->pad;
+              }
+              break;
+            }
+          for (x=0; x < (ssize_t) number_pixels; x++)
+          {
+            pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
+            q=PopShortPixel(endian,pixel,q);
+            pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
+            q=PopShortPixel(endian,pixel,q);
+            pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
+            q=PopShortPixel(endian,pixel,q);
+            p++;
+            q+=quantum_info->pad;
+          }
+          break;
+        }
+        case 32:
+        {
+          register unsigned int
+            pixel;
+
+          if (quantum_info->format == FloatingPointQuantumFormat)
+            {
+              for (x=0; x < (ssize_t) number_pixels; x++)
+              {
+                q=PopFloatPixel(&quantum_state,(float) GetRedPixelComponent(p),q);
+                q=PopFloatPixel(&quantum_state,(float) GetGreenPixelComponent(p),q);
+                q=PopFloatPixel(&quantum_state,(float) GetBluePixelComponent(p),q);
+                p++;
+                q+=quantum_info->pad;
+              }
+              break;
+            }
+          for (x=0; x < (ssize_t) number_pixels; x++)
+          {
+            pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
+            q=PopLongPixel(endian,pixel,q);
+            pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
+            q=PopLongPixel(endian,pixel,q);
+            pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
+            q=PopLongPixel(endian,pixel,q);
+            p++;
+            q+=quantum_info->pad;
+          }
+          break;
+        }
+        case 64:
+        {
+          if (quantum_info->format == FloatingPointQuantumFormat)
+            {
+              for (x=0; x < (ssize_t) number_pixels; x++)
+              {
+                q=PopDoublePixel(&quantum_state,(double) GetRedPixelComponent(p),q);
+                q=PopDoublePixel(&quantum_state,(double) GetGreenPixelComponent(p),q);
+                q=PopDoublePixel(&quantum_state,(double) GetBluePixelComponent(p),q);
+                p++;
+                q+=quantum_info->pad;
+              }
+              break;
+            }
+        }
+        default:
+        {
+          range=GetQuantumRange(quantum_info->depth);
+          for (x=0; x < (ssize_t) number_pixels; x++)
+          {
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetRedPixelComponent(p),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetGreenPixelComponent(p),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetBluePixelComponent(p),range),q);
+            p++;
+            q+=quantum_info->pad;
+          }
+          break;
+        }
+      }
+      break;
+    }
+    case BGRAQuantum:
+    case BGROQuantum:
+    {
+      switch (quantum_info->depth)
+      {
+        case 8:
+        {
+          register unsigned char
+            pixel;
+
+          for (x=0; x < (ssize_t) number_pixels; x++)
+          {
+            pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
+            q=PopCharPixel(pixel,q);
+            pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
+            q=PopCharPixel(pixel,q);
+            pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
+            q=PopCharPixel(pixel,q);
+            pixel=ScaleQuantumToChar((Quantum) GetAlphaPixelComponent(p));
+            q=PopCharPixel(pixel,q);
+            p++;
+            q+=quantum_info->pad;
+          }
+          break;
+        }
+        case 10:
+        {
+          register unsigned int
+            pixel;
+
+          range=GetQuantumRange(quantum_info->depth);
+          if (quantum_info->pack == MagickFalse)
+            {
+              register ssize_t
+                i;
+
+              size_t
+                quantum;
+
+              ssize_t
+                n;
+
+              n=0;
+              quantum=0;
+              pixel=0;
+              for (x=0; x < (ssize_t) number_pixels; x++)
+              {
+                for (i=0; i < 4; i++)
+                {
+                  switch (i)
+                  {
+                    case 0: quantum=GetRedPixelComponent(p); break;
+                    case 1: quantum=GetGreenPixelComponent(p); break;
+                    case 2: quantum=GetBluePixelComponent(p); break;
+                    case 3: quantum=(Quantum) (QuantumRange-GetOpacityPixelComponent(p)); break;
+                  }
+                  switch (n % 3)
+                  {
+                    case 0:
+                    {
+                      pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
+                        range) << 22);
+                      break;
+                    }
+                    case 1:
+                    {
+                      pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
+                        range) << 12);
+                      break;
+                    }
+                    case 2:
+                    {
+                      pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
+                        range) << 2);
+                      q=PopLongPixel(endian,pixel,q);
+                      pixel=0;
+                      break;
+                    }
+                  }
+                  n++;
+                }
+                p++;
+                q+=quantum_info->pad;
+              }
+              break;
+            }
+          if (quantum_info->quantum == 32UL)
+            {
+              for (x=0; x < (ssize_t) number_pixels; x++)
+              {
+                pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
+                q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
+                  q);
+                pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
+                q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
+                  q);
+                pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
+                q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
+                  q);
+                pixel=(unsigned int) ScaleQuantumToAny((Quantum) (QuantumRange-
+                  GetOpacityPixelComponent(p)),range);
+                q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
+                  q);
+                p++;
+                q+=quantum_info->pad;
+              }
+              break;
+            }
+          for (x=0; x < (ssize_t) number_pixels; x++)
+          {
+            pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+            pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+            pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+            pixel=(unsigned int) ScaleQuantumToAny((Quantum) (QuantumRange-
+              GetOpacityPixelComponent(p)),range);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+            p++;
+            q+=quantum_info->pad;
+          }
+          break;
+        }
+        case 16:
+        {
+          register unsigned short
+            pixel;
+
+          if (quantum_info->format == FloatingPointQuantumFormat)
+            {
+              for (x=0; x < (ssize_t) number_pixels; x++)
+              {
+                pixel=SinglePrecisionToHalf(QuantumScale*
+                  GetBluePixelComponent(p));
+                q=PopShortPixel(endian,pixel,q);
+                pixel=SinglePrecisionToHalf(QuantumScale*
+                  GetGreenPixelComponent(p));
+                q=PopShortPixel(endian,pixel,q);
+                pixel=SinglePrecisionToHalf(QuantumScale*
+                  GetRedPixelComponent(p));
+                q=PopShortPixel(endian,pixel,q);
+                pixel=SinglePrecisionToHalf(QuantumScale*
+                  GetAlphaPixelComponent(p));
+                q=PopShortPixel(endian,pixel,q);
+                p++;
+                q+=quantum_info->pad;
+              }
+              break;
+            }
+          for (x=0; x < (ssize_t) number_pixels; x++)
+          {
+            pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
+            q=PopShortPixel(endian,pixel,q);
+            pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
+            q=PopShortPixel(endian,pixel,q);
+            pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
+            q=PopShortPixel(endian,pixel,q);
+            pixel=ScaleQuantumToShort((Quantum) GetAlphaPixelComponent(p));
+            q=PopShortPixel(endian,pixel,q);
+            p++;
+            q+=quantum_info->pad;
+          }
+          break;
+        }
+        case 32:
+        {
+          register unsigned int
+            pixel;
+
+          if (quantum_info->format == FloatingPointQuantumFormat)
+            {
+              for (x=0; x < (ssize_t) number_pixels; x++)
+              {
+                float
+                  pixel;
+
+                q=PopFloatPixel(&quantum_state,(float) GetRedPixelComponent(p),q);
+                q=PopFloatPixel(&quantum_state,(float) GetGreenPixelComponent(p),q);
+                q=PopFloatPixel(&quantum_state,(float) GetBluePixelComponent(p),q);
+                pixel=(float) GetAlphaPixelComponent(p);
+                q=PopFloatPixel(&quantum_state,pixel,q);
+                p++;
+                q+=quantum_info->pad;
+              }
+              break;
+            }
+          for (x=0; x < (ssize_t) number_pixels; x++)
+          {
+            pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
+            q=PopLongPixel(endian,pixel,q);
+            pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
+            q=PopLongPixel(endian,pixel,q);
+            pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
+            q=PopLongPixel(endian,pixel,q);
+            pixel=ScaleQuantumToLong((Quantum) GetAlphaPixelComponent(p));
+            q=PopLongPixel(endian,pixel,q);
+            p++;
+            q+=quantum_info->pad;
+          }
+          break;
+        }
+        case 64:
+        {
+          if (quantum_info->format == FloatingPointQuantumFormat)
+            {
+              double
+                pixel;
+
+              for (x=0; x < (ssize_t) number_pixels; x++)
+              {
+                q=PopDoublePixel(&quantum_state,(double) GetRedPixelComponent(p),q);
+                q=PopDoublePixel(&quantum_state,(double) GetGreenPixelComponent(p),q);
+                q=PopDoublePixel(&quantum_state,(double) GetBluePixelComponent(p),q);
+                pixel=(double) GetAlphaPixelComponent(p);
+                q=PopDoublePixel(&quantum_state,pixel,q);
+                p++;
+                q+=quantum_info->pad;
+              }
+              break;
+            }
+        }
+        default:
+        {
+          range=GetQuantumRange(quantum_info->depth);
+          for (x=0; x < (ssize_t) number_pixels; x++)
+          {
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetBluePixelComponent(p),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetGreenPixelComponent(p),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetRedPixelComponent(p),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny((Quantum) GetAlphaPixelComponent(p),range),q);
             p++;
             q+=quantum_info->pad;
           }
@@ -694,7 +1222,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               white=0x00;
             }
           threshold=(Quantum) (QuantumRange/2);
-          for (x=((long) number_pixels-7); x > 0; x-=8)
+          for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
           {
             *q='\0';
             *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 7;
@@ -718,7 +1246,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
           if ((number_pixels % 8) != 0)
             {
               *q='\0';
-              for (bit=7; bit >= (long) (8-(number_pixels % 8)); bit--)
+              for (bit=7; bit >= (ssize_t) (8-(number_pixels % 8)); bit--)
               {
                 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) <<
                   bit;
@@ -733,7 +1261,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
           register unsigned char
             pixel;
 
-          for (x=0; x < (long) (number_pixels-1) ; x+=2)
+          for (x=0; x < (ssize_t) (number_pixels-1) ; x+=2)
           {
             pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
             *q=(((pixel >> 4) & 0xf) << 4);
@@ -757,7 +1285,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
           register unsigned char
             pixel;
 
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
             q=PopCharPixel(pixel,q);
@@ -768,15 +1296,15 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         case 10:
         {
-          range=GetQuantumRange(image->depth);
+          range=GetQuantumRange(quantum_info->depth);
           if (quantum_info->pack == MagickFalse)
             {
-              register unsigned long
+              register unsigned int
                 pixel;
 
-              for (x=0; x < (long) (number_pixels-2); x+=3)
+              for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
               {
-                pixel=(unsigned long) (
+                pixel=(unsigned int) (
                   ScaleQuantumToAny(PixelIntensityToQuantum(p+2),range) << 22 |
                   ScaleQuantumToAny(PixelIntensityToQuantum(p+1),range) << 12 |
                   ScaleQuantumToAny(PixelIntensityToQuantum(p+0),range) << 2);
@@ -785,19 +1313,19 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
                 q+=quantum_info->pad;
               }
               pixel=0UL;
-              if (x++ < (long) (number_pixels-1))
+              if (x++ < (ssize_t) (number_pixels-1))
                 pixel|=ScaleQuantumToAny(PixelIntensityToQuantum(p+1),
                   range) << 12;
-              if (x++ < (long) number_pixels)
+              if (x++ < (ssize_t) number_pixels)
                 pixel|=ScaleQuantumToAny(PixelIntensityToQuantum(p+0),
                   range) << 2;
               q=PopLongPixel(endian,pixel,q);
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              PixelIntensityToQuantum(p),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(PixelIntensityToQuantum(p),range),q);
             p++;
             q+=quantum_info->pad;
           }
@@ -808,10 +1336,10 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
           register unsigned short
             pixel;
 
-          range=GetQuantumRange(image->depth);
+          range=GetQuantumRange(quantum_info->depth);
           if (quantum_info->pack == MagickFalse)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
                 q=PopShortPixel(endian,(unsigned short) (pixel >> 4),q);
@@ -820,10 +1348,10 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              PixelIntensityToQuantum(p),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(PixelIntensityToQuantum(p),range),q);
             p++;
             q+=quantum_info->pad;
           }
@@ -836,7 +1364,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 pixel=SinglePrecisionToHalf(QuantumScale*
                   PixelIntensityToQuantum(p));
@@ -846,7 +1374,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
             q=PopShortPixel(endian,pixel,q);
@@ -857,12 +1385,12 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         case 32:
         {
-          register unsigned long
+          register unsigned int
             pixel;
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 float
                   pixel;
@@ -874,7 +1402,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToLong(PixelIntensityToQuantum(p));
             q=PopLongPixel(endian,pixel,q);
@@ -887,7 +1415,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         {
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 double
                   pixel;
@@ -902,11 +1430,11 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         default:
         {
-          range=GetQuantumRange(image->depth);
-          for (x=0; x < (long) number_pixels; x++)
+          range=GetQuantumRange(quantum_info->depth);
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              PixelIntensityToQuantum(p),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(PixelIntensityToQuantum(p),range),q);
             p++;
             q+=quantum_info->pad;
           }
@@ -937,23 +1465,23 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               white=0x00;
             }
           threshold=(Quantum) (QuantumRange/2);
-          for (x=((long) number_pixels-3); x > 0; x-=4)
+          for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
           {
             *q='\0';
-            *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 7;
-            pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
+            *q|=(PixelIntensityToQuantum(p) > threshold ? black : white) << 7;
+            pixel=(unsigned char) (GetOpacityPixelComponent(p) == OpaqueOpacity ? 0x00 : 0x01);
             *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 6);
             p++;
-            *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 5;
-            pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
+            *q|=(PixelIntensityToQuantum(p) > threshold ? black : white) << 5;
+            pixel=(unsigned char) (GetOpacityPixelComponent(p) == OpaqueOpacity ? 0x00 : 0x01);
             *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 4);
             p++;
-            *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 3;
-            pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
+            *q|=(PixelIntensityToQuantum(p) > threshold ? black : white) << 3;
+            pixel=(unsigned char) (GetOpacityPixelComponent(p) == OpaqueOpacity ? 0x00 : 0x01);
             *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 2);
             p++;
-            *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 1;
-            pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
+            *q|=(PixelIntensityToQuantum(p) > threshold ? black : white) << 1;
+            pixel=(unsigned char) (GetOpacityPixelComponent(p) == OpaqueOpacity ? 0x00 : 0x01);
             *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 0);
             p++;
             q++;
@@ -961,14 +1489,14 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
           if ((number_pixels % 4) != 0)
             {
               *q='\0';
-              for (bit=3; bit >= (long) (4-(number_pixels % 4)); bit-=2)
+              for (bit=0; bit <= (ssize_t) (number_pixels % 4); bit+=2)
               {
-                *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) <<
-                  (bit+4);
-                pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 :
+                *q|=(PixelIntensityToQuantum(p) > threshold ? black : white) <<
+                  (7-bit);
+                pixel=(unsigned char) (GetOpacityPixelComponent(p) == OpaqueOpacity ? 0x00 :
                   0x01);
                 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << (unsigned char)
-                  (bit+4-1));
+                  (7-bit-1));
                 p++;
               }
               q++;
@@ -980,7 +1508,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
           register unsigned char
             pixel;
 
-          for (x=0; x < (long) number_pixels ; x++)
+          for (x=0; x < (ssize_t) number_pixels ; x++)
           {
             pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
             *q=(((pixel >> 4) & 0xf) << 4);
@@ -997,7 +1525,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
           register unsigned char
             pixel;
 
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
             q=PopCharPixel(pixel,q);
@@ -1016,7 +1544,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 pixel=SinglePrecisionToHalf(QuantumScale*
                   PixelIntensityToQuantum(p));
@@ -1029,7 +1557,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
             q=PopShortPixel(endian,pixel,q);
@@ -1043,12 +1571,12 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         case 32:
         {
-          register unsigned long
+          register unsigned int
             pixel;
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 float
                   pixel;
@@ -1062,7 +1590,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToLong(PixelIntensityToQuantum(p));
             q=PopLongPixel(endian,pixel,q);
@@ -1078,7 +1606,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         {
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 double
                   pixel;
@@ -1095,13 +1623,13 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         default:
         {
-          range=GetQuantumRange(image->depth);
-          for (x=0; x < (long) number_pixels; x++)
+          range=GetQuantumRange(quantum_info->depth);
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              PixelIntensityToQuantum(p),range),q);
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              (Quantum) (GetAlphaPixelComponent(p)),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(PixelIntensityToQuantum(p),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny((Quantum) (GetAlphaPixelComponent(p)),range),q);
             p++;
             q+=quantum_info->pad;
           }
@@ -1120,7 +1648,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
           register unsigned char
             pixel;
 
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
             q=PopCharPixel(pixel,q);
@@ -1136,7 +1664,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 pixel=SinglePrecisionToHalf(QuantumScale*
                   GetRedPixelComponent(p));
@@ -1146,7 +1674,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
             q=PopShortPixel(endian,pixel,q);
@@ -1157,20 +1685,20 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         case 32:
         {
-          register unsigned long
+          register unsigned int
             pixel;
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
-                q=PopFloatPixel(&quantum_state,(float) p->red,q);
+                q=PopFloatPixel(&quantum_state,(float) GetRedPixelComponent(p),q);
                 p++;
                 q+=quantum_info->pad;
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
             q=PopLongPixel(endian,pixel,q);
@@ -1183,9 +1711,9 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         {
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
-                q=PopDoublePixel(&quantum_state,(double) p->red,q);
+                q=PopDoublePixel(&quantum_state,(double) GetRedPixelComponent(p),q);
                 p++;
                 q+=quantum_info->pad;
               }
@@ -1194,11 +1722,11 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         default:
         {
-          range=GetQuantumRange(image->depth);
-          for (x=0; x < (long) number_pixels; x++)
+          range=GetQuantumRange(quantum_info->depth);
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              p->red,range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetRedPixelComponent(p),range),q);
             p++;
             q+=quantum_info->pad;
           }
@@ -1217,7 +1745,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
           register unsigned char
             pixel;
 
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToChar(GetGreenPixelComponent(p));
             q=PopCharPixel(pixel,q);
@@ -1233,7 +1761,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 pixel=SinglePrecisionToHalf(QuantumScale*
                   GetGreenPixelComponent(p));
@@ -1243,7 +1771,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToShort(GetGreenPixelComponent(p));
             q=PopShortPixel(endian,pixel,q);
@@ -1254,20 +1782,20 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         case 32:
         {
-          register unsigned long
+          register unsigned int
             pixel;
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
-                q=PopFloatPixel(&quantum_state,(float) p->green,q);
+                q=PopFloatPixel(&quantum_state,(float) GetGreenPixelComponent(p),q);
                 p++;
                 q+=quantum_info->pad;
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToLong(GetGreenPixelComponent(p));
             q=PopLongPixel(endian,pixel,q);
@@ -1280,9 +1808,9 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         {
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
-                q=PopDoublePixel(&quantum_state,(double) p->green,q);
+                q=PopDoublePixel(&quantum_state,(double) GetGreenPixelComponent(p),q);
                 p++;
                 q+=quantum_info->pad;
               }
@@ -1291,11 +1819,11 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         default:
         {
-          range=GetQuantumRange(image->depth);
-          for (x=0; x < (long) number_pixels; x++)
+          range=GetQuantumRange(quantum_info->depth);
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              p->green,range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetGreenPixelComponent(p),range),q);
             p++;
             q+=quantum_info->pad;
           }
@@ -1314,7 +1842,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
           register unsigned char
             pixel;
 
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
             q=PopCharPixel(pixel,q);
@@ -1330,7 +1858,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 pixel=SinglePrecisionToHalf(QuantumScale*
                   GetBluePixelComponent(p));
@@ -1340,7 +1868,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
             q=PopShortPixel(endian,pixel,q);
@@ -1351,20 +1879,20 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         case 32:
         {
-          register unsigned long
+          register unsigned int
             pixel;
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
-                q=PopFloatPixel(&quantum_state,(float) p->blue,q);
+                q=PopFloatPixel(&quantum_state,(float) GetBluePixelComponent(p),q);
                 p++;
                 q+=quantum_info->pad;
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
             q=PopLongPixel(endian,pixel,q);
@@ -1377,9 +1905,9 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         {
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
-                q=PopDoublePixel(&quantum_state,(double) p->blue,q);
+                q=PopDoublePixel(&quantum_state,(double) GetBluePixelComponent(p),q);
                 p++;
                 q+=quantum_info->pad;
               }
@@ -1388,11 +1916,11 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         default:
         {
-          range=GetQuantumRange(image->depth);
-          for (x=0; x < (long) number_pixels; x++)
+          range=GetQuantumRange(quantum_info->depth);
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              p->blue,range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetBluePixelComponent(p),range),q);
             p++;
             q+=quantum_info->pad;
           }
@@ -1410,7 +1938,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
           register unsigned char
             pixel;
 
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToChar((Quantum) (QuantumRange-
               GetOpacityPixelComponent(p)));
@@ -1427,7 +1955,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 pixel=SinglePrecisionToHalf(QuantumScale*
                   GetAlphaPixelComponent(p));
@@ -1437,7 +1965,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToShort((Quantum) (QuantumRange-
               GetOpacityPixelComponent(p)));
@@ -1449,12 +1977,12 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         case 32:
         {
-          register unsigned long
+          register unsigned int
             pixel;
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 float
                   pixel;
@@ -1466,7 +1994,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToLong((Quantum) (QuantumRange-
               GetOpacityPixelComponent(p)));
@@ -1480,7 +2008,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         {
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 double
                   pixel;
@@ -1495,11 +2023,11 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         default:
         {
-          range=GetQuantumRange(image->depth);
-          for (x=0; x < (long) number_pixels; x++)
+          range=GetQuantumRange(quantum_info->depth);
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              (Quantum) (GetAlphaPixelComponent(p)),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny((Quantum) (GetAlphaPixelComponent(p)),range),q);
             p++;
             q+=quantum_info->pad;
           }
@@ -1517,7 +2045,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
           register unsigned char
             pixel;
 
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToChar(GetOpacityPixelComponent(p));
             q=PopCharPixel(pixel,q);
@@ -1533,7 +2061,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 pixel=SinglePrecisionToHalf(QuantumScale*
                   GetOpacityPixelComponent(p));
@@ -1543,7 +2071,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToShort(GetOpacityPixelComponent(p));
             q=PopShortPixel(endian,pixel,q);
@@ -1554,20 +2082,20 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         case 32:
         {
-          register unsigned long
+          register unsigned int
             pixel;
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
-                q=PopFloatPixel(&quantum_state,(float) p->opacity,q);
+                q=PopFloatPixel(&quantum_state,(float) GetOpacityPixelComponent(p),q);
                 p++;
                 q+=quantum_info->pad;
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToLong(GetOpacityPixelComponent(p));
             q=PopLongPixel(endian,pixel,q);
@@ -1580,9 +2108,9 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         {
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
-                q=PopDoublePixel(&quantum_state,(double) p->opacity,q);
+                q=PopDoublePixel(&quantum_state,(double) GetOpacityPixelComponent(p),q);
                 p++;
                 q+=quantum_info->pad;
               }
@@ -1591,11 +2119,11 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         default:
         {
-          range=GetQuantumRange(image->depth);
-          for (x=0; x < (long) number_pixels; x++)
+          range=GetQuantumRange(quantum_info->depth);
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              p->opacity,range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetOpacityPixelComponent(p),range),q);
             p++;
             q+=quantum_info->pad;
           }
@@ -1619,7 +2147,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
           register unsigned char
             pixel;
 
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToChar(indexes[x]);
             q=PopCharPixel(pixel,q);
@@ -1635,7 +2163,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 pixel=SinglePrecisionToHalf(QuantumScale*indexes[x]);
                 q=PopShortPixel(endian,pixel,q);
@@ -1644,7 +2172,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToShort(indexes[x]);
             q=PopShortPixel(endian,pixel,q);
@@ -1655,12 +2183,12 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         case 32:
         {
-          register unsigned long
+          register unsigned int
             pixel;
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
                 p++;
@@ -1668,7 +2196,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToLong(indexes[x]);
             q=PopLongPixel(endian,pixel,q);
@@ -1681,7 +2209,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         {
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
                 p++;
@@ -1692,11 +2220,11 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         default:
         {
-          range=GetQuantumRange(image->depth);
-          for (x=0; x < (long) number_pixels; x++)
+          range=GetQuantumRange(quantum_info->depth);
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              (Quantum) indexes[x],range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny((Quantum) indexes[x],range),q);
             p++;
             q+=quantum_info->pad;
           }
@@ -1712,7 +2240,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
       {
         case 8:
         {
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             q=PopCharPixel(ScaleQuantumToChar(GetRedPixelComponent(p)),q);
             q=PopCharPixel(ScaleQuantumToChar(GetGreenPixelComponent(p)),q);
@@ -1724,17 +2252,17 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         case 10:
         {
-          register unsigned long
+          register unsigned int
             pixel;
 
-          range=GetQuantumRange(image->depth);
+          range=GetQuantumRange(quantum_info->depth);
           if (quantum_info->pack == MagickFalse)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
-                pixel=(unsigned long) (ScaleQuantumToAny(p->red,range) << 22 |
-                  ScaleQuantumToAny(p->green,range) << 12 |
-                  ScaleQuantumToAny(p->blue,range) << 2);
+                pixel=(unsigned int) (ScaleQuantumToAny(GetRedPixelComponent(p),range) << 22 |
+                  ScaleQuantumToAny(GetGreenPixelComponent(p),range) << 12 |
+                  ScaleQuantumToAny(GetBluePixelComponent(p),range) << 2);
                 q=PopLongPixel(endian,pixel,q);
                 p++;
                 q+=quantum_info->pad;
@@ -1743,27 +2271,30 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
             }
           if (quantum_info->quantum == 32UL)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
-                pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
-                q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
-                pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
-                q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
-                pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
-                q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
+                pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
+                q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
+                  q);
+                pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
+                q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
+                  q);
+                pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
+                q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
+                  q);
                 p++;
                 q+=quantum_info->pad;
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
-            q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
-            pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
-            q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
-            pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
-            q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
+            pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+            pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+            pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
             p++;
             q+=quantum_info->pad;
           }
@@ -1771,30 +2302,30 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         case 12:
         {
-          register unsigned long
+          register unsigned int
             pixel;
 
-          range=GetQuantumRange(image->depth);
+          range=GetQuantumRange(quantum_info->depth);
           if (quantum_info->pack == MagickFalse)
             {
-              for (x=0; x < (long) (3*number_pixels-1); x+=2)
+              for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
               {
                 switch (x % 3)
                 {
                   default:
                   case 0:
                   {
-                    pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
+                    pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
                     break;
                   }
                   case 1:
                   {
-                    pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
+                    pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
                     break;
                   }
                   case 2:
                   {
-                    pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
+                    pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
                     p++;
                     break;
                   }
@@ -1805,17 +2336,17 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
                   default:
                   case 0:
                   {
-                    pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
+                    pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
                     break;
                   }
                   case 1:
                   {
-                    pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
+                    pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
                     break;
                   }
                   case 2:
                   {
-                    pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
+                    pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
                     p++;
                     break;
                   }
@@ -1823,24 +2354,24 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
                 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
                 q+=quantum_info->pad;
               }
-              for (bit=0; bit < (long) (3*number_pixels % 2); bit++)
+              for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
               {
                 switch ((x+bit) % 3)
                 {
                   default:
                   case 0:
                   {
-                    pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
+                    pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
                     break;
                   }
                   case 1:
                   {
-                    pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
+                    pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
                     break;
                   }
                   case 2:
                   {
-                    pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
+                    pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
                     p++;
                     break;
                   }
@@ -1854,27 +2385,30 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
             }
           if (quantum_info->quantum == 32UL)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
-                pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
-                q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
-                pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
-                q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
-                pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
-                q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
+                pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
+                q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
+                  q);
+                pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
+                q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
+                  q);
+                pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
+                q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
+                  q);
                 p++;
                 q+=quantum_info->pad;
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
-            q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
-            pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
-            q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
-            pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
-            q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
+            pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+            pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+            pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
             p++;
             q+=quantum_info->pad;
           }
@@ -1887,7 +2421,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 pixel=SinglePrecisionToHalf(QuantumScale*
                   GetRedPixelComponent(p));
@@ -1903,7 +2437,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
             q=PopShortPixel(endian,pixel,q);
@@ -1918,22 +2452,22 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         case 32:
         {
-          register unsigned long
+          register unsigned int
             pixel;
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
-                q=PopFloatPixel(&quantum_state,(float) p->red,q);
-                q=PopFloatPixel(&quantum_state,(float) p->green,q);
-                q=PopFloatPixel(&quantum_state,(float) p->blue,q);
+                q=PopFloatPixel(&quantum_state,(float) GetRedPixelComponent(p),q);
+                q=PopFloatPixel(&quantum_state,(float) GetGreenPixelComponent(p),q);
+                q=PopFloatPixel(&quantum_state,(float) GetBluePixelComponent(p),q);
                 p++;
                 q+=quantum_info->pad;
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
             q=PopLongPixel(endian,pixel,q);
@@ -1950,11 +2484,11 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         {
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
-                q=PopDoublePixel(&quantum_state,(double) p->red,q);
-                q=PopDoublePixel(&quantum_state,(double) p->green,q);
-                q=PopDoublePixel(&quantum_state,(double) p->blue,q);
+                q=PopDoublePixel(&quantum_state,(double) GetRedPixelComponent(p),q);
+                q=PopDoublePixel(&quantum_state,(double) GetGreenPixelComponent(p),q);
+                q=PopDoublePixel(&quantum_state,(double) GetBluePixelComponent(p),q);
                 p++;
                 q+=quantum_info->pad;
               }
@@ -1963,15 +2497,15 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         default:
         {
-          range=GetQuantumRange(image->depth);
-          for (x=0; x < (long) number_pixels; x++)
+          range=GetQuantumRange(quantum_info->depth);
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              p->red,range),q);
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              p->green,range),q);
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              p->blue,range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetRedPixelComponent(p),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetGreenPixelComponent(p),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetBluePixelComponent(p),range),q);
             p++;
             q+=quantum_info->pad;
           }
@@ -1991,7 +2525,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
           register unsigned char
             pixel;
 
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
             q=PopCharPixel(pixel,q);
@@ -1999,13 +2533,112 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
             q=PopCharPixel(pixel,q);
             pixel=ScaleQuantumToChar(GetBluePixelComponent(p));
             q=PopCharPixel(pixel,q);
-            pixel=ScaleQuantumToChar(GetAlphaPixelComponent(p));
+            pixel=ScaleQuantumToChar((Quantum) GetAlphaPixelComponent(p));
             q=PopCharPixel(pixel,q);
             p++;
             q+=quantum_info->pad;
           }
           break;
         }
+        case 10:
+        {
+          register unsigned int
+            pixel;
+
+          range=GetQuantumRange(quantum_info->depth);
+          if (quantum_info->pack == MagickFalse)
+            {
+              register ssize_t
+                i;
+
+              size_t
+                quantum;
+
+              ssize_t
+                n;
+
+              n=0;
+              quantum=0;
+              pixel=0;
+              for (x=0; x < (ssize_t) number_pixels; x++)
+              {
+                for (i=0; i < 4; i++)
+                {
+                  switch (i)
+                  {
+                    case 0: quantum=GetRedPixelComponent(p); break;
+                    case 1: quantum=GetGreenPixelComponent(p); break;
+                    case 2: quantum=GetBluePixelComponent(p); break;
+                    case 3: quantum=(Quantum) (QuantumRange-GetOpacityPixelComponent(p)); break;
+                  }
+                  switch (n % 3)
+                  {
+                    case 0:
+                    {
+                      pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
+                        range) << 22);
+                      break;
+                    }
+                    case 1:
+                    {
+                      pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
+                        range) << 12);
+                      break;
+                    }
+                    case 2:
+                    {
+                      pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
+                        range) << 2);
+                      q=PopLongPixel(endian,pixel,q);
+                      pixel=0;
+                      break;
+                    }
+                  }
+                  n++;
+                }
+                p++;
+                q+=quantum_info->pad;
+              }
+              break;
+            }
+          if (quantum_info->quantum == 32UL)
+            {
+              for (x=0; x < (ssize_t) number_pixels; x++)
+              {
+                pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
+                q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
+                  q);
+                pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
+                q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
+                  q);
+                pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
+                q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
+                  q);
+                pixel=(unsigned int) ScaleQuantumToAny((Quantum) (QuantumRange-
+                  GetOpacityPixelComponent(p)),range);
+                q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,
+                  q);
+                p++;
+                q+=quantum_info->pad;
+              }
+              break;
+            }
+          for (x=0; x < (ssize_t) number_pixels; x++)
+          {
+            pixel=(unsigned int) ScaleQuantumToAny(GetRedPixelComponent(p),range);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+            pixel=(unsigned int) ScaleQuantumToAny(GetGreenPixelComponent(p),range);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+            pixel=(unsigned int) ScaleQuantumToAny(GetBluePixelComponent(p),range);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+            pixel=(unsigned int) ScaleQuantumToAny((Quantum) (QuantumRange-
+              GetOpacityPixelComponent(p)),range);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+            p++;
+            q+=quantum_info->pad;
+          }
+          break;
+        }
         case 16:
         {
           register unsigned short
@@ -2013,7 +2646,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 pixel=SinglePrecisionToHalf(QuantumScale*
                   GetRedPixelComponent(p));
@@ -2032,7 +2665,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
             q=PopShortPixel(endian,pixel,q);
@@ -2040,7 +2673,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
             q=PopShortPixel(endian,pixel,q);
             pixel=ScaleQuantumToShort(GetBluePixelComponent(p));
             q=PopShortPixel(endian,pixel,q);
-            pixel=ScaleQuantumToShort(GetAlphaPixelComponent(p));
+            pixel=ScaleQuantumToShort((Quantum) GetAlphaPixelComponent(p));
             q=PopShortPixel(endian,pixel,q);
             p++;
             q+=quantum_info->pad;
@@ -2049,27 +2682,27 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         case 32:
         {
-          register unsigned long
+          register unsigned int
             pixel;
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 float
                   pixel;
 
-                q=PopFloatPixel(&quantum_state,(float) p->red,q);
-                q=PopFloatPixel(&quantum_state,(float) p->green,q);
-                q=PopFloatPixel(&quantum_state,(float) p->blue,q);
-                pixel=GetAlphaPixelComponent(p);
+                q=PopFloatPixel(&quantum_state,(float) GetRedPixelComponent(p),q);
+                q=PopFloatPixel(&quantum_state,(float) GetGreenPixelComponent(p),q);
+                q=PopFloatPixel(&quantum_state,(float) GetBluePixelComponent(p),q);
+                pixel=(float) GetAlphaPixelComponent(p);
                 q=PopFloatPixel(&quantum_state,pixel,q);
                 p++;
                 q+=quantum_info->pad;
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
             q=PopLongPixel(endian,pixel,q);
@@ -2077,7 +2710,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
             q=PopLongPixel(endian,pixel,q);
             pixel=ScaleQuantumToLong(GetBluePixelComponent(p));
             q=PopLongPixel(endian,pixel,q);
-            pixel=ScaleQuantumToLong(GetAlphaPixelComponent(p));
+            pixel=ScaleQuantumToLong((Quantum) GetAlphaPixelComponent(p));
             q=PopLongPixel(endian,pixel,q);
             p++;
             q+=quantum_info->pad;
@@ -2091,11 +2724,11 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               double
                 pixel;
 
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
-                q=PopDoublePixel(&quantum_state,(double) p->red,q);
-                q=PopDoublePixel(&quantum_state,(double) p->green,q);
-                q=PopDoublePixel(&quantum_state,(double) p->blue,q);
+                q=PopDoublePixel(&quantum_state,(double) GetRedPixelComponent(p),q);
+                q=PopDoublePixel(&quantum_state,(double) GetGreenPixelComponent(p),q);
+                q=PopDoublePixel(&quantum_state,(double) GetBluePixelComponent(p),q);
                 pixel=(double) GetAlphaPixelComponent(p);
                 q=PopDoublePixel(&quantum_state,pixel,q);
                 p++;
@@ -2106,17 +2739,17 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         default:
         {
-          range=GetQuantumRange(image->depth);
-          for (x=0; x < (long) number_pixels; x++)
+          range=GetQuantumRange(quantum_info->depth);
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              GetRedPixelComponent(p),range),q);
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              GetGreenPixelComponent(p),range),q);
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              GetBluePixelComponent(p),range),q);
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              GetAlphaPixelComponent(p),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetRedPixelComponent(p),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetGreenPixelComponent(p),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetBluePixelComponent(p),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny((Quantum) GetAlphaPixelComponent(p),range),q);
             p++;
             q+=quantum_info->pad;
           }
@@ -2140,7 +2773,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
           register unsigned char
             pixel;
 
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
             q=PopCharPixel(pixel,q);
@@ -2162,7 +2795,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 pixel=SinglePrecisionToHalf(QuantumScale*
                   GetRedPixelComponent(p));
@@ -2180,7 +2813,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
             q=PopShortPixel(endian,pixel,q);
@@ -2197,23 +2830,23 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         case 32:
         {
-          register unsigned long
+          register unsigned int
             pixel;
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
-                q=PopFloatPixel(&quantum_state,(float) p->red,q);
-                q=PopFloatPixel(&quantum_state,(float) p->green,q);
-                q=PopFloatPixel(&quantum_state,(float) p->blue,q);
+                q=PopFloatPixel(&quantum_state,(float) GetRedPixelComponent(p),q);
+                q=PopFloatPixel(&quantum_state,(float) GetGreenPixelComponent(p),q);
+                q=PopFloatPixel(&quantum_state,(float) GetBluePixelComponent(p),q);
                 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
                 p++;
                 q+=quantum_info->pad;
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
             q=PopLongPixel(endian,pixel,q);
@@ -2232,11 +2865,11 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         {
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
-                q=PopDoublePixel(&quantum_state,(double) p->red,q);
-                q=PopDoublePixel(&quantum_state,(double) p->green,q);
-                q=PopDoublePixel(&quantum_state,(double) p->blue,q);
+                q=PopDoublePixel(&quantum_state,(double) GetRedPixelComponent(p),q);
+                q=PopDoublePixel(&quantum_state,(double) GetGreenPixelComponent(p),q);
+                q=PopDoublePixel(&quantum_state,(double) GetBluePixelComponent(p),q);
                 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
                 p++;
                 q+=quantum_info->pad;
@@ -2246,17 +2879,17 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         default:
         {
-          range=GetQuantumRange(image->depth);
-          for (x=0; x < (long) number_pixels; x++)
+          range=GetQuantumRange(quantum_info->depth);
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              p->red,range),q);
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              p->green,range),q);
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              p->blue,range),q);
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              indexes[x],range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetRedPixelComponent(p),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetGreenPixelComponent(p),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetBluePixelComponent(p),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetIndexPixelComponent(indexes+x),range),q);
             p++;
             q+=quantum_info->pad;
           }
@@ -2281,7 +2914,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
           register unsigned char
             pixel;
 
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
             q=PopCharPixel(pixel,q);
@@ -2306,7 +2939,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 pixel=SinglePrecisionToHalf(QuantumScale*
                   GetRedPixelComponent(p));
@@ -2327,7 +2960,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
             q=PopShortPixel(endian,pixel,q);
@@ -2347,19 +2980,19 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         case 32:
         {
-          register unsigned long
+          register unsigned int
             pixel;
 
           if (quantum_info->format == FloatingPointQuantumFormat)
             {
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
                 float
                   pixel;
 
-                q=PopFloatPixel(&quantum_state,(float) p->red,q);
-                q=PopFloatPixel(&quantum_state,(float) p->green,q);
-                q=PopFloatPixel(&quantum_state,(float) p->blue,q);
+                q=PopFloatPixel(&quantum_state,(float) GetRedPixelComponent(p),q);
+                q=PopFloatPixel(&quantum_state,(float) GetGreenPixelComponent(p),q);
+                q=PopFloatPixel(&quantum_state,(float) GetBluePixelComponent(p),q);
                 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
                 pixel=(float) (GetAlphaPixelComponent(p));
                 q=PopFloatPixel(&quantum_state,pixel,q);
@@ -2368,7 +3001,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               }
               break;
             }
-          for (x=0; x < (long) number_pixels; x++)
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=ScaleQuantumToLong(GetRedPixelComponent(p));
             q=PopLongPixel(endian,pixel,q);
@@ -2393,11 +3026,11 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               double
                 pixel;
 
-              for (x=0; x < (long) number_pixels; x++)
+              for (x=0; x < (ssize_t) number_pixels; x++)
               {
-                q=PopDoublePixel(&quantum_state,(double) p->red,q);
-                q=PopDoublePixel(&quantum_state,(double) p->green,q);
-                q=PopDoublePixel(&quantum_state,(double) p->blue,q);
+                q=PopDoublePixel(&quantum_state,(double) GetRedPixelComponent(p),q);
+                q=PopDoublePixel(&quantum_state,(double) GetGreenPixelComponent(p),q);
+                q=PopDoublePixel(&quantum_state,(double) GetBluePixelComponent(p),q);
                 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
                 pixel=(double) (GetAlphaPixelComponent(p));
                 q=PopDoublePixel(&quantum_state,pixel,q);
@@ -2409,19 +3042,19 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         default:
         {
-          range=GetQuantumRange(image->depth);
-          for (x=0; x < (long) number_pixels; x++)
+          range=GetQuantumRange(quantum_info->depth);
+          for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              p->red,range),q);
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              p->green,range),q);
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              p->blue,range),q);
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              indexes[x],range),q);
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              p->opacity,range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetRedPixelComponent(p),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetGreenPixelComponent(p),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetBluePixelComponent(p),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetIndexPixelComponent(indexes+x),range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(GetOpacityPixelComponent(p),range),q);
             p++;
             q+=quantum_info->pad;
           }
@@ -2432,31 +3065,31 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
     }
     case CbYCrYQuantum:
     {
-     long
-        n;
-
       Quantum
         cbcr[4];
 
-      register long
+      register ssize_t
         i;
 
-      register unsigned long
+      register unsigned int
         pixel;
 
-      unsigned long
+      size_t
         quantum;
 
+     ssize_t
+        n;
+
       n=0;
       quantum=0;
-      range=GetQuantumRange(image->depth);
+      range=GetQuantumRange(quantum_info->depth);
       switch (quantum_info->depth)
       {
         case 10:
         {
           if (quantum_info->pack == MagickFalse)
             {
-              for (x=0; x < (long) number_pixels; x+=2)
+              for (x=0; x < (ssize_t) number_pixels; x+=2)
               {
                 for (i=0; i < 4; i++)
                 {
@@ -2481,14 +3114,14 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
                   cbcr[i]=(Quantum) quantum;
                   n++;
                 }
-                pixel=(unsigned long) ((unsigned long) (cbcr[1]) << 22 |
-                  (unsigned long) (cbcr[0]) << 12 |
-                  (unsigned long) (cbcr[2]) << 2);
+                pixel=(unsigned int) ((size_t) (cbcr[1]) << 22 |
+                  (size_t) (cbcr[0]) << 12 |
+                  (size_t) (cbcr[2]) << 2);
                 q=PopLongPixel(endian,pixel,q);
                 p++;
-                pixel=(unsigned long) ((unsigned long) (cbcr[3]) << 22 |
-                  (unsigned long) (cbcr[0]) << 12 |
-                  (unsigned long) (cbcr[2]) << 2);
+                pixel=(unsigned int) ((size_t) (cbcr[3]) << 22 |
+                  (size_t) (cbcr[0]) << 12 |
+                  (size_t) (cbcr[2]) << 2);
                 q=PopLongPixel(endian,pixel,q);
                 p++;
                 q+=quantum_info->pad;
@@ -2499,7 +3132,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         }
         default:
         {
-          for (x=0; x < (long) number_pixels; x+=2)
+          for (x=0; x < (ssize_t) number_pixels; x+=2)
           {
             for (i=0; i < 4; i++)
             {
@@ -2524,19 +3157,19 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
               cbcr[i]=(Quantum) quantum;
               n++;
             }
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              cbcr[1],range),q);
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              cbcr[0],range),q);
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              cbcr[2],range),q);
-            p++;
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              cbcr[3],range),q);
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              cbcr[0],range),q);
-            q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
-              cbcr[2],range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(cbcr[1],range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(cbcr[0],range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(cbcr[2],range),q);
+            p++;
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(cbcr[3],range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(cbcr[0],range),q);
+            q=PopQuantumPixel(&quantum_state,quantum_info->depth,
+              ScaleQuantumToAny(cbcr[2],range),q);
             p++;
             q+=quantum_info->pad;
           }
@@ -2559,7 +3192,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
       q=GetAuthenticPixelQueue(image);
       if (image_view != (CacheView *) NULL)
         q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
-      for (x=0; x < (long) number_pixels; x++)
+      for (x=0; x < (ssize_t) number_pixels; x++)
       {
         quantum=q->red;
         q->red=q->green;
@@ -2567,7 +3200,8 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         q++;
       }
     }
-  if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum))
+  if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum) ||
+      (quantum_type == BGROQuantum))
     {
       register PixelPacket
         *restrict q;
@@ -2575,7 +3209,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
       q=GetAuthenticPixelQueue(image);
       if (image_view != (CacheView *) NULL)
         q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
-      for (x=0; x < (long) number_pixels; x++)
+      for (x=0; x < (ssize_t) number_pixels; x++)
       {
         q->opacity=(Quantum) GetAlphaPixelComponent(q);
         q++;