]> granicus.if.org Git - imagemagick/blobdiff - MagickCore/quantum-export.c
sigmoidal-contrast: prevent argument out of range and remove unnecessary ClampToQuantum
[imagemagick] / MagickCore / quantum-export.c
index de0ea4498ff57cdbcaae2fa7c62c1ee99a2052c2..6a3750cc4c1091916a818a9419b036ebe8691c33 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,CacheView *image_view,
+%        QuantumInfo *quantum_info,const QuantumType quantum_type,
+%        unsigned char *pixels,ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
 %
 */
 
-static inline unsigned char *PopDoublePixel(const QuantumState *quantum_state,
+static inline unsigned char *PopDoublePixel(QuantumInfo *quantum_info,
   const double pixel,unsigned char *pixels)
 {
   double
@@ -121,8 +120,8 @@ static inline unsigned char *PopDoublePixel(const QuantumState *quantum_state,
     quantum[8];
 
   p=(double *) quantum;
-  *p=(double) (pixel*quantum_state->inverse_scale+quantum_state->minimum);
-  if (quantum_state->endian != LSBEndian)
+  *p=(double) (pixel*quantum_info->state.inverse_scale+quantum_info->minimum);
+  if (quantum_info->endian != LSBEndian)
     {
       *pixels++=quantum[7];
       *pixels++=quantum[6];
@@ -145,7 +144,7 @@ static inline unsigned char *PopDoublePixel(const QuantumState *quantum_state,
   return(pixels);
 }
 
-static inline unsigned char *PopFloatPixel(const QuantumState *quantum_state,
+static inline unsigned char *PopFloatPixel(QuantumInfo *quantum_info,
   const float pixel,unsigned char *pixels)
 {
   float
@@ -155,9 +154,9 @@ static inline unsigned char *PopFloatPixel(const QuantumState *quantum_state,
     quantum[4];
 
   p=(float *) quantum;
-  *p=(float) ((double) pixel*quantum_state->inverse_scale+
-    quantum_state->minimum);
-  if (quantum_state->endian != LSBEndian)
+  *p=(float) ((double) pixel*quantum_info->state.inverse_scale+
+    quantum_info->minimum);
+  if (quantum_info->endian != LSBEndian)
     {
       *pixels++=quantum[3];
       *pixels++=quantum[2];
@@ -172,8 +171,8 @@ static inline unsigned char *PopFloatPixel(const QuantumState *quantum_state,
   return(pixels);
 }
 
-static inline unsigned char *PopQuantumPixel(QuantumState *quantum_state,
-  const size_t depth,const QuantumAny pixel,unsigned char *pixels)
+static inline unsigned char *PopQuantumPixel(QuantumInfo *quantum_info,
+  const QuantumAny pixel,unsigned char *pixels)
 {
   register ssize_t
     i;
@@ -181,30 +180,30 @@ static inline unsigned char *PopQuantumPixel(QuantumState *quantum_state,
   size_t
     quantum_bits;
 
-  if (quantum_state->bits == 0UL)
-    quantum_state->bits=8U;
-  for (i=(ssize_t) depth; i > 0L; )
+  if (quantum_info->state.bits == 0UL)
+    quantum_info->state.bits=8U;
+  for (i=(ssize_t) quantum_info->depth; i > 0L; )
   {
     quantum_bits=(size_t) i;
-    if (quantum_bits > quantum_state->bits)
-      quantum_bits=quantum_state->bits;
+    if (quantum_bits > quantum_info->state.bits)
+      quantum_bits=quantum_info->state.bits;
     i-=(ssize_t) quantum_bits;
-    if (quantum_state->bits == 8UL)
+    if (quantum_info->state.bits == 8UL)
       *pixels='\0';
-    quantum_state->bits-=quantum_bits;
+    quantum_info->state.bits-=quantum_bits;
     *pixels|=(((pixel >> i) &~ ((~0UL) << quantum_bits)) <<
-      quantum_state->bits);
-    if (quantum_state->bits == 0UL)
+      quantum_info->state.bits);
+    if (quantum_info->state.bits == 0UL)
       {
         pixels++;
-        quantum_state->bits=8UL;
+        quantum_info->state.bits=8UL;
       }
   }
   return(pixels);
 }
 
-static inline unsigned char *PopQuantumLongPixel(QuantumState *quantum_state,
-  const size_t depth,const size_t pixel,unsigned char *pixels)
+static inline unsigned char *PopQuantumLongPixel(QuantumInfo *quantum_info,
+  const size_t pixel,unsigned char *pixels)
 {
   register ssize_t
     i;
@@ -212,42 +211,39 @@ static inline unsigned char *PopQuantumLongPixel(QuantumState *quantum_state,
   size_t
     quantum_bits;
 
-  if (quantum_state->bits == 0U)
-    quantum_state->bits=32UL;
-  for (i=(ssize_t) depth; i > 0; )
+  if (quantum_info->state.bits == 0U)
+    quantum_info->state.bits=32UL;
+  for (i=(ssize_t) quantum_info->depth; i > 0; )
   {
     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]) << (32U-quantum_state->bits));
+    if (quantum_bits > quantum_info->state.bits)
+      quantum_bits=quantum_info->state.bits;
+    quantum_info->state.pixel|=(((pixel >> (quantum_info->depth-i)) &
+      quantum_info->state.mask[quantum_bits]) << (32U-
+        quantum_info->state.bits));
     i-=(ssize_t) quantum_bits;
-    quantum_state->bits-=quantum_bits;
-    if (quantum_state->bits == 0U)
+    quantum_info->state.bits-=quantum_bits;
+    if (quantum_info->state.bits == 0U)
       {
-        pixels=PopLongPixel(quantum_state->endian,quantum_state->pixel,pixels);
-        quantum_state->pixel=0U;
-        quantum_state->bits=32U;
+        pixels=PopLongPixel(quantum_info->endian,quantum_info->state.pixel,
+          pixels);
+        quantum_info->state.pixel=0U;
+        quantum_info->state.bits=32U;
       }
   }
   return(pixels);
 }
 
-static void ExportAlphaQuantum(const Image *image,
-  const QuantumInfo *quantum_info,QuantumState quantum_state,
+static void ExportAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
   const MagickSizeType number_pixels,const Quantum *restrict p,
   unsigned char *restrict q,ExceptionInfo *exception)
 {
-  EndianType
-    endian;
-
   QuantumAny
     range;
 
   register ssize_t
     x;
 
-  endian=quantum_state.endian;
   switch (quantum_info->depth)
   {
     case 8:
@@ -274,7 +270,7 @@ static void ExportAlphaQuantum(const Image *image,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -283,7 +279,7 @@ static void ExportAlphaQuantum(const Image *image,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -298,7 +294,7 @@ static void ExportAlphaQuantum(const Image *image,
         {
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopFloatPixel(&quantum_state,(float) GetPixelAlpha(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelAlpha(image,p),q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -307,7 +303,7 @@ static void ExportAlphaQuantum(const Image *image,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -319,7 +315,7 @@ static void ExportAlphaQuantum(const Image *image,
         {
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopDoublePixel(&quantum_state,(double) GetPixelAlpha(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelAlpha(image,p),q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -331,8 +327,8 @@ static void ExportAlphaQuantum(const Image *image,
       range=GetQuantumRange(quantum_info->depth);
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelAlpha(image,p),range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
+          range),q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -341,13 +337,10 @@ static void ExportAlphaQuantum(const Image *image,
   }
 }
 
-static void ExportBGRQuantum(const Image *image,const QuantumInfo *quantum_info,
-  QuantumState quantum_state,const MagickSizeType number_pixels,
-  const Quantum *restrict p,unsigned char *restrict q,ExceptionInfo *exception)
+static void ExportBGRQuantum(const Image *image,QuantumInfo *quantum_info,
+  const MagickSizeType number_pixels,const Quantum *restrict p,
+  unsigned char *restrict q,ExceptionInfo *exception)
 {
-  EndianType
-    endian;
-
   QuantumAny
     range;
 
@@ -357,7 +350,6 @@ static void ExportBGRQuantum(const Image *image,const QuantumInfo *quantum_info,
   ssize_t
     bit;
 
-  endian=quantum_state.endian;
   switch (quantum_info->depth)
   {
     case 8:
@@ -386,7 +378,7 @@ static void ExportBGRQuantum(const Image *image,const QuantumInfo *quantum_info,
               ScaleQuantumToAny(GetPixelRed(image,p),range) << 22 |
               ScaleQuantumToAny(GetPixelGreen(image,p),range) << 12 |
               ScaleQuantumToAny(GetPixelBlue(image,p),range) << 2);
-            q=PopLongPixel(endian,pixel,q);
+            q=PopLongPixel(quantum_info->endian,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -397,12 +389,12 @@ static void ExportBGRQuantum(const Image *image,const QuantumInfo *quantum_info,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
-            q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,q);
+            q=PopQuantumLongPixel(quantum_info,pixel,q);
             pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
               range);
-            q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,q);
+            q=PopQuantumLongPixel(quantum_info,pixel,q);
             pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
-            q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,q);
+            q=PopQuantumLongPixel(quantum_info,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -411,11 +403,11 @@ static void ExportBGRQuantum(const Image *image,const QuantumInfo *quantum_info,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+        q=PopQuantumPixel(quantum_info,pixel,q);
         pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+        q=PopQuantumPixel(quantum_info,pixel,q);
         pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+        q=PopQuantumPixel(quantum_info,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -454,7 +446,8 @@ static void ExportBGRQuantum(const Image *image,const QuantumInfo *quantum_info,
                 break;
               }
             }
-            q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
+            q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
+              q);
             switch ((x+1) % 3)
             {
               default:
@@ -478,7 +471,8 @@ static void ExportBGRQuantum(const Image *image,const QuantumInfo *quantum_info,
                 break;
               }
             }
-            q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
+            q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
+              q);
             q+=quantum_info->pad;
           }
           for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
@@ -506,7 +500,8 @@ static void ExportBGRQuantum(const Image *image,const QuantumInfo *quantum_info,
                 break;
               }
             }
-            q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
+            q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
+              q);
             q+=quantum_info->pad;
           }
           if (bit != 0)
@@ -518,12 +513,12 @@ static void ExportBGRQuantum(const Image *image,const QuantumInfo *quantum_info,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
-            q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,q);
+            q=PopQuantumLongPixel(quantum_info,pixel,q);
             pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
               range);
-            q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,q);
+            q=PopQuantumLongPixel(quantum_info,pixel,q);
             pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
-            q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,q);
+            q=PopQuantumLongPixel(quantum_info,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -532,11 +527,11 @@ static void ExportBGRQuantum(const Image *image,const QuantumInfo *quantum_info,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+        q=PopQuantumPixel(quantum_info,pixel,q);
         pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+        q=PopQuantumPixel(quantum_info,pixel,q);
         pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+        q=PopQuantumPixel(quantum_info,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -552,11 +547,11 @@ static void ExportBGRQuantum(const Image *image,const QuantumInfo *quantum_info,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -565,11 +560,11 @@ static void ExportBGRQuantum(const Image *image,const QuantumInfo *quantum_info,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToShort(GetPixelRed(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -584,9 +579,9 @@ static void ExportBGRQuantum(const Image *image,const QuantumInfo *quantum_info,
         {
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopFloatPixel(&quantum_state,(float) GetPixelRed(image,p),q);
-            q=PopFloatPixel(&quantum_state,(float) GetPixelGreen(image,p),q);
-            q=PopFloatPixel(&quantum_state,(float) GetPixelBlue(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -595,11 +590,11 @@ static void ExportBGRQuantum(const Image *image,const QuantumInfo *quantum_info,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToLong(GetPixelRed(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -611,9 +606,9 @@ static void ExportBGRQuantum(const Image *image,const QuantumInfo *quantum_info,
         {
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopDoublePixel(&quantum_state,(double) GetPixelRed(image,p),q);
-            q=PopDoublePixel(&quantum_state,(double) GetPixelGreen(image,p),q);
-            q=PopDoublePixel(&quantum_state,(double) GetPixelBlue(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -625,12 +620,12 @@ static void ExportBGRQuantum(const Image *image,const QuantumInfo *quantum_info,
       range=GetQuantumRange(quantum_info->depth);
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelRed(image,p),range),q);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelGreen(image,p),range),q);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelBlue(image,p),range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
+          range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
+          range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
+          range),q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -639,21 +634,16 @@ static void ExportBGRQuantum(const Image *image,const QuantumInfo *quantum_info,
   }
 }
 
-static void ExportBGRAQuantum(const Image *image,
-  const QuantumInfo *quantum_info,QuantumState quantum_state,
+static void ExportBGRAQuantum(const Image *image,QuantumInfo *quantum_info,
   const MagickSizeType number_pixels,const Quantum *restrict p,
   unsigned char *restrict q,ExceptionInfo *exception)
 {
-  EndianType
-    endian;
-
   QuantumAny
     range;
 
   register ssize_t
     x;
 
-  endian=quantum_state.endian;
   switch (quantum_info->depth)
   {
     case 8:
@@ -725,7 +715,7 @@ static void ExportBGRAQuantum(const Image *image,
                 {
                   pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
                     range) << 2);
-                  q=PopLongPixel(endian,pixel,q);
+                  q=PopLongPixel(quantum_info->endian,pixel,q);
                   pixel=0;
                   break;
                 }
@@ -742,15 +732,15 @@ static void ExportBGRAQuantum(const Image *image,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
-            q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,q);
+            q=PopQuantumLongPixel(quantum_info,pixel,q);
             pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
               range);
-            q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,q);
+            q=PopQuantumLongPixel(quantum_info,pixel,q);
             pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
-            q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,q);
+            q=PopQuantumLongPixel(quantum_info,pixel,q);
             pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),
               range);
-            q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,q);
+            q=PopQuantumLongPixel(quantum_info,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -759,13 +749,13 @@ static void ExportBGRAQuantum(const Image *image,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+        q=PopQuantumPixel(quantum_info,pixel,q);
         pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+        q=PopQuantumPixel(quantum_info,pixel,q);
         pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+        q=PopQuantumPixel(quantum_info,pixel,q);
         pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),range);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+        q=PopQuantumPixel(quantum_info,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -781,13 +771,13 @@ static void ExportBGRAQuantum(const Image *image,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -796,13 +786,13 @@ static void ExportBGRAQuantum(const Image *image,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToShort(GetPixelRed(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -820,11 +810,11 @@ static void ExportBGRAQuantum(const Image *image,
             float
               pixel;
 
-            q=PopFloatPixel(&quantum_state,(float) GetPixelRed(image,p),q);
-            q=PopFloatPixel(&quantum_state,(float) GetPixelGreen(image,p),q);
-            q=PopFloatPixel(&quantum_state,(float) GetPixelBlue(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
             pixel=(float) GetPixelAlpha(image,p);
-            q=PopFloatPixel(&quantum_state,pixel,q);
+            q=PopFloatPixel(quantum_info,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -833,13 +823,13 @@ static void ExportBGRAQuantum(const Image *image,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToLong(GetPixelRed(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -854,11 +844,11 @@ static void ExportBGRAQuantum(const Image *image,
 
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopDoublePixel(&quantum_state,(double) GetPixelRed(image,p),q);
-            q=PopDoublePixel(&quantum_state,(double) GetPixelGreen(image,p),q);
-            q=PopDoublePixel(&quantum_state,(double) GetPixelBlue(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
             pixel=(double) GetPixelAlpha(image,p);
-            q=PopDoublePixel(&quantum_state,pixel,q);
+            q=PopDoublePixel(quantum_info,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -870,14 +860,14 @@ static void ExportBGRAQuantum(const Image *image,
       range=GetQuantumRange(quantum_info->depth);
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelBlue(image,p),range),q);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelGreen(image,p),range),q);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelRed(image,p),range),q);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelAlpha(image,p),range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
+          range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
+          range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
+          range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
+          range),q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -886,14 +876,10 @@ static void ExportBGRAQuantum(const Image *image,
   }
 }
 
-static void ExportBlackQuantum(const Image *image,
-  const QuantumInfo *quantum_info,QuantumState quantum_state,
+static void ExportBlackQuantum(const Image *image,QuantumInfo *quantum_info,
   const MagickSizeType number_pixels,const Quantum *restrict p,
   unsigned char *restrict q,ExceptionInfo *exception)
 {
-  EndianType
-    endian;
-
   QuantumAny
     range;
 
@@ -903,10 +889,9 @@ static void ExportBlackQuantum(const Image *image,
   if (image->colorspace != CMYKColorspace)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "ColorSeparatedImageRequired","`%s'",image->filename);
+        "ColorSeparatedImageRequired","'%s'",image->filename);
       return;
     }
-  endian=quantum_state.endian;
   switch (quantum_info->depth)
   {
     case 8:
@@ -933,7 +918,7 @@ static void ExportBlackQuantum(const Image *image,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlack(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -942,7 +927,7 @@ static void ExportBlackQuantum(const Image *image,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -957,7 +942,7 @@ static void ExportBlackQuantum(const Image *image,
         {
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopFloatPixel(&quantum_state,(float) GetPixelBlack(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelBlack(image,p),q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -966,7 +951,7 @@ static void ExportBlackQuantum(const Image *image,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -978,7 +963,7 @@ static void ExportBlackQuantum(const Image *image,
         {
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopDoublePixel(&quantum_state,(double) GetPixelBlack(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelBlack(image,p),q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -990,8 +975,8 @@ static void ExportBlackQuantum(const Image *image,
       range=GetQuantumRange(quantum_info->depth);
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelBlack(image,p),range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
+          range),q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -1000,21 +985,16 @@ static void ExportBlackQuantum(const Image *image,
   }
 }
 
-static void ExportBlueQuantum(const Image *image,
-  const QuantumInfo *quantum_info,QuantumState quantum_state,
+static void ExportBlueQuantum(const Image *image,QuantumInfo *quantum_info,
   const MagickSizeType number_pixels,const Quantum *restrict p,
   unsigned char *restrict q,ExceptionInfo *exception)
 {
-  EndianType
-    endian;
-
   QuantumAny
     range;
 
   register ssize_t
     x;
 
-  endian=quantum_state.endian;
   switch (quantum_info->depth)
   {
     case 8:
@@ -1041,7 +1021,7 @@ static void ExportBlueQuantum(const Image *image,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -1050,7 +1030,7 @@ static void ExportBlueQuantum(const Image *image,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -1065,7 +1045,7 @@ static void ExportBlueQuantum(const Image *image,
         {
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopFloatPixel(&quantum_state,(float) GetPixelBlue(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -1074,7 +1054,7 @@ static void ExportBlueQuantum(const Image *image,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -1086,7 +1066,7 @@ static void ExportBlueQuantum(const Image *image,
         {
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopDoublePixel(&quantum_state,(double) GetPixelBlue(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -1098,8 +1078,8 @@ static void ExportBlueQuantum(const Image *image,
       range=GetQuantumRange(quantum_info->depth);
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelBlue(image,p),range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
+          range),q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -1108,14 +1088,10 @@ static void ExportBlueQuantum(const Image *image,
   }
 }
 
-static void ExportCbYCrYQuantum(const Image *image,
-  const QuantumInfo *quantum_info,QuantumState quantum_state,
+static void ExportCbYCrYQuantum(const Image *image,QuantumInfo *quantum_info,
   const MagickSizeType number_pixels,const Quantum *restrict p,
   unsigned char *restrict q,ExceptionInfo *exception)
 {
-  EndianType
-    endian;
-
   Quantum
     cbcr[4];
 
@@ -1132,7 +1108,6 @@ static void ExportCbYCrYQuantum(const Image *image,
   ssize_t
     n;
 
-  endian=quantum_state.endian;
   n=0;
   quantum=0;
   switch (quantum_info->depth)
@@ -1168,11 +1143,11 @@ static void ExportCbYCrYQuantum(const Image *image,
             }
             pixel=(unsigned int) ((size_t) (cbcr[1]) << 22 | (size_t)
               (cbcr[0]) << 12 | (size_t) (cbcr[2]) << 2);
-            q=PopLongPixel(endian,pixel,q);
+            q=PopLongPixel(quantum_info->endian,pixel,q);
             p+=GetPixelChannels(image);
             pixel=(unsigned int) ((size_t) (cbcr[3]) << 22 | (size_t)
               (cbcr[0]) << 12 | (size_t) (cbcr[2]) << 2);
-            q=PopLongPixel(endian,pixel,q);
+            q=PopLongPixel(quantum_info->endian,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -1211,19 +1186,13 @@ static void ExportCbYCrYQuantum(const Image *image,
           n++;
         }
         range=GetQuantumRange(quantum_info->depth);
-        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);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[1],range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[0],range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[2],range),q);
         p+=GetPixelChannels(image);
-        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);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[3],range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[0],range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[2],range),q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -1232,24 +1201,19 @@ static void ExportCbYCrYQuantum(const Image *image,
   }
 }
 
-static void ExportCMYKQuantum(const Image *image,
-  const QuantumInfo *quantum_info,QuantumState quantum_state,
+static void ExportCMYKQuantum(const Image *image,QuantumInfo *quantum_info,
   const MagickSizeType number_pixels,const Quantum *restrict p,
   unsigned char *restrict q,ExceptionInfo *exception)
 {
-  EndianType
-    endian;
-
   register ssize_t
     x;
 
   if (image->colorspace != CMYKColorspace)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "ColorSeparatedImageRequired","`%s'",image->filename);
+        "ColorSeparatedImageRequired","'%s'",image->filename);
       return;
     }
-  endian=quantum_state.endian;
   switch (quantum_info->depth)
   {
     case 8:
@@ -1282,13 +1246,13 @@ static void ExportCMYKQuantum(const Image *image,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlack(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -1297,13 +1261,13 @@ static void ExportCMYKQuantum(const Image *image,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToShort(GetPixelRed(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -1318,10 +1282,10 @@ static void ExportCMYKQuantum(const Image *image,
         {
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopFloatPixel(&quantum_state,(float) GetPixelRed(image,p),q);
-            q=PopFloatPixel(&quantum_state,(float) GetPixelGreen(image,p),q);
-            q=PopFloatPixel(&quantum_state,(float) GetPixelBlue(image,p),q);
-            q=PopFloatPixel(&quantum_state,(float) GetPixelBlack(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelBlack(image,p),q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -1330,13 +1294,13 @@ static void ExportCMYKQuantum(const Image *image,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToLong(GetPixelRed(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -1348,10 +1312,10 @@ static void ExportCMYKQuantum(const Image *image,
         {
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopDoublePixel(&quantum_state,(double) GetPixelRed(image,p),q);
-            q=PopDoublePixel(&quantum_state,(double) GetPixelGreen(image,p),q);
-            q=PopDoublePixel(&quantum_state,(double) GetPixelBlue(image,p),q);
-            q=PopDoublePixel(&quantum_state,(double) GetPixelBlack(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelBlack(image,p),q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -1366,14 +1330,14 @@ static void ExportCMYKQuantum(const Image *image,
       range=GetQuantumRange(quantum_info->depth);
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelRed(image,p),range),q);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelGreen(image,p),range),q);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelBlue(image,p),range),q);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelBlack(image,p),range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
+          range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
+          range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
+          range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
+          range),q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -1382,24 +1346,19 @@ static void ExportCMYKQuantum(const Image *image,
   }
 }
 
-static void ExportCMYKAQuantum(const Image *image,
-  const QuantumInfo *quantum_info,QuantumState quantum_state,
+static void ExportCMYKAQuantum(const Image *image,QuantumInfo *quantum_info,
   const MagickSizeType number_pixels,const Quantum *restrict p,
   unsigned char *restrict q,ExceptionInfo *exception)
 {
-  EndianType
-    endian;
-
   register ssize_t
     x;
 
   if (image->colorspace != CMYKColorspace)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "ColorSeparatedImageRequired","`%s'",image->filename);
+        "ColorSeparatedImageRequired","'%s'",image->filename);
       return;
     }
-  endian=quantum_state.endian;
   switch (quantum_info->depth)
   {
     case 8:
@@ -1434,15 +1393,15 @@ static void ExportCMYKAQuantum(const Image *image,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlack(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -1451,15 +1410,15 @@ static void ExportCMYKAQuantum(const Image *image,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToShort(GetPixelRed(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -1477,12 +1436,12 @@ static void ExportCMYKAQuantum(const Image *image,
             float
               pixel;
 
-            q=PopFloatPixel(&quantum_state,(float) GetPixelRed(image,p),q);
-            q=PopFloatPixel(&quantum_state,(float) GetPixelGreen(image,p),q);
-            q=PopFloatPixel(&quantum_state,(float) GetPixelBlue(image,p),q);
-            q=PopFloatPixel(&quantum_state,(float) GetPixelBlack(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelBlack(image,p),q);
             pixel=(float) (GetPixelAlpha(image,p));
-            q=PopFloatPixel(&quantum_state,pixel,q);
+            q=PopFloatPixel(quantum_info,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -1491,15 +1450,15 @@ static void ExportCMYKAQuantum(const Image *image,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToLong(GetPixelRed(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -1514,12 +1473,12 @@ static void ExportCMYKAQuantum(const Image *image,
 
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopDoublePixel(&quantum_state,(double) GetPixelRed(image,p),q);
-            q=PopDoublePixel(&quantum_state,(double) GetPixelGreen(image,p),q);
-            q=PopDoublePixel(&quantum_state,(double) GetPixelBlue(image,p),q);
-            q=PopDoublePixel(&quantum_state,(double) GetPixelBlack(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelBlack(image,p),q);
             pixel=(double) (GetPixelAlpha(image,p));
-            q=PopDoublePixel(&quantum_state,pixel,q);
+            q=PopDoublePixel(quantum_info,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -1534,16 +1493,16 @@ static void ExportCMYKAQuantum(const Image *image,
       range=GetQuantumRange(quantum_info->depth);
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelRed(image,p),range),q);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelGreen(image,p),range),q);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelBlue(image,p),range),q);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelBlack(image,p),range),q);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelAlpha(image,p),range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
+          range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
+          range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
+          range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
+          range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
+          range),q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -1552,26 +1511,21 @@ static void ExportCMYKAQuantum(const Image *image,
   }
 }
 
-static void ExportGrayQuantum(const Image *image,
-  const QuantumInfo *quantum_info,QuantumState quantum_state,
+static void ExportGrayQuantum(const Image *image,QuantumInfo *quantum_info,
   const MagickSizeType number_pixels,const Quantum *restrict p,
   unsigned char *restrict q,ExceptionInfo *exception)
 {
-  EndianType
-    endian;
-
   QuantumAny
     range;
 
   register ssize_t
     x;
 
-  endian=quantum_state.endian;
   switch (quantum_info->depth)
   {
     case 1:
     {
-      register Quantum
+      register double
         threshold;
 
       register unsigned char
@@ -1588,7 +1542,7 @@ static void ExportGrayQuantum(const Image *image,
           black=0x01;
           white=0x00;
         }
-      threshold=(Quantum) (QuantumRange/2);
+      threshold=QuantumRange/2.0;
       for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
       {
         *q='\0';
@@ -1629,17 +1583,17 @@ static void ExportGrayQuantum(const Image *image,
 
       for (x=0; x < (ssize_t) (number_pixels-1) ; x+=2)
       {
-        pixel=ScaleQuantumToChar(GetPixelIntensity(image,p));
+        pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(image,p)));
         *q=(((pixel >> 4) & 0xf) << 4);
         p+=GetPixelChannels(image);
-        pixel=ScaleQuantumToChar(GetPixelIntensity(image,p));
+        pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(image,p)));
         *q|=pixel >> 4;
         p+=GetPixelChannels(image);
         q++;
       }
       if ((number_pixels % 2) != 0)
         {
-          pixel=ScaleQuantumToChar(GetPixelIntensity(image,p));
+          pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(image,p)));
           *q=(((pixel >> 4) & 0xf) << 4);
           p+=GetPixelChannels(image);
           q++;
@@ -1653,7 +1607,7 @@ static void ExportGrayQuantum(const Image *image,
 
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        pixel=ScaleQuantumToChar(GetPixelIntensity(image,p));
+        pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(image,p)));
         q=PopCharPixel(pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
@@ -1670,11 +1624,12 @@ static void ExportGrayQuantum(const Image *image,
 
           for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
           {
-            pixel=(unsigned int) (
-              ScaleQuantumToAny(GetPixelIntensity(image,p+2*GetPixelChannels(image)),range) << 22 |
-              ScaleQuantumToAny(GetPixelIntensity(image,p+GetPixelChannels(image)),range) << 12 |
-              ScaleQuantumToAny(GetPixelIntensity(image,p),range) << 2);
-            q=PopLongPixel(endian,pixel,q);
+            pixel=(unsigned int) (ScaleQuantumToAny(ClampToQuantum(
+              GetPixelIntensity(image,p+2*GetPixelChannels(image))),range) <<
+              22 | ScaleQuantumToAny(ClampToQuantum(GetPixelIntensity(image,
+              p+GetPixelChannels(image))),range) << 12 | ScaleQuantumToAny(
+              ClampToQuantum(GetPixelIntensity(image,p)),range) << 2);
+            q=PopLongPixel(quantum_info->endian,pixel,q);
             p+=3*GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -1682,19 +1637,19 @@ static void ExportGrayQuantum(const Image *image,
             {
               pixel=0U;
               if (x++ < (ssize_t) (number_pixels-1))
-                pixel|=ScaleQuantumToAny(GetPixelIntensity(image,p+GetPixelChannels(image)),
-              range) << 12;
+                pixel|=ScaleQuantumToAny(ClampToQuantum(GetPixelIntensity(image,
+                  p+GetPixelChannels(image))),range) << 12;
               if (x++ < (ssize_t) number_pixels)
-                pixel|=ScaleQuantumToAny(GetPixelIntensity(image,p),
-                  range) << 2;
-              q=PopLongPixel(endian,pixel,q);
+                pixel|=ScaleQuantumToAny(ClampToQuantum(GetPixelIntensity(image,
+                  p)),range) << 2;
+              q=PopLongPixel(quantum_info->endian,pixel,q);
             }
           break;
         }
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelIntensity(image,p),range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
+          GetPixelIntensity(image,p)),range),q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -1710,8 +1665,10 @@ static void ExportGrayQuantum(const Image *image,
         {
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            pixel=ScaleQuantumToShort(GetPixelIntensity(image,p));
-            q=PopShortPixel(endian,(unsigned short) (pixel >> 4),q);
+            pixel=ScaleQuantumToShort(ClampToQuantum(
+              GetPixelIntensity(image,p)));
+            q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel >> 4),
+              q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -1719,8 +1676,8 @@ static void ExportGrayQuantum(const Image *image,
         }
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelIntensity(image,p),range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
+          GetPixelIntensity(image,p)),range),q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -1737,7 +1694,7 @@ static void ExportGrayQuantum(const Image *image,
           {
             pixel=SinglePrecisionToHalf(QuantumScale*
               GetPixelIntensity(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -1745,8 +1702,8 @@ static void ExportGrayQuantum(const Image *image,
         }
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        pixel=ScaleQuantumToShort(GetPixelIntensity(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelIntensity(image,p)));
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -1765,7 +1722,7 @@ static void ExportGrayQuantum(const Image *image,
               pixel;
 
             pixel=(float) GetPixelIntensity(image,p);
-            q=PopFloatPixel(&quantum_state,pixel,q);
+            q=PopFloatPixel(quantum_info,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -1773,8 +1730,8 @@ static void ExportGrayQuantum(const Image *image,
         }
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        pixel=ScaleQuantumToLong(GetPixelIntensity(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        pixel=ScaleQuantumToLong(ClampToQuantum(GetPixelIntensity(image,p)));
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -1789,8 +1746,8 @@ static void ExportGrayQuantum(const Image *image,
             double
               pixel;
 
-            pixel=(double) GetPixelIntensity(image,p);
-            q=PopDoublePixel(&quantum_state,pixel,q);
+            pixel=GetPixelIntensity(image,p);
+            q=PopDoublePixel(quantum_info,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -1802,8 +1759,8 @@ static void ExportGrayQuantum(const Image *image,
       range=GetQuantumRange(quantum_info->depth);
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelIntensity(image,p),range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
+          GetPixelIntensity(image,p)),range),q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -1812,26 +1769,21 @@ static void ExportGrayQuantum(const Image *image,
   }
 }
 
-static void ExportGrayAlphaQuantum(const Image *image,
-  const QuantumInfo *quantum_info,QuantumState quantum_state,
+static void ExportGrayAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
   const MagickSizeType number_pixels,const Quantum *restrict p,
   unsigned char *restrict q,ExceptionInfo *exception)
 {
-  EndianType
-    endian;
-
   QuantumAny
     range;
 
   register ssize_t
     x;
 
-  endian=quantum_state.endian;
   switch (quantum_info->depth)
   {
     case 1:
     {
-      register Quantum
+      register double
         threshold;
 
       register unsigned char
@@ -1849,7 +1801,7 @@ static void ExportGrayAlphaQuantum(const Image *image,
           black=0x01;
           white=0x00;
         }
-      threshold=(Quantum) (QuantumRange/2);
+      threshold=QuantumRange/2.0;
       for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
       {
         *q='\0';
@@ -1899,7 +1851,7 @@ static void ExportGrayAlphaQuantum(const Image *image,
 
       for (x=0; x < (ssize_t) number_pixels ; x++)
       {
-        pixel=ScaleQuantumToChar(GetPixelIntensity(image,p));
+        pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(image,p)));
         *q=(((pixel >> 4) & 0xf) << 4);
         pixel=(unsigned char) (16*QuantumScale*GetPixelAlpha(image,p)+0.5);
         *q|=pixel & 0xf;
@@ -1915,7 +1867,7 @@ static void ExportGrayAlphaQuantum(const Image *image,
 
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        pixel=ScaleQuantumToChar(GetPixelIntensity(image,p));
+        pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(image,p)));
         q=PopCharPixel(pixel,q);
         pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
         q=PopCharPixel(pixel,q);
@@ -1935,9 +1887,9 @@ static void ExportGrayAlphaQuantum(const Image *image,
           {
             pixel=SinglePrecisionToHalf(QuantumScale*
               GetPixelIntensity(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -1945,10 +1897,10 @@ static void ExportGrayAlphaQuantum(const Image *image,
         }
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        pixel=ScaleQuantumToShort(GetPixelIntensity(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelIntensity(image,p)));
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -1967,9 +1919,9 @@ static void ExportGrayAlphaQuantum(const Image *image,
               pixel;
 
             pixel=(float) GetPixelIntensity(image,p);
-            q=PopFloatPixel(&quantum_state,pixel,q);
+            q=PopFloatPixel(quantum_info,pixel,q);
             pixel=(float) (GetPixelAlpha(image,p));
-            q=PopFloatPixel(&quantum_state,pixel,q);
+            q=PopFloatPixel(quantum_info,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -1977,10 +1929,10 @@ static void ExportGrayAlphaQuantum(const Image *image,
         }
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        pixel=ScaleQuantumToLong(GetPixelIntensity(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        pixel=ScaleQuantumToLong(ClampToQuantum(GetPixelIntensity(image,p)));
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -1995,10 +1947,10 @@ static void ExportGrayAlphaQuantum(const Image *image,
             double
               pixel;
 
-            pixel=(double) GetPixelIntensity(image,p);
-            q=PopDoublePixel(&quantum_state,pixel,q);
+            pixel=GetPixelIntensity(image,p);
+            q=PopDoublePixel(quantum_info,pixel,q);
             pixel=(double) (GetPixelAlpha(image,p));
-            q=PopDoublePixel(&quantum_state,pixel,q);
+            q=PopDoublePixel(quantum_info,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -2010,10 +1962,10 @@ static void ExportGrayAlphaQuantum(const Image *image,
       range=GetQuantumRange(quantum_info->depth);
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelIntensity(image,p),range),q);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelAlpha(image,p),range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
+          GetPixelIntensity(image,p)),range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
+          range),q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -2022,21 +1974,16 @@ static void ExportGrayAlphaQuantum(const Image *image,
   }
 }
 
-static void ExportGreenQuantum(const Image *image,
-  const QuantumInfo *quantum_info,QuantumState quantum_state,
+static void ExportGreenQuantum(const Image *image,QuantumInfo *quantum_info,
   const MagickSizeType number_pixels,const Quantum *restrict p,
   unsigned char *restrict q,ExceptionInfo *exception)
 {
-  EndianType
-    endian;
-
   QuantumAny
     range;
 
   register ssize_t
     x;
 
-  endian=quantum_state.endian;
   switch (quantum_info->depth)
   {
     case 8:
@@ -2063,7 +2010,7 @@ static void ExportGreenQuantum(const Image *image,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -2072,7 +2019,7 @@ static void ExportGreenQuantum(const Image *image,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -2087,7 +2034,7 @@ static void ExportGreenQuantum(const Image *image,
         {
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopFloatPixel(&quantum_state,(float) GetPixelGreen(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -2096,7 +2043,7 @@ static void ExportGreenQuantum(const Image *image,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -2108,7 +2055,7 @@ static void ExportGreenQuantum(const Image *image,
         {
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopDoublePixel(&quantum_state,(double) GetPixelGreen(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -2120,8 +2067,8 @@ static void ExportGreenQuantum(const Image *image,
       range=GetQuantumRange(quantum_info->depth);
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelGreen(image,p),range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
+          range),q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -2130,14 +2077,10 @@ static void ExportGreenQuantum(const Image *image,
   }
 }
 
-static void ExportIndexQuantum(const Image *image,
-  const QuantumInfo *quantum_info,QuantumState quantum_state,
+static void ExportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
   const MagickSizeType number_pixels,const Quantum *restrict p,
   unsigned char *restrict q,ExceptionInfo *exception)
 {
-  EndianType
-    endian;
-
   register ssize_t
     x;
 
@@ -2147,10 +2090,9 @@ static void ExportIndexQuantum(const Image *image,
   if (image->storage_class != PseudoClass)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "ColormappedImageRequired","`%s'",image->filename);
+        "ColormappedImageRequired","'%s'",image->filename);
       return;
     }
-  endian=quantum_state.endian;
   switch (quantum_info->depth)
   {
     case 1:
@@ -2239,8 +2181,8 @@ static void ExportIndexQuantum(const Image *image,
         {
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopShortPixel(endian,SinglePrecisionToHalf(QuantumScale*
-              GetPixelIndex(image,p)),q);
+            q=PopShortPixel(quantum_info->endian,SinglePrecisionToHalf(
+              QuantumScale*GetPixelIndex(image,p)),q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -2248,7 +2190,8 @@ static void ExportIndexQuantum(const Image *image,
         }
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        q=PopShortPixel(endian,(unsigned short) GetPixelIndex(image,p),q);
+        q=PopShortPixel(quantum_info->endian,(unsigned short)
+          GetPixelIndex(image,p),q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -2260,7 +2203,7 @@ static void ExportIndexQuantum(const Image *image,
         {
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopFloatPixel(&quantum_state,(float) GetPixelIndex(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelIndex(image,p),q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -2268,7 +2211,8 @@ static void ExportIndexQuantum(const Image *image,
         }
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        q=PopLongPixel(endian,(unsigned int) GetPixelIndex(image,p),q);
+        q=PopLongPixel(quantum_info->endian,(unsigned int)
+          GetPixelIndex(image,p),q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -2280,7 +2224,7 @@ static void ExportIndexQuantum(const Image *image,
         {
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopDoublePixel(&quantum_state,(double) GetPixelIndex(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelIndex(image,p),q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -2291,8 +2235,7 @@ static void ExportIndexQuantum(const Image *image,
     {
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          GetPixelIndex(image,p),q);
+        q=PopQuantumPixel(quantum_info,GetPixelIndex(image,p),q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -2302,13 +2245,9 @@ static void ExportIndexQuantum(const Image *image,
 }
 
 static void ExportIndexAlphaQuantum(const Image *image,
-  const QuantumInfo *quantum_info,QuantumState quantum_state,
-  const MagickSizeType number_pixels,const Quantum *restrict p,
-  unsigned char *restrict q,ExceptionInfo *exception)
+  QuantumInfo *quantum_info,const MagickSizeType number_pixels,
+  const Quantum *restrict p,unsigned char *restrict q,ExceptionInfo *exception)
 {
-  EndianType
-    endian;
-
   register ssize_t
     x;
 
@@ -2318,10 +2257,9 @@ static void ExportIndexAlphaQuantum(const Image *image,
   if (image->storage_class != PseudoClass)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "ColormappedImageRequired","`%s'",image->filename);
+        "ColormappedImageRequired","'%s'",image->filename);
       return;
     }
-  endian=quantum_state.endian;
   switch (quantum_info->depth)
   {
     case 1:
@@ -2413,9 +2351,10 @@ static void ExportIndexAlphaQuantum(const Image *image,
         {
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopShortPixel(endian,(unsigned short) GetPixelIndex(image,p),q);
+            q=PopShortPixel(quantum_info->endian,(unsigned short)
+              GetPixelIndex(image,p),q);
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -2423,9 +2362,10 @@ static void ExportIndexAlphaQuantum(const Image *image,
         }
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        q=PopShortPixel(endian,(unsigned short) GetPixelIndex(image,p),q);
+        q=PopShortPixel(quantum_info->endian,(unsigned short)
+              GetPixelIndex(image,p),q);
         pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -2443,9 +2383,9 @@ static void ExportIndexAlphaQuantum(const Image *image,
             float
               pixel;
 
-            q=PopFloatPixel(&quantum_state,(float) GetPixelIndex(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelIndex(image,p),q);
             pixel=(float)  GetPixelAlpha(image,p);
-            q=PopFloatPixel(&quantum_state,pixel,q);
+            q=PopFloatPixel(quantum_info,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -2453,9 +2393,10 @@ static void ExportIndexAlphaQuantum(const Image *image,
         }
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        q=PopLongPixel(endian,(unsigned int) GetPixelIndex(image,p),q);
+        q=PopLongPixel(quantum_info->endian,(unsigned int)
+          GetPixelIndex(image,p),q);
         pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -2470,9 +2411,9 @@ static void ExportIndexAlphaQuantum(const Image *image,
             double
               pixel;
 
-            q=PopDoublePixel(&quantum_state,(double) GetPixelIndex(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelIndex(image,p),q);
             pixel=(double) GetPixelAlpha(image,p);
-            q=PopDoublePixel(&quantum_state,pixel,q);
+            q=PopDoublePixel(quantum_info,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -2487,10 +2428,9 @@ static void ExportIndexAlphaQuantum(const Image *image,
       range=GetQuantumRange(quantum_info->depth);
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          GetPixelIndex(image,p),q);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelAlpha(image,p),range),q);
+        q=PopQuantumPixel(quantum_info,GetPixelIndex(image,p),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
+          range),q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -2499,21 +2439,16 @@ static void ExportIndexAlphaQuantum(const Image *image,
   }
 }
 
-static void ExportOpacityQuantum(const Image *image,
-  const QuantumInfo *quantum_info,QuantumState quantum_state,
+static void ExportOpacityQuantum(const Image *image,QuantumInfo *quantum_info,
   const MagickSizeType number_pixels,const Quantum *restrict p,
   unsigned char *restrict q,ExceptionInfo *exception)
 {
-  EndianType
-    endian;
-
   QuantumAny
     range;
 
   register ssize_t
     x;
 
-  endian=quantum_state.endian;
   switch (quantum_info->depth)
   {
     case 8:
@@ -2540,7 +2475,7 @@ static void ExportOpacityQuantum(const Image *image,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelOpacity(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -2549,7 +2484,7 @@ static void ExportOpacityQuantum(const Image *image,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToShort(GetPixelOpacity(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -2564,7 +2499,7 @@ static void ExportOpacityQuantum(const Image *image,
         {
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopFloatPixel(&quantum_state,(float) GetPixelOpacity(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelOpacity(image,p),q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -2573,7 +2508,7 @@ static void ExportOpacityQuantum(const Image *image,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToLong(GetPixelOpacity(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -2585,8 +2520,7 @@ static void ExportOpacityQuantum(const Image *image,
         {
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopDoublePixel(&quantum_state,(double) GetPixelOpacity(image,p),
-              q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelOpacity(image,p),q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -2598,8 +2532,8 @@ static void ExportOpacityQuantum(const Image *image,
       range=GetQuantumRange(quantum_info->depth);
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelOpacity(image,p),range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(
+          GetPixelOpacity(image,p),range),q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -2608,20 +2542,16 @@ static void ExportOpacityQuantum(const Image *image,
   }
 }
 
-static void ExportRedQuantum(const Image *image,const QuantumInfo *quantum_info,
-  QuantumState quantum_state,const MagickSizeType number_pixels,
-  const Quantum *restrict p,unsigned char *restrict q,ExceptionInfo *exception)
+static void ExportRedQuantum(const Image *image,QuantumInfo *quantum_info,
+  const MagickSizeType number_pixels,const Quantum *restrict p,
+  unsigned char *restrict q,ExceptionInfo *exception)
 {
-  EndianType
-    endian;
-
   QuantumAny
     range;
 
   register ssize_t
     x;
 
-  endian=quantum_state.endian;
   switch (quantum_info->depth)
   {
     case 8:
@@ -2648,7 +2578,7 @@ static void ExportRedQuantum(const Image *image,const QuantumInfo *quantum_info,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -2657,7 +2587,7 @@ static void ExportRedQuantum(const Image *image,const QuantumInfo *quantum_info,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToShort(GetPixelRed(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -2672,7 +2602,7 @@ static void ExportRedQuantum(const Image *image,const QuantumInfo *quantum_info,
         {
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopFloatPixel(&quantum_state,(float) GetPixelRed(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -2681,7 +2611,7 @@ static void ExportRedQuantum(const Image *image,const QuantumInfo *quantum_info,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToLong(GetPixelRed(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -2693,7 +2623,7 @@ static void ExportRedQuantum(const Image *image,const QuantumInfo *quantum_info,
         {
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopDoublePixel(&quantum_state,(double) GetPixelRed(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -2705,8 +2635,8 @@ static void ExportRedQuantum(const Image *image,const QuantumInfo *quantum_info,
       range=GetQuantumRange(quantum_info->depth);
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelRed(image,p),range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
+          range),q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -2715,13 +2645,10 @@ static void ExportRedQuantum(const Image *image,const QuantumInfo *quantum_info,
   }
 }
 
-static void ExportRGBQuantum(const Image *image,const QuantumInfo *quantum_info,
-  QuantumState quantum_state,const MagickSizeType number_pixels,
-  const Quantum *restrict p,unsigned char *restrict q,ExceptionInfo *exception)
+static void ExportRGBQuantum(const Image *image,QuantumInfo *quantum_info,
+  const MagickSizeType number_pixels,const Quantum *restrict p,
+  unsigned char *restrict q,ExceptionInfo *exception)
 {
-  EndianType
-    endian;
-
   QuantumAny
     range;
 
@@ -2731,7 +2658,6 @@ static void ExportRGBQuantum(const Image *image,const QuantumInfo *quantum_info,
   ssize_t
     bit;
 
-  endian=quantum_state.endian;
   switch (quantum_info->depth)
   {
     case 8:
@@ -2760,7 +2686,7 @@ static void ExportRGBQuantum(const Image *image,const QuantumInfo *quantum_info,
               ScaleQuantumToAny(GetPixelRed(image,p),range) << 22 |
               ScaleQuantumToAny(GetPixelGreen(image,p),range) << 12 |
               ScaleQuantumToAny(GetPixelBlue(image,p),range) << 2);
-            q=PopLongPixel(endian,pixel,q);
+            q=PopLongPixel(quantum_info->endian,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -2771,12 +2697,12 @@ static void ExportRGBQuantum(const Image *image,const QuantumInfo *quantum_info,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
-            q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,q);
+            q=PopQuantumLongPixel(quantum_info,pixel,q);
             pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
               range);
-            q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,q);
+            q=PopQuantumLongPixel(quantum_info,pixel,q);
             pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
-            q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,q);
+            q=PopQuantumLongPixel(quantum_info,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -2785,11 +2711,11 @@ static void ExportRGBQuantum(const Image *image,const QuantumInfo *quantum_info,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+        q=PopQuantumPixel(quantum_info,pixel,q);
         pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+        q=PopQuantumPixel(quantum_info,pixel,q);
         pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+        q=PopQuantumPixel(quantum_info,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -2828,7 +2754,8 @@ static void ExportRGBQuantum(const Image *image,const QuantumInfo *quantum_info,
                 break;
               }
             }
-            q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
+            q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
+              q);
             switch ((x+1) % 3)
             {
               default:
@@ -2852,7 +2779,8 @@ static void ExportRGBQuantum(const Image *image,const QuantumInfo *quantum_info,
                 break;
               }
             }
-            q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
+            q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
+              q);
             q+=quantum_info->pad;
           }
           for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
@@ -2880,7 +2808,8 @@ static void ExportRGBQuantum(const Image *image,const QuantumInfo *quantum_info,
                 break;
               }
             }
-            q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
+            q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
+              q);
             q+=quantum_info->pad;
           }
           if (bit != 0)
@@ -2892,12 +2821,12 @@ static void ExportRGBQuantum(const Image *image,const QuantumInfo *quantum_info,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
-            q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,q);
+            q=PopQuantumLongPixel(quantum_info,pixel,q);
             pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
               range);
-            q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,q);
+            q=PopQuantumLongPixel(quantum_info,pixel,q);
             pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
-            q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,q);
+            q=PopQuantumLongPixel(quantum_info,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -2906,11 +2835,11 @@ static void ExportRGBQuantum(const Image *image,const QuantumInfo *quantum_info,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+        q=PopQuantumPixel(quantum_info,pixel,q);
         pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+        q=PopQuantumPixel(quantum_info,pixel,q);
         pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+        q=PopQuantumPixel(quantum_info,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -2926,11 +2855,11 @@ static void ExportRGBQuantum(const Image *image,const QuantumInfo *quantum_info,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -2939,11 +2868,11 @@ static void ExportRGBQuantum(const Image *image,const QuantumInfo *quantum_info,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToShort(GetPixelRed(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -2958,9 +2887,9 @@ static void ExportRGBQuantum(const Image *image,const QuantumInfo *quantum_info,
         {
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopFloatPixel(&quantum_state,(float) GetPixelRed(image,p),q);
-            q=PopFloatPixel(&quantum_state,(float) GetPixelGreen(image,p),q);
-            q=PopFloatPixel(&quantum_state,(float) GetPixelBlue(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -2969,11 +2898,11 @@ static void ExportRGBQuantum(const Image *image,const QuantumInfo *quantum_info,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToLong(GetPixelRed(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -2985,9 +2914,9 @@ static void ExportRGBQuantum(const Image *image,const QuantumInfo *quantum_info,
         {
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopDoublePixel(&quantum_state,(double) GetPixelRed(image,p),q);
-            q=PopDoublePixel(&quantum_state,(double) GetPixelGreen(image,p),q);
-            q=PopDoublePixel(&quantum_state,(double) GetPixelBlue(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -2999,12 +2928,12 @@ static void ExportRGBQuantum(const Image *image,const QuantumInfo *quantum_info,
       range=GetQuantumRange(quantum_info->depth);
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelRed(image,p),range),q);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelGreen(image,p),range),q);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelBlue(image,p),range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
+          range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
+          range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
+          range),q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -3013,21 +2942,16 @@ static void ExportRGBQuantum(const Image *image,const QuantumInfo *quantum_info,
   }
 }
 
-static void ExportRGBAQuantum(const Image *image,
-  const QuantumInfo *quantum_info,QuantumState quantum_state,
+static void ExportRGBAQuantum(const Image *image,QuantumInfo *quantum_info,
   const MagickSizeType number_pixels,const Quantum *restrict p,
   unsigned char *restrict q,ExceptionInfo *exception)
 {
-  EndianType
-    endian;
-
   QuantumAny
     range;
 
   register ssize_t
     x;
 
-  endian=quantum_state.endian;
   switch (quantum_info->depth)
   {
     case 8:
@@ -3099,7 +3023,7 @@ static void ExportRGBAQuantum(const Image *image,
                 {
                   pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
                     range) << 2);
-                  q=PopLongPixel(endian,pixel,q);
+                  q=PopLongPixel(quantum_info->endian,pixel,q);
                   pixel=0;
                   break;
                 }
@@ -3116,15 +3040,15 @@ static void ExportRGBAQuantum(const Image *image,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
-            q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,q);
+            q=PopQuantumLongPixel(quantum_info,pixel,q);
             pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
               range);
-            q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,q);
+            q=PopQuantumLongPixel(quantum_info,pixel,q);
             pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
-            q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,q);
+            q=PopQuantumLongPixel(quantum_info,pixel,q);
             pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),
               range);
-            q=PopQuantumLongPixel(&quantum_state,quantum_info->depth,pixel,q);
+            q=PopQuantumLongPixel(quantum_info,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -3133,13 +3057,13 @@ static void ExportRGBAQuantum(const Image *image,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+        q=PopQuantumPixel(quantum_info,pixel,q);
         pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+        q=PopQuantumPixel(quantum_info,pixel,q);
         pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+        q=PopQuantumPixel(quantum_info,pixel,q);
         pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),range);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,pixel,q);
+        q=PopQuantumPixel(quantum_info,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -3155,13 +3079,13 @@ static void ExportRGBAQuantum(const Image *image,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
-            q=PopShortPixel(endian,pixel,q);
+            q=PopShortPixel(quantum_info->endian,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -3170,13 +3094,13 @@ static void ExportRGBAQuantum(const Image *image,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToShort(GetPixelRed(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
-        q=PopShortPixel(endian,pixel,q);
+        q=PopShortPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -3194,11 +3118,11 @@ static void ExportRGBAQuantum(const Image *image,
             float
               pixel;
 
-            q=PopFloatPixel(&quantum_state,(float) GetPixelRed(image,p),q);
-            q=PopFloatPixel(&quantum_state,(float) GetPixelGreen(image,p),q);
-            q=PopFloatPixel(&quantum_state,(float) GetPixelBlue(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
+            q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
             pixel=(float) GetPixelAlpha(image,p);
-            q=PopFloatPixel(&quantum_state,pixel,q);
+            q=PopFloatPixel(quantum_info,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -3207,13 +3131,13 @@ static void ExportRGBAQuantum(const Image *image,
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
         pixel=ScaleQuantumToLong(GetPixelRed(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
-        q=PopLongPixel(endian,pixel,q);
+        q=PopLongPixel(quantum_info->endian,pixel,q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -3228,11 +3152,11 @@ static void ExportRGBAQuantum(const Image *image,
 
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
-            q=PopDoublePixel(&quantum_state,(double) GetPixelRed(image,p),q);
-            q=PopDoublePixel(&quantum_state,(double) GetPixelGreen(image,p),q);
-            q=PopDoublePixel(&quantum_state,(double) GetPixelBlue(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
+            q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
             pixel=(double) GetPixelAlpha(image,p);
-            q=PopDoublePixel(&quantum_state,pixel,q);
+            q=PopDoublePixel(quantum_info,pixel,q);
             p+=GetPixelChannels(image);
             q+=quantum_info->pad;
           }
@@ -3244,14 +3168,14 @@ static void ExportRGBAQuantum(const Image *image,
       range=GetQuantumRange(quantum_info->depth);
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelRed(image,p),range),q);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelGreen(image,p),range),q);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelBlue(image,p),range),q);
-        q=PopQuantumPixel(&quantum_state,quantum_info->depth,
-          ScaleQuantumToAny(GetPixelAlpha(image,p),range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
+          range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
+          range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
+          range),q);
+        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
+          range),q);
         p+=GetPixelChannels(image);
         q+=quantum_info->pad;
       }
@@ -3260,16 +3184,13 @@ static void ExportRGBAQuantum(const Image *image,
   }
 }
 
-MagickExport size_t ExportQuantumPixels(Image *image,CacheView *image_view,
-  const QuantumInfo *quantum_info,const QuantumType quantum_type,
-  unsigned char *pixels,ExceptionInfo *exception)
+MagickExport size_t ExportQuantumPixels(const Image *image,
+  CacheView *image_view,QuantumInfo *quantum_info,
+  const QuantumType quantum_type,unsigned char *pixels,ExceptionInfo *exception)
 {
   MagickSizeType
     number_pixels;
 
-  QuantumState
-    quantum_state;
-
   register const Quantum
     *restrict p;
 
@@ -3302,7 +3223,7 @@ MagickExport size_t ExportQuantumPixels(Image *image,CacheView *image_view,
     }
   if (quantum_info->alpha_type == AssociatedQuantumAlpha)
     {
-      MagickRealType
+      double
         Sa;
 
       register Quantum
@@ -3319,6 +3240,11 @@ MagickExport size_t ExportQuantumPixels(Image *image,CacheView *image_view,
         register ssize_t
           i;
 
+        if (GetPixelMask(image,q) != 0)
+          {
+            q+=GetPixelChannels(image);
+            continue;
+          }
         Sa=QuantumScale*GetPixelAlpha(image,q);
         for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
         {
@@ -3328,10 +3254,11 @@ MagickExport size_t ExportQuantumPixels(Image *image,CacheView *image_view,
           PixelTrait
             traits;
 
-          channel=GetPixelChannelMapChannel(image,i);
-          traits=GetPixelChannelMapTraits(image,channel);
-          if ((traits & UpdatePixelTrait) != 0)
-            q[i]=ClampToQuantum(Sa*q[i]);
+          channel=GetPixelChannelChannel(image,i);
+          traits=GetPixelChannelTraits(image,channel);
+          if ((traits & UpdatePixelTrait) == 0)
+            continue;
+          q[i]=ClampToQuantum(Sa*q[i]);
         }
         q+=GetPixelChannels(image);
       }
@@ -3372,118 +3299,101 @@ MagickExport size_t ExportQuantumPixels(Image *image,CacheView *image_view,
     }
   x=0;
   q=pixels;
-  InitializeQuantumState(quantum_info,image->endian,&quantum_state);
+  ResetQuantumState(quantum_info);
   extent=GetQuantumExtent(image,quantum_info,quantum_type);
   switch (quantum_type)
   {
     case AlphaQuantum:
     {
-      ExportAlphaQuantum(image,quantum_info,quantum_state,number_pixels,p,q,
-        exception);
+      ExportAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
       break;
     }
     case BGRQuantum:
     {
-      ExportBGRQuantum(image,quantum_info,quantum_state,number_pixels,p,q,
-        exception);
+      ExportBGRQuantum(image,quantum_info,number_pixels,p,q,exception);
       break;
     }
     case BGRAQuantum:
     case BGROQuantum:
     {
-      ExportBGRAQuantum(image,quantum_info,quantum_state,number_pixels,p,q,
-        exception);
+      ExportBGRAQuantum(image,quantum_info,number_pixels,p,q,exception);
       break;
     }
     case BlackQuantum:
     {
-      ExportBlackQuantum(image,quantum_info,quantum_state,number_pixels,p,q,
-        exception);
+      ExportBlackQuantum(image,quantum_info,number_pixels,p,q,exception);
       break;
     }
     case BlueQuantum:
     case YellowQuantum:
     {
-      ExportBlueQuantum(image,quantum_info,quantum_state,number_pixels,p,q,
-        exception);
+      ExportBlueQuantum(image,quantum_info,number_pixels,p,q,exception);
       break;
     }
     case CMYKQuantum:
     {
-      ExportCMYKQuantum(image,quantum_info,quantum_state,number_pixels,p,q,
-        exception);
+      ExportCMYKQuantum(image,quantum_info,number_pixels,p,q,exception);
       break;
     }
     case CMYKAQuantum:
     case CMYKOQuantum:
     {
-      ExportCMYKAQuantum(image,quantum_info,quantum_state,number_pixels,p,q,
-        exception);
+      ExportCMYKAQuantum(image,quantum_info,number_pixels,p,q,exception);
       break;
     }
     case CbYCrYQuantum:
     {
-      ExportCbYCrYQuantum(image,quantum_info,quantum_state,number_pixels,p,q,
-        exception);
+      ExportCbYCrYQuantum(image,quantum_info,number_pixels,p,q,exception);
       break;
     }
     case GrayQuantum:
     {
-      ExportGrayQuantum(image,quantum_info,quantum_state,number_pixels,p,q,
-        exception);
+      ExportGrayQuantum(image,quantum_info,number_pixels,p,q,exception);
       break;
     }
     case GrayAlphaQuantum:
     {
-      ExportGrayAlphaQuantum(image,quantum_info,quantum_state,number_pixels,p,q,
-        exception);
+      ExportGrayAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
       break;
     }
     case GreenQuantum:
     case MagentaQuantum:
     {
-      ExportGreenQuantum(image,quantum_info,quantum_state,number_pixels,p,q,
-        exception);
+      ExportGreenQuantum(image,quantum_info,number_pixels,p,q,exception);
       break;
     }
     case IndexQuantum:
     {
-      ExportIndexQuantum(image,quantum_info,quantum_state,number_pixels,p,q,
-        exception);
+      ExportIndexQuantum(image,quantum_info,number_pixels,p,q,exception);
       break;
     }
     case IndexAlphaQuantum:
     {
-      ExportIndexAlphaQuantum(image,quantum_info,quantum_state,number_pixels,p,
-        q,exception);
+      ExportIndexAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
       break;
     }
     case RedQuantum:
     case CyanQuantum:
     {
-      ExportRedQuantum(image,quantum_info,quantum_state,number_pixels,p,q,
-        exception);
+      ExportRedQuantum(image,quantum_info,number_pixels,p,q,exception);
       break;
     }
     case OpacityQuantum:
     {
-      ExportOpacityQuantum(image,quantum_info,quantum_state,number_pixels,p,q,
-        exception);
+      ExportOpacityQuantum(image,quantum_info,number_pixels,p,q,exception);
       break;
     }
     case RGBQuantum:
     case CbYCrQuantum:
     {
-      ExportRGBQuantum(image,quantum_info,quantum_state,number_pixels,p,q,
-        exception);
+      ExportRGBQuantum(image,quantum_info,number_pixels,p,q,exception);
       break;
     }
     case RGBAQuantum:
     case RGBOQuantum:
     case CbYCrAQuantum:
     {
-      ExportRGBAQuantum(image,quantum_info,quantum_state,number_pixels,p,q,
-        exception);
+      ExportRGBAQuantum(image,quantum_info,number_pixels,p,q,exception);
       break;
     }
     default: