]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Fri, 6 Jan 2012 03:49:31 +0000 (03:49 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Fri, 6 Jan 2012 03:49:31 +0000 (03:49 +0000)
MagickCore/pixel.c

index 1b022197a393c96b3d25340a9dff0e788427d3b0..b7bb800471c9b5e5b90b57f07a884068c3bf2adc 100644 (file)
@@ -348,267 +348,230 @@ MagickExport PixelChannelMap *DestroyPixelChannelMap(
 %    o exception: return any errors or warnings in this structure.
 %
 */
-MagickExport MagickBooleanType ExportImagePixels(const Image *image,
-  const ssize_t x_offset,const ssize_t y_offset,const size_t columns,
-  const size_t rows,const char *map,const StorageType type,void *pixels,
-  ExceptionInfo *exception)
+
+static void ExportCharPixel(const Image *image,const ssize_t x_offset,
+  const ssize_t y_offset,const size_t columns,const size_t rows,
+  const char *restrict map,const QuantumType *quantum_map,
+  unsigned char *restrict pixels,ExceptionInfo *exception)
 {
-  QuantumType
-    *quantum_map;
+  register const Quantum
+    *restrict p;
 
   register ssize_t
-    i,
     x;
 
-  register const Quantum
-    *p;
-
-  size_t
-    length;
+  register unsigned char
+    *q;
 
   ssize_t
     y;
 
-  assert(image != (Image *) NULL);
-  assert(image->signature == MagickSignature);
-  if (image->debug != MagickFalse)
-    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
-  length=strlen(map);
-  quantum_map=(QuantumType *) AcquireQuantumMemory(length,sizeof(*quantum_map));
-  if (quantum_map == (QuantumType *) NULL)
-    {
-      (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
-      return(MagickFalse);
-    }
-  for (i=0; i < (ssize_t) length; i++)
-  {
-    switch (map[i])
+  q=pixels;
+  if (LocaleCompare(map,"BGR") == 0)
     {
-      case 'A':
-      case 'a':
-      {
-        quantum_map[i]=AlphaQuantum;
-        break;
-      }
-      case 'B':
-      case 'b':
-      {
-        quantum_map[i]=BlueQuantum;
-        break;
-      }
-      case 'C':
-      case 'c':
+      for (y=0; y < (ssize_t) rows; y++)
       {
-        quantum_map[i]=CyanQuantum;
-        if (image->colorspace == CMYKColorspace)
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
           break;
-        quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
-        (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-          "ColorSeparatedImageRequired","`%s'",map);
-        return(MagickFalse);
-      }
-      case 'g':
-      case 'G':
-      {
-        quantum_map[i]=GreenQuantum;
-        break;
-      }
-      case 'I':
-      case 'i':
-      {
-        quantum_map[i]=IndexQuantum;
-        break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
+          *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
+          *q++=ScaleQuantumToChar(GetPixelRed(image,p));
+          p+=GetPixelChannels(image);
+        }
       }
-      case 'K':
-      case 'k':
+      return;
+    }
+  if (LocaleCompare(map,"BGRA") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
       {
-        quantum_map[i]=BlackQuantum;
-        if (image->colorspace == CMYKColorspace)
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
           break;
-        quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
-        (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-          "ColorSeparatedImageRequired","`%s'",map);
-        return(MagickFalse);
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
+          *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
+          *q++=ScaleQuantumToChar(GetPixelRed(image,p));
+          *q++=ScaleQuantumToChar(GetPixelAlpha(image,p));
+          p+=GetPixelChannels(image);
+        }
       }
-      case 'M':
-      case 'm':
+      return;
+    }
+  if (LocaleCompare(map,"BGRP") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
       {
-        quantum_map[i]=MagentaQuantum;
-        if (image->colorspace == CMYKColorspace)
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
           break;
-        quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
-        (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-          "ColorSeparatedImageRequired","`%s'",map);
-        return(MagickFalse);
-      }
-      case 'o':
-      case 'O':
-      {
-        quantum_map[i]=OpacityQuantum;
-        break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
+          *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
+          *q++=ScaleQuantumToChar(GetPixelRed(image,p));
+          *q++=ScaleQuantumToChar((Quantum) 0);
+          p+=GetPixelChannels(image);
+        }
       }
-      case 'P':
-      case 'p':
+      return;
+    }
+  if (LocaleCompare(map,"I") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
       {
-        quantum_map[i]=UndefinedQuantum;
-        break;
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=ScaleQuantumToChar(GetPixelIntensity(image,p));
+          p+=GetPixelChannels(image);
+        }
       }
-      case 'R':
-      case 'r':
+      return;
+    }
+  if (LocaleCompare(map,"RGB") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
       {
-        quantum_map[i]=RedQuantum;
-        break;
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=ScaleQuantumToChar(GetPixelRed(image,p));
+          *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
+          *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
+          p+=GetPixelChannels(image);
+        }
       }
-      case 'Y':
-      case 'y':
+      return;
+    }
+  if (LocaleCompare(map,"RGBA") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
       {
-        quantum_map[i]=YellowQuantum;
-        if (image->colorspace == CMYKColorspace)
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
           break;
-        quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
-        (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-          "ColorSeparatedImageRequired","`%s'",map);
-        return(MagickFalse);
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=ScaleQuantumToChar(GetPixelRed(image,p));
+          *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
+          *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
+          *q++=ScaleQuantumToChar(GetPixelAlpha(image,p));
+          p+=GetPixelChannels(image);
+        }
       }
-      default:
+      return;
+    }
+  if (LocaleCompare(map,"RGBP") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
       {
-        quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
-        (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
-          "UnrecognizedPixelMap","`%s'",map);
-        return(MagickFalse);
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=ScaleQuantumToChar(GetPixelRed(image,p));
+          *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
+          *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
+          *q++=ScaleQuantumToChar((Quantum) 0);
+          p+=GetPixelChannels(image);
+        }
       }
+      return;
     }
-  }
-  switch (type)
+  for (y=0; y < (ssize_t) rows; y++)
   {
-    case CharPixel:
+    p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+    if (p == (const Quantum *) NULL)
+      break;
+    for (x=0; x < (ssize_t) columns; x++)
     {
-      register unsigned char
-        *q;
+      register ssize_t
+        i;
 
-      q=(unsigned char *) pixels;
-      if (LocaleCompare(map,"BGR") == 0)
+      for (i=0; i < (ssize_t) strlen(map); i++)
+      {
+        *q=0;
+        switch (quantum_map[i])
         {
-          for (y=0; y < (ssize_t) rows; y++)
+          case RedQuantum:
+          case CyanQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
-              *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
-              *q++=ScaleQuantumToChar(GetPixelRed(image,p));
-              p+=GetPixelChannels(image);
-            }
+            *q=ScaleQuantumToChar(GetPixelRed(image,p));
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"BGRA") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case GreenQuantum:
+          case MagentaQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
-              *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
-              *q++=ScaleQuantumToChar(GetPixelRed(image,p));
-              *q++=ScaleQuantumToChar(GetPixelAlpha(image,p));
-              p+=GetPixelChannels(image);
-            }
+            *q=ScaleQuantumToChar(GetPixelGreen(image,p));
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"BGRP") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case BlueQuantum:
+          case YellowQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
-              *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
-              *q++=ScaleQuantumToChar(GetPixelRed(image,p));
-              *q++=ScaleQuantumToChar((Quantum) 0);
-              p+=GetPixelChannels(image);
-            }
+            *q=ScaleQuantumToChar(GetPixelBlue(image,p));
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"I") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case AlphaQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=ScaleQuantumToChar(GetPixelIntensity(image,p));
-              p+=GetPixelChannels(image);
-            }
+            *q=ScaleQuantumToChar(GetPixelAlpha(image,p));
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"RGB") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case OpacityQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=ScaleQuantumToChar(GetPixelRed(image,p));
-              *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
-              *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
-              p+=GetPixelChannels(image);
-            }
+            *q=ScaleQuantumToChar(GetPixelAlpha(image,p));
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"RGBA") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case BlackQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=ScaleQuantumToChar(GetPixelRed(image,p));
-              *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
-              *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
-              *q++=ScaleQuantumToChar(GetPixelAlpha(image,p));
-              p+=GetPixelChannels(image);
-            }
+            if (image->colorspace == CMYKColorspace)
+              *q=ScaleQuantumToChar(GetPixelBlack(image,p));
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"RGBP") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case IndexQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=ScaleQuantumToChar(GetPixelRed(image,p));
-              *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
-              *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
-              *q++=ScaleQuantumToChar((Quantum) 0);
-              p+=GetPixelChannels(image);
-            }
+            *q=ScaleQuantumToChar(GetPixelIntensity(image,p));
+            break;
           }
-          break;
+          default:
+            break;
         }
+        q++;
+      }
+      p+=GetPixelChannels(image);
+    }
+  }
+}
+
+static void ExportDoublePixel(const Image *image,const ssize_t x_offset,
+  const ssize_t y_offset,const size_t columns,const size_t rows,
+  const char *restrict map,const QuantumType *quantum_map,
+  unsigned char *restrict pixels,ExceptionInfo *exception)
+{
+  register const Quantum
+    *restrict p;
+
+  register double
+    *q;
+
+  register ssize_t
+    x;
+
+  ssize_t
+    y;
+
+  q=(double *) pixels;
+  if (LocaleCompare(map,"BGR") == 0)
+    {
       for (y=0; y < (ssize_t) rows; y++)
       {
         p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
@@ -616,187 +579,102 @@ MagickExport MagickBooleanType ExportImagePixels(const Image *image,
           break;
         for (x=0; x < (ssize_t) columns; x++)
         {
-          for (i=0; i < (ssize_t) length; i++)
-          {
-            *q=0;
-            switch (quantum_map[i])
-            {
-              case RedQuantum:
-              case CyanQuantum:
-              {
-                *q=ScaleQuantumToChar(GetPixelRed(image,p));
-                break;
-              }
-              case GreenQuantum:
-              case MagentaQuantum:
-              {
-                *q=ScaleQuantumToChar(GetPixelGreen(image,p));
-                break;
-              }
-              case BlueQuantum:
-              case YellowQuantum:
-              {
-                *q=ScaleQuantumToChar(GetPixelBlue(image,p));
-                break;
-              }
-              case AlphaQuantum:
-              {
-                *q=ScaleQuantumToChar(GetPixelAlpha(image,p));
-                break;
-              }
-              case OpacityQuantum:
-              {
-                *q=ScaleQuantumToChar(GetPixelAlpha(image,p));
-                break;
-              }
-              case BlackQuantum:
-              {
-                if (image->colorspace == CMYKColorspace)
-                  *q=ScaleQuantumToChar(GetPixelBlack(image,p));
-                break;
-              }
-              case IndexQuantum:
-              {
-                *q=ScaleQuantumToChar(GetPixelIntensity(image,p));
-                break;
-              }
-              default:
-                break;
-            }
-            q++;
-          }
+          *q++=(double) (QuantumScale*GetPixelBlue(image,p));
+          *q++=(double) (QuantumScale*GetPixelGreen(image,p));
+          *q++=(double) (QuantumScale*GetPixelRed(image,p));
           p+=GetPixelChannels(image);
         }
       }
-      break;
+      return;
     }
-    case DoublePixel:
+  if (LocaleCompare(map,"BGRA") == 0)
     {
-      register double
-        *q;
-
-      q=(double *) pixels;
-      if (LocaleCompare(map,"BGR") == 0)
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=(double) (QuantumScale*GetPixelBlue(image,p));
-              *q++=(double) (QuantumScale*GetPixelGreen(image,p));
-              *q++=(double) (QuantumScale*GetPixelRed(image,p));
-              p+=GetPixelChannels(image);
-            }
-          }
-          break;
+          *q++=(double) (QuantumScale*GetPixelBlue(image,p));
+          *q++=(double) (QuantumScale*GetPixelGreen(image,p));
+          *q++=(double) (QuantumScale*GetPixelRed(image,p));
+          *q++=(double) (QuantumScale*GetPixelAlpha(image,p));
+          p+=GetPixelChannels(image);
         }
-      if (LocaleCompare(map,"BGRA") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=(double) (QuantumScale*GetPixelBlue(image,p));
-              *q++=(double) (QuantumScale*GetPixelGreen(image,p));
-              *q++=(double) (QuantumScale*GetPixelRed(image,p));
-              *q++=(double) (QuantumScale*GetPixelAlpha(image,p));
-              p+=GetPixelChannels(image);
-            }
-          }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"BGRP") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
           break;
-        }
-      if (LocaleCompare(map,"BGRP") == 0)
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=(double) (QuantumScale*GetPixelBlue(image,p));
-              *q++=(double) (QuantumScale*GetPixelGreen(image,p));
-              *q++=(double) (QuantumScale*GetPixelRed(image,p));
-              *q++=0.0;
-              p+=GetPixelChannels(image);
-            }
-          }
-          break;
+          *q++=(double) (QuantumScale*GetPixelBlue(image,p));
+          *q++=(double) (QuantumScale*GetPixelGreen(image,p));
+          *q++=(double) (QuantumScale*GetPixelRed(image,p));
+          *q++=0.0;
+          p+=GetPixelChannels(image);
         }
-      if (LocaleCompare(map,"I") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=(double) (QuantumScale*GetPixelIntensity(image,p));
-              p+=GetPixelChannels(image);
-            }
-          }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"I") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
           break;
-        }
-      if (LocaleCompare(map,"RGB") == 0)
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=(double) (QuantumScale*GetPixelRed(image,p));
-              *q++=(double) (QuantumScale*GetPixelGreen(image,p));
-              *q++=(double) (QuantumScale*GetPixelBlue(image,p));
-              p+=GetPixelChannels(image);
-            }
-          }
-          break;
+          *q++=(double) (QuantumScale*GetPixelIntensity(image,p));
+          p+=GetPixelChannels(image);
         }
-      if (LocaleCompare(map,"RGBA") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=(double) (QuantumScale*GetPixelRed(image,p));
-              *q++=(double) (QuantumScale*GetPixelGreen(image,p));
-              *q++=(double) (QuantumScale*GetPixelBlue(image,p));
-              *q++=(double) (QuantumScale*GetPixelAlpha(image,p));
-              p+=GetPixelChannels(image);
-            }
-          }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGB") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
           break;
-        }
-      if (LocaleCompare(map,"RGBP") == 0)
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=(double) (QuantumScale*GetPixelRed(image,p));
-              *q++=(double) (QuantumScale*GetPixelGreen(image,p));
-              *q++=(double) (QuantumScale*GetPixelBlue(image,p));
-              *q++=0.0;
-              p+=GetPixelChannels(image);
-            }
-          }
+          *q++=(double) (QuantumScale*GetPixelRed(image,p));
+          *q++=(double) (QuantumScale*GetPixelGreen(image,p));
+          *q++=(double) (QuantumScale*GetPixelBlue(image,p));
+          p+=GetPixelChannels(image);
+        }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGBA") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
           break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=(double) (QuantumScale*GetPixelRed(image,p));
+          *q++=(double) (QuantumScale*GetPixelGreen(image,p));
+          *q++=(double) (QuantumScale*GetPixelBlue(image,p));
+          *q++=(double) (QuantumScale*GetPixelAlpha(image,p));
+          p+=GetPixelChannels(image);
         }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGBP") == 0)
+    {
       for (y=0; y < (ssize_t) rows; y++)
       {
         p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
@@ -804,188 +682,100 @@ MagickExport MagickBooleanType ExportImagePixels(const Image *image,
           break;
         for (x=0; x < (ssize_t) columns; x++)
         {
-          for (i=0; i < (ssize_t) length; i++)
-          {
-            *q=0;
-            switch (quantum_map[i])
-            {
-              case RedQuantum:
-              case CyanQuantum:
-              {
-                *q=(double) (QuantumScale*GetPixelRed(image,p));
-                break;
-              }
-              case GreenQuantum:
-              case MagentaQuantum:
-              {
-                *q=(double) (QuantumScale*GetPixelGreen(image,p));
-                break;
-              }
-              case BlueQuantum:
-              case YellowQuantum:
-              {
-                *q=(double) (QuantumScale*GetPixelBlue(image,p));
-                break;
-              }
-              case AlphaQuantum:
-              {
-                *q=(double) (QuantumScale*GetPixelAlpha(image,p));
-                break;
-              }
-              case OpacityQuantum:
-              {
-                *q=(double) (QuantumScale*GetPixelAlpha(image,p));
-                break;
-              }
-              case BlackQuantum:
-              {
-                if (image->colorspace == CMYKColorspace)
-                  *q=(double) (QuantumScale*
-                    GetPixelBlack(image,p));
-                break;
-              }
-              case IndexQuantum:
-              {
-                *q=(double) (QuantumScale*GetPixelIntensity(image,p));
-                break;
-              }
-              default:
-                *q=0;
-            }
-            q++;
-          }
+          *q++=(double) (QuantumScale*GetPixelRed(image,p));
+          *q++=(double) (QuantumScale*GetPixelGreen(image,p));
+          *q++=(double) (QuantumScale*GetPixelBlue(image,p));
+          *q++=0.0;
           p+=GetPixelChannels(image);
         }
       }
-      break;
+      return;
     }
-    case FloatPixel:
+  for (y=0; y < (ssize_t) rows; y++)
+  {
+    p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+    if (p == (const Quantum *) NULL)
+      break;
+    for (x=0; x < (ssize_t) columns; x++)
     {
-      register float
-        *q;
+      register ssize_t
+        i;
 
-      q=(float *) pixels;
-      if (LocaleCompare(map,"BGR") == 0)
+      for (i=0; i < (ssize_t) strlen(map); i++)
+      {
+        *q=0;
+        switch (quantum_map[i])
         {
-          for (y=0; y < (ssize_t) rows; y++)
+          case RedQuantum:
+          case CyanQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=(float) (QuantumScale*GetPixelBlue(image,p));
-              *q++=(float) (QuantumScale*GetPixelGreen(image,p));
-              *q++=(float) (QuantumScale*GetPixelRed(image,p));
-              p+=GetPixelChannels(image);
-            }
+            *q=(double) (QuantumScale*GetPixelRed(image,p));
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"BGRA") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case GreenQuantum:
+          case MagentaQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=(float) (QuantumScale*GetPixelBlue(image,p));
-              *q++=(float) (QuantumScale*GetPixelGreen(image,p));
-              *q++=(float) (QuantumScale*GetPixelRed(image,p));
-              *q++=(float) (QuantumScale*GetPixelAlpha(image,p));
-              p+=GetPixelChannels(image);
-            }
+            *q=(double) (QuantumScale*GetPixelGreen(image,p));
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"BGRP") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case BlueQuantum:
+          case YellowQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=(float) (QuantumScale*GetPixelBlue(image,p));
-              *q++=(float) (QuantumScale*GetPixelGreen(image,p));
-              *q++=(float) (QuantumScale*GetPixelRed(image,p));
-              *q++=0.0;
-              p+=GetPixelChannels(image);
-            }
+            *q=(double) (QuantumScale*GetPixelBlue(image,p));
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"I") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case AlphaQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=(float) (QuantumScale*GetPixelIntensity(image,p));
-              p+=GetPixelChannels(image);
-            }
+            *q=(double) (QuantumScale*GetPixelAlpha(image,p));
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"RGB") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case OpacityQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=(float) (QuantumScale*GetPixelRed(image,p));
-              *q++=(float) (QuantumScale*GetPixelGreen(image,p));
-              *q++=(float) (QuantumScale*GetPixelBlue(image,p));
-              p+=GetPixelChannels(image);
-            }
+            *q=(double) (QuantumScale*GetPixelAlpha(image,p));
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"RGBA") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case BlackQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=(float) (QuantumScale*GetPixelRed(image,p));
-              *q++=(float) (QuantumScale*GetPixelGreen(image,p));
-              *q++=(float) (QuantumScale*GetPixelBlue(image,p));
-              *q++=(float) (QuantumScale*GetPixelAlpha(image,p));
-              p+=GetPixelChannels(image);
-            }
+            if (image->colorspace == CMYKColorspace)
+              *q=(double) (QuantumScale*
+                GetPixelBlack(image,p));
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"RGBP") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case IndexQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=(float) (QuantumScale*GetPixelRed(image,p));
-              *q++=(float) (QuantumScale*GetPixelGreen(image,p));
-              *q++=(float) (QuantumScale*GetPixelBlue(image,p));
-              *q++=0.0;
-              p+=GetPixelChannels(image);
-            }
+            *q=(double) (QuantumScale*GetPixelIntensity(image,p));
+            break;
           }
-          break;
+          default:
+            *q=0;
         }
+        q++;
+      }
+      p+=GetPixelChannels(image);
+    }
+  }
+}
+
+static void ExportFloatPixel(const Image *image,const ssize_t x_offset,
+  const ssize_t y_offset,const size_t columns,const size_t rows,
+  const char *restrict map,const QuantumType *quantum_map,
+  unsigned char *restrict pixels,ExceptionInfo *exception)
+{
+  register const Quantum
+    *restrict p;
+
+  register float
+    *q;
+
+  register ssize_t
+    x;
+
+  ssize_t
+    y;
+
+  q=(float *) pixels;
+  if (LocaleCompare(map,"BGR") == 0)
+    {
       for (y=0; y < (ssize_t) rows; y++)
       {
         p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
@@ -993,188 +783,67 @@ MagickExport MagickBooleanType ExportImagePixels(const Image *image,
           break;
         for (x=0; x < (ssize_t) columns; x++)
         {
-          for (i=0; i < (ssize_t) length; i++)
-          {
-            *q=0;
-            switch (quantum_map[i])
-            {
-              case RedQuantum:
-              case CyanQuantum:
-              {
-                *q=(float) (QuantumScale*GetPixelRed(image,p));
-                break;
-              }
-              case GreenQuantum:
-              case MagentaQuantum:
-              {
-                *q=(float) (QuantumScale*GetPixelGreen(image,p));
-                break;
-              }
-              case BlueQuantum:
-              case YellowQuantum:
-              {
-                *q=(float) (QuantumScale*GetPixelBlue(image,p));
-                break;
-              }
-              case AlphaQuantum:
-              {
-                *q=(float) (QuantumScale*((Quantum) (GetPixelAlpha(image,p))));
-                break;
-              }
-              case OpacityQuantum:
-              {
-                *q=(float) (QuantumScale*GetPixelAlpha(image,p));
-                break;
-              }
-              case BlackQuantum:
-              {
-                if (image->colorspace == CMYKColorspace)
-                  *q=(float) (QuantumScale* GetPixelBlack(image,p));
-                break;
-              }
-              case IndexQuantum:
-              {
-                *q=(float) (QuantumScale*GetPixelIntensity(image,p));
-                break;
-              }
-              default:
-                *q=0;
-            }
-            q++;
-          }
+          *q++=(float) (QuantumScale*GetPixelBlue(image,p));
+          *q++=(float) (QuantumScale*GetPixelGreen(image,p));
+          *q++=(float) (QuantumScale*GetPixelRed(image,p));
           p+=GetPixelChannels(image);
         }
       }
-      break;
+      return;
     }
-    case IntegerPixel:
+  if (LocaleCompare(map,"BGRA") == 0)
     {
-      register unsigned int
-        *q;
-
-      q=(unsigned int *) pixels;
-      if (LocaleCompare(map,"BGR") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=(unsigned int) ScaleQuantumToLong(GetPixelBlue(image,p));
-              *q++=(unsigned int) ScaleQuantumToLong(GetPixelGreen(image,p));
-              *q++=(unsigned int) ScaleQuantumToLong(GetPixelRed(image,p));
-              p+=GetPixelChannels(image);
-            }
-          }
-          break;
-        }
-      if (LocaleCompare(map,"BGRA") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=(unsigned int) ScaleQuantumToLong(GetPixelBlue(image,p));
-              *q++=(unsigned int) ScaleQuantumToLong(GetPixelGreen(image,p));
-              *q++=(unsigned int) ScaleQuantumToLong(GetPixelRed(image,p));
-              *q++=(unsigned int) ScaleQuantumToLong(GetPixelAlpha(image,p));
-              p+=GetPixelChannels(image);
-            }
-          }
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
           break;
-        }
-      if (LocaleCompare(map,"BGRP") == 0)
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=(unsigned int) ScaleQuantumToLong(GetPixelBlue(image,p));
-              *q++=(unsigned int) ScaleQuantumToLong(GetPixelGreen(image,p));
-              *q++=(unsigned int) ScaleQuantumToLong(GetPixelRed(image,p));
-              *q++=0U;
-              p+=GetPixelChannels(image);
-            }
-          }
-          break;
+          *q++=(float) (QuantumScale*GetPixelBlue(image,p));
+          *q++=(float) (QuantumScale*GetPixelGreen(image,p));
+          *q++=(float) (QuantumScale*GetPixelRed(image,p));
+          *q++=(float) (QuantumScale*GetPixelAlpha(image,p));
+          p+=GetPixelChannels(image);
         }
-      if (LocaleCompare(map,"I") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=(unsigned int) ScaleQuantumToLong(
-                GetPixelIntensity(image,p));
-              p+=GetPixelChannels(image);
-            }
-          }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"BGRP") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
           break;
-        }
-      if (LocaleCompare(map,"RGB") == 0)
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=(unsigned int) ScaleQuantumToLong(GetPixelRed(image,p));
-              *q++=(unsigned int) ScaleQuantumToLong(GetPixelGreen(image,p));
-              *q++=(unsigned int) ScaleQuantumToLong(GetPixelBlue(image,p));
-              p+=GetPixelChannels(image);
-            }
-          }
-          break;
+          *q++=(float) (QuantumScale*GetPixelBlue(image,p));
+          *q++=(float) (QuantumScale*GetPixelGreen(image,p));
+          *q++=(float) (QuantumScale*GetPixelRed(image,p));
+          *q++=0.0;
+          p+=GetPixelChannels(image);
         }
-      if (LocaleCompare(map,"RGBA") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=(unsigned int) ScaleQuantumToLong(GetPixelRed(image,p));
-              *q++=(unsigned int) ScaleQuantumToLong(GetPixelGreen(image,p));
-              *q++=(unsigned int) ScaleQuantumToLong(GetPixelBlue(image,p));
-              *q++=(unsigned int) ScaleQuantumToLong(GetPixelAlpha(image,p));
-              p+=GetPixelChannels(image);
-            }
-          }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"I") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
           break;
-        }
-      if (LocaleCompare(map,"RGBP") == 0)
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=(unsigned int) ScaleQuantumToLong(GetPixelRed(image,p));
-              *q++=(unsigned int) ScaleQuantumToLong(GetPixelGreen(image,p));
-              *q++=(unsigned int) ScaleQuantumToLong(GetPixelBlue(image,p));
-              *q++=0U;
-              p+=GetPixelChannels(image);
-            }
-          }
-          break;
+          *q++=(float) (QuantumScale*GetPixelIntensity(image,p));
+          p+=GetPixelChannels(image);
         }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGB") == 0)
+    {
       for (y=0; y < (ssize_t) rows; y++)
       {
         p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
@@ -1182,188 +851,134 @@ MagickExport MagickBooleanType ExportImagePixels(const Image *image,
           break;
         for (x=0; x < (ssize_t) columns; x++)
         {
-          for (i=0; i < (ssize_t) length; i++)
-          {
-            *q=0;
-            switch (quantum_map[i])
-            {
-              case RedQuantum:
-              case CyanQuantum:
-              {
-                *q=(unsigned int) ScaleQuantumToLong(GetPixelRed(image,p));
-                break;
-              }
-              case GreenQuantum:
-              case MagentaQuantum:
-              {
-                *q=(unsigned int) ScaleQuantumToLong(GetPixelGreen(image,p));
-                break;
-              }
-              case BlueQuantum:
-              case YellowQuantum:
-              {
-                *q=(unsigned int) ScaleQuantumToLong(GetPixelBlue(image,p));
-                break;
-              }
-              case AlphaQuantum:
-              {
-                *q=(unsigned int) ScaleQuantumToLong(GetPixelAlpha(image,p));
-                break;
-              }
-              case OpacityQuantum:
-              {
-                *q=(unsigned int) ScaleQuantumToLong(GetPixelAlpha(image,p));
-                break;
-              }
-              case BlackQuantum:
-              {
-                if (image->colorspace == CMYKColorspace)
-                  *q=(unsigned int) ScaleQuantumToLong(GetPixelBlack(image,p));
-                break;
-              }
-              case IndexQuantum:
-              {
-                *q=(unsigned int) ScaleQuantumToLong(
-                  GetPixelIntensity(image,p));
-                break;
-              }
-              default:
-                *q=0;
-            }
-            q++;
-          }
+          *q++=(float) (QuantumScale*GetPixelRed(image,p));
+          *q++=(float) (QuantumScale*GetPixelGreen(image,p));
+          *q++=(float) (QuantumScale*GetPixelBlue(image,p));
           p+=GetPixelChannels(image);
         }
       }
-      break;
+      return;
     }
-    case LongPixel:
+  if (LocaleCompare(map,"RGBA") == 0)
     {
-      register size_t
-        *q;
-
-      q=(size_t *) pixels;
-      if (LocaleCompare(map,"BGR") == 0)
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
-              *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
-              *q++=ScaleQuantumToLong(GetPixelRed(image,p));
-              p+=GetPixelChannels(image);
-            }
-          }
+          *q++=(float) (QuantumScale*GetPixelRed(image,p));
+          *q++=(float) (QuantumScale*GetPixelGreen(image,p));
+          *q++=(float) (QuantumScale*GetPixelBlue(image,p));
+          *q++=(float) (QuantumScale*GetPixelAlpha(image,p));
+          p+=GetPixelChannels(image);
+        }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGBP") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
           break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=(float) (QuantumScale*GetPixelRed(image,p));
+          *q++=(float) (QuantumScale*GetPixelGreen(image,p));
+          *q++=(float) (QuantumScale*GetPixelBlue(image,p));
+          *q++=0.0;
+          p+=GetPixelChannels(image);
         }
-      if (LocaleCompare(map,"BGRA") == 0)
+      }
+      return;
+    }
+  for (y=0; y < (ssize_t) rows; y++)
+  {
+    p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+    if (p == (const Quantum *) NULL)
+      break;
+    for (x=0; x < (ssize_t) columns; x++)
+    {
+      register ssize_t
+        i;
+
+      for (i=0; i < (ssize_t) strlen(map); i++)
+      {
+        *q=0;
+        switch (quantum_map[i])
         {
-          for (y=0; y < (ssize_t) rows; y++)
+          case RedQuantum:
+          case CyanQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
-              *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
-              *q++=ScaleQuantumToLong(GetPixelRed(image,p));
-              *q++=ScaleQuantumToLong(GetPixelAlpha(image,p));
-              p+=GetPixelChannels(image);
-            }
+            *q=(float) (QuantumScale*GetPixelRed(image,p));
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"BGRP") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case GreenQuantum:
+          case MagentaQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
-              *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
-              *q++=ScaleQuantumToLong(GetPixelRed(image,p));
-              *q++=0;
-              p+=GetPixelChannels(image);
-            }
+            *q=(float) (QuantumScale*GetPixelGreen(image,p));
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"I") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case BlueQuantum:
+          case YellowQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=ScaleQuantumToLong(GetPixelIntensity(image,p));
-              p+=GetPixelChannels(image);
-            }
+            *q=(float) (QuantumScale*GetPixelBlue(image,p));
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"RGB") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case AlphaQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=ScaleQuantumToLong(GetPixelRed(image,p));
-              *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
-              *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
-              p+=GetPixelChannels(image);
-            }
+            *q=(float) (QuantumScale*((Quantum) (GetPixelAlpha(image,p))));
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"RGBA") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case OpacityQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=ScaleQuantumToLong(GetPixelRed(image,p));
-              *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
-              *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
-              *q++=ScaleQuantumToLong(GetPixelAlpha(image,p));
-              p+=GetPixelChannels(image);
-            }
+            *q=(float) (QuantumScale*GetPixelAlpha(image,p));
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"RGBP") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case BlackQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=ScaleQuantumToLong(GetPixelRed(image,p));
-              *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
-              *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
-              *q++=0;
-              p+=GetPixelChannels(image);
-            }
+            if (image->colorspace == CMYKColorspace)
+              *q=(float) (QuantumScale* GetPixelBlack(image,p));
+            break;
           }
-          break;
+          case IndexQuantum:
+          {
+            *q=(float) (QuantumScale*GetPixelIntensity(image,p));
+            break;
+          }
+          default:
+            *q=0;
         }
+        q++;
+      }
+      p+=GetPixelChannels(image);
+    }
+  }
+}
+
+static void ExportIntegerPixel(const Image *image,const ssize_t x_offset,
+  const ssize_t y_offset,const size_t columns,const size_t rows,
+  const char *restrict map,const QuantumType *quantum_map,
+  unsigned char *restrict pixels,ExceptionInfo *exception)
+{
+  register const Quantum
+    *restrict p;
+
+  register ssize_t
+    x;
+
+  register unsigned int
+    *q;
+
+  ssize_t
+    y;
+
+  q=(unsigned int *) pixels;
+  if (LocaleCompare(map,"BGR") == 0)
+    {
       for (y=0; y < (ssize_t) rows; y++)
       {
         p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
@@ -1371,187 +986,103 @@ MagickExport MagickBooleanType ExportImagePixels(const Image *image,
           break;
         for (x=0; x < (ssize_t) columns; x++)
         {
-          for (i=0; i < (ssize_t) length; i++)
-          {
-            *q=0;
-            switch (quantum_map[i])
-            {
-              case RedQuantum:
-              case CyanQuantum:
-              {
-                *q=ScaleQuantumToLong(GetPixelRed(image,p));
-                break;
-              }
-              case GreenQuantum:
-              case MagentaQuantum:
-              {
-                *q=ScaleQuantumToLong(GetPixelGreen(image,p));
-                break;
-              }
-              case BlueQuantum:
-              case YellowQuantum:
-              {
-                *q=ScaleQuantumToLong(GetPixelBlue(image,p));
-                break;
-              }
-              case AlphaQuantum:
-              {
-                *q=ScaleQuantumToLong(GetPixelAlpha(image,p));
-                break;
-              }
-              case OpacityQuantum:
-              {
-                *q=ScaleQuantumToLong(GetPixelAlpha(image,p));
-                break;
-              }
-              case BlackQuantum:
-              {
-                if (image->colorspace == CMYKColorspace)
-                  *q=ScaleQuantumToLong(GetPixelBlack(image,p));
-                break;
-              }
-              case IndexQuantum:
-              {
-                *q=ScaleQuantumToLong(GetPixelIntensity(image,p));
-                break;
-              }
-              default:
-                break;
-            }
-            q++;
-          }
+          *q++=(unsigned int) ScaleQuantumToLong(GetPixelBlue(image,p));
+          *q++=(unsigned int) ScaleQuantumToLong(GetPixelGreen(image,p));
+          *q++=(unsigned int) ScaleQuantumToLong(GetPixelRed(image,p));
           p+=GetPixelChannels(image);
         }
       }
-      break;
+      return;
     }
-    case QuantumPixel:
+  if (LocaleCompare(map,"BGRA") == 0)
     {
-      register Quantum
-        *q;
-
-      q=(Quantum *) pixels;
-      if (LocaleCompare(map,"BGR") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=GetPixelBlue(image,p);
-              *q++=GetPixelGreen(image,p);
-              *q++=GetPixelRed(image,p);
-              p+=GetPixelChannels(image);
-            }
-          }
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
           break;
-        }
-      if (LocaleCompare(map,"BGRA") == 0)
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=GetPixelBlue(image,p);
-              *q++=GetPixelGreen(image,p);
-              *q++=GetPixelRed(image,p);
-              *q++=(Quantum) (GetPixelAlpha(image,p));
-              p+=GetPixelChannels(image);
-            }
-          }
-          break;
+          *q++=(unsigned int) ScaleQuantumToLong(GetPixelBlue(image,p));
+          *q++=(unsigned int) ScaleQuantumToLong(GetPixelGreen(image,p));
+          *q++=(unsigned int) ScaleQuantumToLong(GetPixelRed(image,p));
+          *q++=(unsigned int) ScaleQuantumToLong(GetPixelAlpha(image,p));
+          p+=GetPixelChannels(image);
         }
-      if (LocaleCompare(map,"BGRP") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=GetPixelBlue(image,p);
-              *q++=GetPixelGreen(image,p);
-              *q++=GetPixelRed(image,p);
-              *q++=(Quantum) 0;
-              p+=GetPixelChannels(image);
-            }
-          }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"BGRP") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
           break;
-        }
-      if (LocaleCompare(map,"I") == 0)
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=GetPixelIntensity(image,p);
-              p+=GetPixelChannels(image);
-            }
-          }
-          break;
+          *q++=(unsigned int) ScaleQuantumToLong(GetPixelBlue(image,p));
+          *q++=(unsigned int) ScaleQuantumToLong(GetPixelGreen(image,p));
+          *q++=(unsigned int) ScaleQuantumToLong(GetPixelRed(image,p));
+          *q++=0U;
+          p+=GetPixelChannels(image);
         }
-      if (LocaleCompare(map,"RGB") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=GetPixelRed(image,p);
-              *q++=GetPixelGreen(image,p);
-              *q++=GetPixelBlue(image,p);
-              p+=GetPixelChannels(image);
-            }
-          }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"I") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
           break;
-        }
-      if (LocaleCompare(map,"RGBA") == 0)
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=GetPixelRed(image,p);
-              *q++=GetPixelGreen(image,p);
-              *q++=GetPixelBlue(image,p);
-              *q++=(Quantum) (GetPixelAlpha(image,p));
-              p+=GetPixelChannels(image);
-            }
-          }
-          break;
+          *q++=(unsigned int) ScaleQuantumToLong(
+            GetPixelIntensity(image,p));
+          p+=GetPixelChannels(image);
         }
-      if (LocaleCompare(map,"RGBP") == 0)
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGB") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=GetPixelRed(image,p);
-              *q++=GetPixelGreen(image,p);
-              *q++=GetPixelBlue(image,p);
-              *q++=(Quantum) 0;
-              p+=GetPixelChannels(image);
-            }
-          }
+          *q++=(unsigned int) ScaleQuantumToLong(GetPixelRed(image,p));
+          *q++=(unsigned int) ScaleQuantumToLong(GetPixelGreen(image,p));
+          *q++=(unsigned int) ScaleQuantumToLong(GetPixelBlue(image,p));
+          p+=GetPixelChannels(image);
+        }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGBA") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
           break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=(unsigned int) ScaleQuantumToLong(GetPixelRed(image,p));
+          *q++=(unsigned int) ScaleQuantumToLong(GetPixelGreen(image,p));
+          *q++=(unsigned int) ScaleQuantumToLong(GetPixelBlue(image,p));
+          *q++=(unsigned int) ScaleQuantumToLong(GetPixelAlpha(image,p));
+          p+=GetPixelChannels(image);
         }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGBP") == 0)
+    {
       for (y=0; y < (ssize_t) rows; y++)
       {
         p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
@@ -1559,187 +1090,185 @@ MagickExport MagickBooleanType ExportImagePixels(const Image *image,
           break;
         for (x=0; x < (ssize_t) columns; x++)
         {
-          for (i=0; i < (ssize_t) length; i++)
-          {
-            *q=(Quantum) 0;
-            switch (quantum_map[i])
-            {
-              case RedQuantum:
-              case CyanQuantum:
-              {
-                *q=GetPixelRed(image,p);
-                break;
-              }
-              case GreenQuantum:
-              case MagentaQuantum:
-              {
-                *q=GetPixelGreen(image,p);
-                break;
-              }
-              case BlueQuantum:
-              case YellowQuantum:
-              {
-                *q=GetPixelBlue(image,p);
-                break;
-              }
-              case AlphaQuantum:
-              {
-                *q=(Quantum) (GetPixelAlpha(image,p));
-                break;
-              }
-              case OpacityQuantum:
-              {
-                *q=GetPixelAlpha(image,p);
-                break;
-              }
-              case BlackQuantum:
-              {
-                if (image->colorspace == CMYKColorspace)
-                  *q=GetPixelBlack(image,p);
-                break;
-              }
-              case IndexQuantum:
-              {
-                *q=(GetPixelIntensity(image,p));
-                break;
-              }
-              default:
-                *q=(Quantum) 0;
-            }
-            q++;
-          }
+          *q++=(unsigned int) ScaleQuantumToLong(GetPixelRed(image,p));
+          *q++=(unsigned int) ScaleQuantumToLong(GetPixelGreen(image,p));
+          *q++=(unsigned int) ScaleQuantumToLong(GetPixelBlue(image,p));
+          *q++=0U;
           p+=GetPixelChannels(image);
         }
       }
-      break;
+      return;
     }
-    case ShortPixel:
+  for (y=0; y < (ssize_t) rows; y++)
+  {
+    p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+    if (p == (const Quantum *) NULL)
+      break;
+    for (x=0; x < (ssize_t) columns; x++)
     {
-      register unsigned short
-        *q;
+      register ssize_t
+        i;
 
-      q=(unsigned short *) pixels;
-      if (LocaleCompare(map,"BGR") == 0)
+      for (i=0; i < (ssize_t) strlen(map); i++)
+      {
+        *q=0;
+        switch (quantum_map[i])
         {
-          for (y=0; y < (ssize_t) rows; y++)
+          case RedQuantum:
+          case CyanQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
-              *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
-              *q++=ScaleQuantumToShort(GetPixelRed(image,p));
-              p+=GetPixelChannels(image);
-            }
+            *q=(unsigned int) ScaleQuantumToLong(GetPixelRed(image,p));
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"BGRA") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case GreenQuantum:
+          case MagentaQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
-              *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
-              *q++=ScaleQuantumToShort(GetPixelRed(image,p));
-              *q++=ScaleQuantumToShort(GetPixelAlpha(image,p));
-              p+=GetPixelChannels(image);
-            }
+            *q=(unsigned int) ScaleQuantumToLong(GetPixelGreen(image,p));
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"BGRP") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case BlueQuantum:
+          case YellowQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
-              *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
-              *q++=ScaleQuantumToShort(GetPixelRed(image,p));
-              *q++=0;
-              p+=GetPixelChannels(image);
-            }
+            *q=(unsigned int) ScaleQuantumToLong(GetPixelBlue(image,p));
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"I") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case AlphaQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=ScaleQuantumToShort(GetPixelIntensity(image,p));
-              p+=GetPixelChannels(image);
-            }
+            *q=(unsigned int) ScaleQuantumToLong(GetPixelAlpha(image,p));
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"RGB") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case OpacityQuantum:
           {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=ScaleQuantumToShort(GetPixelRed(image,p));
-              *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
-              *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
-              p+=GetPixelChannels(image);
-            }
+            *q=(unsigned int) ScaleQuantumToLong(GetPixelAlpha(image,p));
+            break;
+          }
+          case BlackQuantum:
+          {
+            if (image->colorspace == CMYKColorspace)
+              *q=(unsigned int) ScaleQuantumToLong(GetPixelBlack(image,p));
+            break;
+          }
+          case IndexQuantum:
+          {
+            *q=(unsigned int) ScaleQuantumToLong(
+              GetPixelIntensity(image,p));
+            break;
           }
+          default:
+            *q=0;
+        }
+        q++;
+      }
+      p+=GetPixelChannels(image);
+    }
+  }
+}
+
+static void ExportLongPixel(const Image *image,const ssize_t x_offset,
+  const ssize_t y_offset,const size_t columns,const size_t rows,
+  const char *restrict map,const QuantumType *quantum_map,
+  unsigned char *restrict pixels,ExceptionInfo *exception)
+{
+  register const Quantum
+    *restrict p;
+
+  register ssize_t
+    x;
+
+  register unsigned int
+    *q;
+
+  ssize_t
+    y;
+
+  q=(unsigned int *) pixels;
+  if (LocaleCompare(map,"BGR") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
           break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
+          *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
+          *q++=ScaleQuantumToLong(GetPixelRed(image,p));
+          p+=GetPixelChannels(image);
         }
-      if (LocaleCompare(map,"RGBA") == 0)
+      }
+      return;
+    }
+  if (LocaleCompare(map,"BGRA") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=ScaleQuantumToShort(GetPixelRed(image,p));
-              *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
-              *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
-              *q++=ScaleQuantumToShort(GetPixelAlpha(image,p));
-              p+=GetPixelChannels(image);
-            }
-          }
+          *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
+          *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
+          *q++=ScaleQuantumToLong(GetPixelRed(image,p));
+          *q++=ScaleQuantumToLong(GetPixelAlpha(image,p));
+          p+=GetPixelChannels(image);
+        }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"BGRP") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
           break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
+          *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
+          *q++=ScaleQuantumToLong(GetPixelRed(image,p));
+          *q++=0;
+          p+=GetPixelChannels(image);
         }
-      if (LocaleCompare(map,"RGBP") == 0)
+      }
+      return;
+    }
+  if (LocaleCompare(map,"I") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (p == (const Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              *q++=ScaleQuantumToShort(GetPixelRed(image,p));
-              *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
-              *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
-              *q++=0;
-              p+=GetPixelChannels(image);
-            }
-          }
+          *q++=ScaleQuantumToLong(GetPixelIntensity(image,p));
+          p+=GetPixelChannels(image);
+        }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGB") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
           break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=ScaleQuantumToLong(GetPixelRed(image,p));
+          *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
+          *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
+          p+=GetPixelChannels(image);
         }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGBA") == 0)
+    {
       for (y=0; y < (ssize_t) rows; y++)
       {
         p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
@@ -1747,477 +1276,1923 @@ MagickExport MagickBooleanType ExportImagePixels(const Image *image,
           break;
         for (x=0; x < (ssize_t) columns; x++)
         {
-          for (i=0; i < (ssize_t) length; i++)
-          {
-            *q=0;
-            switch (quantum_map[i])
-            {
-              case RedQuantum:
-              case CyanQuantum:
-              {
-                *q=ScaleQuantumToShort(GetPixelRed(image,p));
-                break;
-              }
-              case GreenQuantum:
-              case MagentaQuantum:
-              {
-                *q=ScaleQuantumToShort(GetPixelGreen(image,p));
-                break;
-              }
-              case BlueQuantum:
-              case YellowQuantum:
-              {
-                *q=ScaleQuantumToShort(GetPixelBlue(image,p));
-                break;
-              }
-              case AlphaQuantum:
-              {
-                *q=ScaleQuantumToShort(GetPixelAlpha(image,p));
-                break;
-              }
-              case OpacityQuantum:
-              {
-                *q=ScaleQuantumToShort(GetPixelAlpha(image,p));
-                break;
-              }
-              case BlackQuantum:
-              {
-                if (image->colorspace == CMYKColorspace)
-                  *q=ScaleQuantumToShort(GetPixelBlack(image,p));
-                break;
-              }
-              case IndexQuantum:
-              {
-                *q=ScaleQuantumToShort(GetPixelIntensity(image,p));
-                break;
-              }
-              default:
-                break;
-            }
-            q++;
-          }
+          *q++=ScaleQuantumToLong(GetPixelRed(image,p));
+          *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
+          *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
+          *q++=ScaleQuantumToLong(GetPixelAlpha(image,p));
           p+=GetPixelChannels(image);
         }
       }
-      break;
+      return;
     }
-    default:
+  if (LocaleCompare(map,"RGBP") == 0)
     {
-      quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
-      (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
-        "UnrecognizedPixelMap","`%s'",map);
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=ScaleQuantumToLong(GetPixelRed(image,p));
+          *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
+          *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
+          *q++=0;
+          p+=GetPixelChannels(image);
+        }
+      }
+      return;
+    }
+  for (y=0; y < (ssize_t) rows; y++)
+  {
+    p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+    if (p == (const Quantum *) NULL)
       break;
+    for (x=0; x < (ssize_t) columns; x++)
+    {
+      register ssize_t
+        i;
+
+      for (i=0; i < (ssize_t) strlen(map); i++)
+      {
+        *q=0;
+        switch (quantum_map[i])
+        {
+          case RedQuantum:
+          case CyanQuantum:
+          {
+            *q=ScaleQuantumToLong(GetPixelRed(image,p));
+            break;
+          }
+          case GreenQuantum:
+          case MagentaQuantum:
+          {
+            *q=ScaleQuantumToLong(GetPixelGreen(image,p));
+            break;
+          }
+          case BlueQuantum:
+          case YellowQuantum:
+          {
+            *q=ScaleQuantumToLong(GetPixelBlue(image,p));
+            break;
+          }
+          case AlphaQuantum:
+          {
+            *q=ScaleQuantumToLong(GetPixelAlpha(image,p));
+            break;
+          }
+          case OpacityQuantum:
+          {
+            *q=ScaleQuantumToLong(GetPixelAlpha(image,p));
+            break;
+          }
+          case BlackQuantum:
+          {
+            if (image->colorspace == CMYKColorspace)
+              *q=ScaleQuantumToLong(GetPixelBlack(image,p));
+            break;
+          }
+          case IndexQuantum:
+          {
+            *q=ScaleQuantumToLong(GetPixelIntensity(image,p));
+            break;
+          }
+          default:
+            break;
+        }
+        q++;
+      }
+      p+=GetPixelChannels(image);
     }
   }
-  quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
-  return(MagickTrue);
 }
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%                                                                             %
-%                                                                             %
-%                                                                             %
-%   G e t P i x e l I n f o                                                   %
-%                                                                             %
-%                                                                             %
-%                                                                             %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-%  GetPixelInfo() initializes the PixelInfo structure.
-%
-%  The format of the GetPixelInfo method is:
-%
-%      GetPixelInfo(const Image *image,PixelInfo *pixel)
-%
-%  A description of each parameter follows:
-%
-%    o image: the image.
-%
-%    o pixel: Specifies a pointer to a PixelInfo structure.
-%
-*/
-MagickExport void GetPixelInfo(const Image *image,PixelInfo *pixel)
+
+static void ExportQuantumPixel(const Image *image,const ssize_t x_offset,
+  const ssize_t y_offset,const size_t columns,const size_t rows,
+  const char *restrict map,const QuantumType *quantum_map,
+  unsigned char *restrict pixels,ExceptionInfo *exception)
 {
-  pixel->storage_class=DirectClass;
-  pixel->colorspace=RGBColorspace;
-  pixel->matte=MagickFalse;
-  pixel->fuzz=0.0;
-  pixel->depth=MAGICKCORE_QUANTUM_DEPTH;
-  pixel->red=0.0;
-  pixel->green=0.0;
-  pixel->blue=0.0;
-  pixel->black=0.0;
-  pixel->alpha=(MagickRealType) OpaqueAlpha;
-  pixel->index=0.0;
-  if (image == (const Image *) NULL)
-    return;
-  pixel->storage_class=image->storage_class;
-  pixel->colorspace=image->colorspace;
-  pixel->matte=image->matte;
-  pixel->depth=image->depth;
-  pixel->fuzz=image->fuzz;
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%                                                                             %
-%                                                                             %
-%                                                                             %
-%   I m p o r t I m a g e P i x e l s                                         %
-%                                                                             %
-%                                                                             %
-%                                                                             %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-%  ImportImagePixels() accepts pixel data and stores in the image at the
-%  location you specify.  The method returns MagickTrue on success otherwise
-%  MagickFalse if an error is encountered.  The pixel data can be either char,
-%  short int, int, ssize_t, float, or double in the order specified by map.
-%
-%  Suppose your want to upload the first scanline of a 640x480 image from
-%  character data in red-green-blue order:
-%
-%      ImportImagePixels(image,0,0,640,1,"RGB",CharPixel,pixels);
-%
-%  The format of the ImportImagePixels method is:
-%
-%      MagickBooleanType ImportImagePixels(Image *image,const ssize_t x_offset,
-%        const ssize_t y_offset,const size_t columns,
-%        const size_t rows,const char *map,const StorageType type,
-%        const void *pixels,ExceptionInfo *exception)
-%
-%  A description of each parameter follows:
-%
-%    o image: the image.
-%
-%    o x_offset,y_offset,columns,rows:  These values define the perimeter
-%      of a region of pixels you want to define.
-%
-%    o map:  This string reflects the expected ordering of the pixel array.
-%      It can be any combination or order of R = red, G = green, B = blue,
-%      A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan,
-%      Y = yellow, M = magenta, K = black, I = intensity (for grayscale),
-%      P = pad.
-%
-%    o type: Define the data type of the pixels.  Float and double types are
-%      normalized to [0..1] otherwise [0..QuantumRange].  Choose from these
-%      types: CharPixel, ShortPixel, IntegerPixel, LongPixel, FloatPixel, or
-%      DoublePixel.
-%
-%    o pixels: This array of values contain the pixel components as defined by
-%      map and type.  You must preallocate this array where the expected
-%      length varies depending on the values of width, height, map, and type.
-%
-%    o exception: return any errors or warnings in this structure.
-%
-*/
-MagickExport MagickBooleanType ImportImagePixels(Image *image,
-  const ssize_t x_offset,const ssize_t y_offset,const size_t columns,
-  const size_t rows,const char *map,const StorageType type,
-  const void *pixels,ExceptionInfo *exception)
+  register const Quantum
+    *restrict p;
+
+  register Quantum
+    *q;
+
+  register ssize_t
+    x;
+
+  ssize_t
+    y;
+
+  q=(Quantum *) pixels;
+  if (LocaleCompare(map,"BGR") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=GetPixelBlue(image,p);
+          *q++=GetPixelGreen(image,p);
+          *q++=GetPixelRed(image,p);
+          p+=GetPixelChannels(image);
+        }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"BGRA") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=GetPixelBlue(image,p);
+          *q++=GetPixelGreen(image,p);
+          *q++=GetPixelRed(image,p);
+          *q++=(Quantum) (GetPixelAlpha(image,p));
+          p+=GetPixelChannels(image);
+        }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"BGRP") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=GetPixelBlue(image,p);
+          *q++=GetPixelGreen(image,p);
+          *q++=GetPixelRed(image,p);
+          *q++=(Quantum) 0;
+          p+=GetPixelChannels(image);
+        }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"I") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=GetPixelIntensity(image,p);
+          p+=GetPixelChannels(image);
+        }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGB") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=GetPixelRed(image,p);
+          *q++=GetPixelGreen(image,p);
+          *q++=GetPixelBlue(image,p);
+          p+=GetPixelChannels(image);
+        }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGBA") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=GetPixelRed(image,p);
+          *q++=GetPixelGreen(image,p);
+          *q++=GetPixelBlue(image,p);
+          *q++=(Quantum) (GetPixelAlpha(image,p));
+          p+=GetPixelChannels(image);
+        }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGBP") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=GetPixelRed(image,p);
+          *q++=GetPixelGreen(image,p);
+          *q++=GetPixelBlue(image,p);
+          *q++=(Quantum) 0;
+          p+=GetPixelChannels(image);
+        }
+      }
+      return;
+    }
+  for (y=0; y < (ssize_t) rows; y++)
+  {
+    p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+    if (p == (const Quantum *) NULL)
+      break;
+    for (x=0; x < (ssize_t) columns; x++)
+    {
+      register ssize_t
+        i;
+
+      for (i=0; i < (ssize_t) strlen(map); i++)
+      {
+        *q=(Quantum) 0;
+        switch (quantum_map[i])
+        {
+          case RedQuantum:
+          case CyanQuantum:
+          {
+            *q=GetPixelRed(image,p);
+            break;
+          }
+          case GreenQuantum:
+          case MagentaQuantum:
+          {
+            *q=GetPixelGreen(image,p);
+            break;
+          }
+          case BlueQuantum:
+          case YellowQuantum:
+          {
+            *q=GetPixelBlue(image,p);
+            break;
+          }
+          case AlphaQuantum:
+          {
+            *q=GetPixelAlpha(image,p);
+            break;
+          }
+          case OpacityQuantum:
+          {
+            *q=GetPixelAlpha(image,p);
+            break;
+          }
+          case BlackQuantum:
+          {
+            if (image->colorspace == CMYKColorspace)
+              *q=GetPixelBlack(image,p);
+            break;
+          }
+          case IndexQuantum:
+          {
+            *q=(GetPixelIntensity(image,p));
+            break;
+          }
+          default:
+          {
+            *q=(Quantum) 0;
+            break;
+          }
+        }
+        q++;
+      }
+      p+=GetPixelChannels(image);
+    }
+  }
+}
+
+static void ExportShortPixel(const Image *image,const ssize_t x_offset,
+  const ssize_t y_offset,const size_t columns,const size_t rows,
+  const char *restrict map,const QuantumType *quantum_map,
+  unsigned char *restrict pixels,ExceptionInfo *exception)
+{
+  register const Quantum
+    *restrict p;
+
+  register ssize_t
+    x;
+
+  ssize_t
+    y;
+
+  register unsigned short
+    *q;
+
+  q=(unsigned short *) pixels;
+  if (LocaleCompare(map,"BGR") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
+          *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
+          *q++=ScaleQuantumToShort(GetPixelRed(image,p));
+          p+=GetPixelChannels(image);
+        }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"BGRA") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
+          *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
+          *q++=ScaleQuantumToShort(GetPixelRed(image,p));
+          *q++=ScaleQuantumToShort(GetPixelAlpha(image,p));
+          p+=GetPixelChannels(image);
+        }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"BGRP") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
+          *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
+          *q++=ScaleQuantumToShort(GetPixelRed(image,p));
+          *q++=0;
+          p+=GetPixelChannels(image);
+        }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"I") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=ScaleQuantumToShort(GetPixelIntensity(image,p));
+          p+=GetPixelChannels(image);
+        }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGB") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=ScaleQuantumToShort(GetPixelRed(image,p));
+          *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
+          *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
+          p+=GetPixelChannels(image);
+        }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGBA") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=ScaleQuantumToShort(GetPixelRed(image,p));
+          *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
+          *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
+          *q++=ScaleQuantumToShort(GetPixelAlpha(image,p));
+          p+=GetPixelChannels(image);
+        }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGBP") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          *q++=ScaleQuantumToShort(GetPixelRed(image,p));
+          *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
+          *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
+          *q++=0;
+          p+=GetPixelChannels(image);
+        }
+      }
+      return;
+    }
+  for (y=0; y < (ssize_t) rows; y++)
+  {
+    p=GetVirtualPixels(image,x_offset,y_offset+y,columns,1,exception);
+    if (p == (const Quantum *) NULL)
+      break;
+    for (x=0; x < (ssize_t) columns; x++)
+    {
+      register ssize_t
+        i;
+
+      for (i=0; i < (ssize_t) strlen(map); i++)
+      {
+        *q=0;
+        switch (quantum_map[i])
+        {
+          case RedQuantum:
+          case CyanQuantum:
+          {
+            *q=ScaleQuantumToShort(GetPixelRed(image,p));
+            break;
+          }
+          case GreenQuantum:
+          case MagentaQuantum:
+          {
+            *q=ScaleQuantumToShort(GetPixelGreen(image,p));
+            break;
+          }
+          case BlueQuantum:
+          case YellowQuantum:
+          {
+            *q=ScaleQuantumToShort(GetPixelBlue(image,p));
+            break;
+          }
+          case AlphaQuantum:
+          {
+            *q=ScaleQuantumToShort(GetPixelAlpha(image,p));
+            break;
+          }
+          case OpacityQuantum:
+          {
+            *q=ScaleQuantumToShort(GetPixelAlpha(image,p));
+            break;
+          }
+          case BlackQuantum:
+          {
+            if (image->colorspace == CMYKColorspace)
+              *q=ScaleQuantumToShort(GetPixelBlack(image,p));
+            break;
+          }
+          case IndexQuantum:
+          {
+            *q=ScaleQuantumToShort(GetPixelIntensity(image,p));
+            break;
+          }
+          default:
+            break;
+        }
+        q++;
+      }
+      p+=GetPixelChannels(image);
+    }
+  }
+}
+
+MagickExport MagickBooleanType ExportImagePixels(const Image *image,
+  const ssize_t x_offset,const ssize_t y_offset,const size_t columns,
+  const size_t rows,const char *map,const StorageType type,void *pixels,
+  ExceptionInfo *exception)
+{
+  QuantumType
+    *quantum_map;
+
+  register ssize_t
+    i;
+
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickSignature);
+  if (image->debug != MagickFalse)
+    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
+  quantum_map=(QuantumType *) AcquireQuantumMemory(strlen(map),
+    sizeof(*quantum_map));
+  if (quantum_map == (QuantumType *) NULL)
+    {
+      (void) ThrowMagickException(exception,GetMagickModule(),
+        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+      return(MagickFalse);
+    }
+  for (i=0; i < (ssize_t) strlen(map); i++)
+  {
+    switch (map[i])
+    {
+      case 'A':
+      case 'a':
+      {
+        quantum_map[i]=AlphaQuantum;
+        break;
+      }
+      case 'B':
+      case 'b':
+      {
+        quantum_map[i]=BlueQuantum;
+        break;
+      }
+      case 'C':
+      case 'c':
+      {
+        quantum_map[i]=CyanQuantum;
+        if (image->colorspace == CMYKColorspace)
+          break;
+        quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
+        (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
+          "ColorSeparatedImageRequired","`%s'",map);
+        return(MagickFalse);
+      }
+      case 'g':
+      case 'G':
+      {
+        quantum_map[i]=GreenQuantum;
+        break;
+      }
+      case 'I':
+      case 'i':
+      {
+        quantum_map[i]=IndexQuantum;
+        break;
+      }
+      case 'K':
+      case 'k':
+      {
+        quantum_map[i]=BlackQuantum;
+        if (image->colorspace == CMYKColorspace)
+          break;
+        quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
+        (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
+          "ColorSeparatedImageRequired","`%s'",map);
+        return(MagickFalse);
+      }
+      case 'M':
+      case 'm':
+      {
+        quantum_map[i]=MagentaQuantum;
+        if (image->colorspace == CMYKColorspace)
+          break;
+        quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
+        (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
+          "ColorSeparatedImageRequired","`%s'",map);
+        return(MagickFalse);
+      }
+      case 'o':
+      case 'O':
+      {
+        quantum_map[i]=OpacityQuantum;
+        break;
+      }
+      case 'P':
+      case 'p':
+      {
+        quantum_map[i]=UndefinedQuantum;
+        break;
+      }
+      case 'R':
+      case 'r':
+      {
+        quantum_map[i]=RedQuantum;
+        break;
+      }
+      case 'Y':
+      case 'y':
+      {
+        quantum_map[i]=YellowQuantum;
+        if (image->colorspace == CMYKColorspace)
+          break;
+        quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
+        (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
+          "ColorSeparatedImageRequired","`%s'",map);
+        return(MagickFalse);
+      }
+      default:
+      {
+        quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
+        (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
+          "UnrecognizedPixelMap","`%s'",map);
+        return(MagickFalse);
+      }
+    }
+  }
+  switch (type)
+  {
+    case CharPixel:
+    {
+      ExportCharPixel(image,x_offset,y_offset,columns,rows,map,quantum_map,
+        pixels,exception);
+      break;
+    }
+    case DoublePixel:
+    {
+      ExportDoublePixel(image,x_offset,y_offset,columns,rows,map,quantum_map,
+        pixels,exception);
+      break;
+    }
+    case FloatPixel:
+    {
+      ExportFloatPixel(image,x_offset,y_offset,columns,rows,map,quantum_map,
+        pixels,exception);
+      break;
+    }
+    case IntegerPixel:
+    {
+      ExportIntegerPixel(image,x_offset,y_offset,columns,rows,map,quantum_map,
+        pixels,exception);
+      break;
+    }
+    case LongPixel:
+    {
+      ExportLongPixel(image,x_offset,y_offset,columns,rows,map,quantum_map,
+        pixels,exception);
+      break;
+    }
+    case QuantumPixel:
+    {
+      ExportQuantumPixel(image,x_offset,y_offset,columns,rows,map,quantum_map,
+        pixels,exception);
+      break;
+    }
+    case ShortPixel:
+    {
+      ExportShortPixel(image,x_offset,y_offset,columns,rows,map,quantum_map,
+        pixels,exception);
+      break;
+    }
+    default:
+    {
+      quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
+      (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
+        "UnrecognizedPixelMap","`%s'",map);
+      break;
+    }
+  }
+  quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
+  return(MagickTrue);
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%   G e t P i x e l I n f o                                                   %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  GetPixelInfo() initializes the PixelInfo structure.
+%
+%  The format of the GetPixelInfo method is:
+%
+%      GetPixelInfo(const Image *image,PixelInfo *pixel)
+%
+%  A description of each parameter follows:
+%
+%    o image: the image.
+%
+%    o pixel: Specifies a pointer to a PixelInfo structure.
+%
+*/
+MagickExport void GetPixelInfo(const Image *image,PixelInfo *pixel)
+{
+  pixel->storage_class=DirectClass;
+  pixel->colorspace=RGBColorspace;
+  pixel->matte=MagickFalse;
+  pixel->fuzz=0.0;
+  pixel->depth=MAGICKCORE_QUANTUM_DEPTH;
+  pixel->red=0.0;
+  pixel->green=0.0;
+  pixel->blue=0.0;
+  pixel->black=0.0;
+  pixel->alpha=(MagickRealType) OpaqueAlpha;
+  pixel->index=0.0;
+  if (image == (const Image *) NULL)
+    return;
+  pixel->storage_class=image->storage_class;
+  pixel->colorspace=image->colorspace;
+  pixel->matte=image->matte;
+  pixel->depth=image->depth;
+  pixel->fuzz=image->fuzz;
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%   I m p o r t I m a g e P i x e l s                                         %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  ImportImagePixels() accepts pixel data and stores in the image at the
+%  location you specify.  The method returns MagickTrue on success otherwise
+%  MagickFalse if an error is encountered.  The pixel data can be either char,
+%  short int, int, ssize_t, float, or double in the order specified by map.
+%
+%  Suppose your want to upload the first scanline of a 640x480 image from
+%  character data in red-green-blue order:
+%
+%      ImportImagePixels(image,0,0,640,1,"RGB",CharPixel,pixels);
+%
+%  The format of the ImportImagePixels method is:
+%
+%      MagickBooleanType ImportImagePixels(Image *image,const ssize_t x_offset,
+%        const ssize_t y_offset,const size_t columns,
+%        const size_t rows,const char *map,const StorageType type,
+%        const void *pixels,ExceptionInfo *exception)
+%
+%  A description of each parameter follows:
+%
+%    o image: the image.
+%
+%    o x_offset,y_offset,columns,rows:  These values define the perimeter
+%      of a region of pixels you want to define.
+%
+%    o map:  This string reflects the expected ordering of the pixel array.
+%      It can be any combination or order of R = red, G = green, B = blue,
+%      A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan,
+%      Y = yellow, M = magenta, K = black, I = intensity (for grayscale),
+%      P = pad.
+%
+%    o type: Define the data type of the pixels.  Float and double types are
+%      normalized to [0..1] otherwise [0..QuantumRange].  Choose from these
+%      types: CharPixel, ShortPixel, IntegerPixel, LongPixel, FloatPixel, or
+%      DoublePixel.
+%
+%    o pixels: This array of values contain the pixel components as defined by
+%      map and type.  You must preallocate this array where the expected
+%      length varies depending on the values of width, height, map, and type.
+%
+%    o exception: return any errors or warnings in this structure.
+%
+*/
+
+static void ImportCharPixel(Image *image,const ssize_t x_offset,
+  const ssize_t y_offset,const size_t columns,const size_t rows,
+  const char *restrict map,const QuantumType *quantum_map,
+  const unsigned char *restrict pixels,ExceptionInfo *exception)
+{
+  register const unsigned char
+    *restrict p;
+
+  register Quantum
+    *q;
+
+  register ssize_t
+    x;
+
+  ssize_t
+    y;
+
+  p=(const unsigned char *) pixels;
+  if (LocaleCompare(map,"BGR") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
+          SetPixelRed(image,ScaleCharToQuantum(*p++),q);
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"BGRA") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
+          SetPixelRed(image,ScaleCharToQuantum(*p++),q);
+          SetPixelAlpha(image,ScaleCharToQuantum(*p++),q);
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"BGRO") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
+          SetPixelRed(image,ScaleCharToQuantum(*p++),q);
+          SetPixelAlpha(image,ScaleCharToQuantum(*p++),q);
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"BGRP") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
+          SetPixelRed(image,ScaleCharToQuantum(*p++),q);
+          p++;
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"I") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelGray(image,ScaleCharToQuantum(*p++),q);
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGB") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelRed(image,ScaleCharToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
+          SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGBA") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelRed(image,ScaleCharToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
+          SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
+          SetPixelAlpha(image,ScaleCharToQuantum(*p++),q);
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGBO") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelRed(image,ScaleCharToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
+          SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
+          SetPixelAlpha(image,ScaleCharToQuantum(*p++),q);
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGBP") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelRed(image,ScaleCharToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
+          SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
+          p++;
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  for (y=0; y < (ssize_t) rows; y++)
+  {
+    q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+    if (q == (Quantum *) NULL)
+      break;
+    for (x=0; x < (ssize_t) columns; x++)
+    {
+      register ssize_t
+        i;
+
+      for (i=0; i < (ssize_t) strlen(map); i++)
+      {
+        switch (quantum_map[i])
+        {
+          case RedQuantum:
+          case CyanQuantum:
+          {
+            SetPixelRed(image,ScaleCharToQuantum(*p),q);
+            break;
+          }
+          case GreenQuantum:
+          case MagentaQuantum:
+          {
+            SetPixelGreen(image,ScaleCharToQuantum(*p),q);
+            break;
+          }
+          case BlueQuantum:
+          case YellowQuantum:
+          {
+            SetPixelBlue(image,ScaleCharToQuantum(*p),q);
+            break;
+          }
+          case AlphaQuantum:
+          {
+            SetPixelAlpha(image,ScaleCharToQuantum(*p),q);
+            break;
+          }
+          case OpacityQuantum:
+          {
+            SetPixelAlpha(image,ScaleCharToQuantum(*p),q);
+            break;
+          }
+          case BlackQuantum:
+          {
+            SetPixelBlack(image,ScaleCharToQuantum(*p),q);
+            break;
+          }
+          case IndexQuantum:
+          {
+            SetPixelGray(image,ScaleCharToQuantum(*p),q);
+            break;
+          }
+          default:
+            break;
+        }
+        p++;
+      }
+      q+=GetPixelChannels(image);
+    }
+    if (SyncAuthenticPixels(image,exception) == MagickFalse)
+      break;
+  }
+}
+
+static void ImportDoublePixel(Image *image,const ssize_t x_offset,
+  const ssize_t y_offset,const size_t columns,const size_t rows,
+  const char *restrict map,const QuantumType *quantum_map,
+  const unsigned char *restrict pixels,ExceptionInfo *exception)
+{
+  register const double
+    *restrict p;
+
+  register Quantum
+    *q;
+
+  register ssize_t
+    x;
+
+  ssize_t
+    y;
+
+  p=(const double *) pixels;
+  if (LocaleCompare(map,"BGR") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"BGRA") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"BGRP") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          p++;
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"I") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelGray(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGB") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGBA") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGBP") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  for (y=0; y < (ssize_t) rows; y++)
+  {
+    q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+    if (q == (Quantum *) NULL)
+      break;
+    for (x=0; x < (ssize_t) columns; x++)
+    {
+      register ssize_t
+        i;
+
+      for (i=0; i < (ssize_t) strlen(map); i++)
+      {
+        switch (quantum_map[i])
+        {
+          case RedQuantum:
+          case CyanQuantum:
+          {
+            SetPixelRed(image,ClampToQuantum((MagickRealType)
+              QuantumRange*(*p)),q);
+            break;
+          }
+          case GreenQuantum:
+          case MagentaQuantum:
+          {
+            SetPixelGreen(image,ClampToQuantum((MagickRealType)
+              QuantumRange*(*p)),q);
+            break;
+          }
+          case BlueQuantum:
+          case YellowQuantum:
+          {
+            SetPixelBlue(image,ClampToQuantum((MagickRealType)
+              QuantumRange*(*p)),q);
+            break;
+          }
+          case AlphaQuantum:
+          {
+            SetPixelAlpha(image,ClampToQuantum((MagickRealType)
+              QuantumRange*(*p)),q);
+            break;
+          }
+          case OpacityQuantum:
+          {
+            SetPixelAlpha(image,ClampToQuantum((MagickRealType)
+              QuantumRange*(*p)),q);
+            break;
+          }
+          case BlackQuantum:
+          {
+            SetPixelBlack(image,ClampToQuantum((MagickRealType)
+              QuantumRange*(*p)),q);
+            break;
+          }
+          case IndexQuantum:
+          {
+            SetPixelGray(image,ClampToQuantum((MagickRealType)
+              QuantumRange*(*p)),q);
+            break;
+          }
+          default:
+            break;
+        }
+        p++;
+      }
+      q+=GetPixelChannels(image);
+    }
+    if (SyncAuthenticPixels(image,exception) == MagickFalse)
+      break;
+  }
+}
+
+static void ImportFloatPixel(Image *image,const ssize_t x_offset,
+  const ssize_t y_offset,const size_t columns,const size_t rows,
+  const char *restrict map,const QuantumType *quantum_map,
+  const unsigned char *restrict pixels,ExceptionInfo *exception)
+{
+  register const float
+    *restrict p;
+
+  register Quantum
+    *q;
+
+  register ssize_t
+    x;
+
+  ssize_t
+    y;
+
+  p=(const float *) pixels;
+  if (LocaleCompare(map,"BGR") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"BGRA") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"BGRP") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          p++;
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"I") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelGray(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGB") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGBA") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelRed(image,ClampToQuantum((MagickRealType)
+            QuantumRange*(*p)),q);
+          p++;
+          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGBP") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
+            (*p)),q);
+          p++;
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  for (y=0; y < (ssize_t) rows; y++)
+  {
+    q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+    if (q == (Quantum *) NULL)
+      break;
+    for (x=0; x < (ssize_t) columns; x++)
+    {
+      register ssize_t
+        i;
+
+      for (i=0; i < (ssize_t) strlen(map); i++)
+      {
+        switch (quantum_map[i])
+        {
+          case RedQuantum:
+          case CyanQuantum:
+          {
+            SetPixelRed(image,ClampToQuantum((MagickRealType)
+              QuantumRange*(*p)),q);
+            break;
+          }
+          case GreenQuantum:
+          case MagentaQuantum:
+          {
+            SetPixelGreen(image,ClampToQuantum((MagickRealType)
+              QuantumRange*(*p)),q);
+            break;
+          }
+          case BlueQuantum:
+          case YellowQuantum:
+          {
+            SetPixelBlue(image,ClampToQuantum((MagickRealType)
+              QuantumRange*(*p)),q);
+            break;
+          }
+          case AlphaQuantum:
+          {
+            SetPixelAlpha(image,ClampToQuantum((MagickRealType)
+              QuantumRange*(*p)),q);
+            break;
+          }
+          case OpacityQuantum:
+          {
+            SetPixelAlpha(image,ClampToQuantum((MagickRealType)
+              QuantumRange*(*p)),q);
+            break;
+          }
+          case BlackQuantum:
+          {
+            SetPixelBlack(image,ClampToQuantum((MagickRealType)
+              QuantumRange*(*p)),q);
+            break;
+          }
+          case IndexQuantum:
+          {
+            SetPixelGray(image,ClampToQuantum((MagickRealType)
+              QuantumRange*(*p)),q);
+            break;
+          }
+          default:
+            break;
+        }
+        p++;
+      }
+      q+=GetPixelChannels(image);
+    }
+    if (SyncAuthenticPixels(image,exception) == MagickFalse)
+      break;
+  }
+}
+
+static void ImportIntegerPixel(Image *image,const ssize_t x_offset,
+  const ssize_t y_offset,const size_t columns,const size_t rows,
+  const char *restrict map,const QuantumType *quantum_map,
+  const unsigned char *restrict pixels,ExceptionInfo *exception)
 {
-  QuantumType
-    *quantum_map;
+  register const unsigned int
+    *restrict p;
 
   register Quantum
     *q;
 
   register ssize_t
-    i,
     x;
 
-  size_t
-    length;
-
   ssize_t
     y;
 
-  /*
-    Allocate image structure.
-  */
-  assert(image != (Image *) NULL);
-  assert(image->signature == MagickSignature);
-  if (image->debug != MagickFalse)
-    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
-  length=strlen(map);
-  quantum_map=(QuantumType *) AcquireQuantumMemory(length,sizeof(*quantum_map));
-  if (quantum_map == (QuantumType *) NULL)
-    ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed",
-      image->filename);
-  for (i=0; i < (ssize_t) length; i++)
-  {
-    switch (map[i])
+  p=(const unsigned int *) pixels;
+  if (LocaleCompare(map,"BGR") == 0)
     {
-      case 'a':
-      case 'A':
-      {
-        quantum_map[i]=AlphaQuantum;
-        image->matte=MagickTrue;
-        break;
-      }
-      case 'B':
-      case 'b':
+      for (y=0; y < (ssize_t) rows; y++)
       {
-        quantum_map[i]=BlueQuantum;
-        break;
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
+          SetPixelRed(image,ScaleLongToQuantum(*p++),q);
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
       }
-      case 'C':
-      case 'c':
+      return;
+    }
+  if (LocaleCompare(map,"BGRA") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
       {
-        quantum_map[i]=CyanQuantum;
-        (void) SetImageColorspace(image,CMYKColorspace,exception);
-        break;
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
+          SetPixelRed(image,ScaleLongToQuantum(*p++),q);
+          SetPixelAlpha(image,ScaleLongToQuantum(*p++),q);
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
       }
-      case 'g':
-      case 'G':
+      return;
+    }
+  if (LocaleCompare(map,"BGRP") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
       {
-        quantum_map[i]=GreenQuantum;
-        break;
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
+          SetPixelRed(image,ScaleLongToQuantum(*p++),q);
+          p++;
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
       }
-      case 'K':
-      case 'k':
+      return;
+    }
+  if (LocaleCompare(map,"I") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
       {
-        quantum_map[i]=BlackQuantum;
-        (void) SetImageColorspace(image,CMYKColorspace,exception);
-        break;
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelGray(image,ScaleLongToQuantum(*p++),q);
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
       }
-      case 'I':
-      case 'i':
+      return;
+    }
+  if (LocaleCompare(map,"RGB") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
       {
-        quantum_map[i]=IndexQuantum;
-        break;
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelRed(image,ScaleLongToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
+          SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
       }
-      case 'm':
-      case 'M':
+      return;
+    }
+  if (LocaleCompare(map,"RGBA") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
       {
-        quantum_map[i]=MagentaQuantum;
-        (void) SetImageColorspace(image,CMYKColorspace,exception);
-        break;
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelRed(image,ScaleLongToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
+          SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
+          SetPixelAlpha(image,ScaleLongToQuantum(*p++),q);
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
       }
-      case 'O':
-      case 'o':
+      return;
+    }
+  if (LocaleCompare(map,"RGBP") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
       {
-        quantum_map[i]=OpacityQuantum;
-        image->matte=MagickTrue;
-        break;
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelRed(image,ScaleLongToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
+          SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
+          p++;
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
       }
-      case 'P':
-      case 'p':
+      return;
+    }
+  for (y=0; y < (ssize_t) rows; y++)
+  {
+    q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+    if (q == (Quantum *) NULL)
+      break;
+    for (x=0; x < (ssize_t) columns; x++)
+    {
+      register ssize_t
+        i;
+
+      for (i=0; i < (ssize_t) strlen(map); i++)
       {
-        quantum_map[i]=UndefinedQuantum;
-        break;
+        switch (quantum_map[i])
+        {
+          case RedQuantum:
+          case CyanQuantum:
+          {
+            SetPixelRed(image,ScaleLongToQuantum(*p),q);
+            break;
+          }
+          case GreenQuantum:
+          case MagentaQuantum:
+          {
+            SetPixelGreen(image,ScaleLongToQuantum(*p),q);
+            break;
+          }
+          case BlueQuantum:
+          case YellowQuantum:
+          {
+            SetPixelBlue(image,ScaleLongToQuantum(*p),q);
+            break;
+          }
+          case AlphaQuantum:
+          {
+            SetPixelAlpha(image,ScaleLongToQuantum(*p),q);
+            break;
+          }
+          case OpacityQuantum:
+          {
+            SetPixelAlpha(image,ScaleLongToQuantum(*p),q);
+            break;
+          }
+          case BlackQuantum:
+          {
+            SetPixelBlack(image,ScaleLongToQuantum(*p),q);
+            break;
+          }
+          case IndexQuantum:
+          {
+            SetPixelGray(image,ScaleLongToQuantum(*p),q);
+            break;
+          }
+          default:
+            break;
+        }
+        p++;
       }
-      case 'R':
-      case 'r':
+      q+=GetPixelChannels(image);
+    }
+    if (SyncAuthenticPixels(image,exception) == MagickFalse)
+      break;
+  }
+}
+
+static void ImportLongPixel(Image *image,const ssize_t x_offset,
+  const ssize_t y_offset,const size_t columns,const size_t rows,
+  const char *restrict map,const QuantumType *quantum_map,
+  const unsigned char *restrict pixels,ExceptionInfo *exception)
+{
+  register const unsigned int
+    *restrict p;
+
+  register Quantum
+    *q;
+
+  register ssize_t
+    x;
+
+  ssize_t
+    y;
+
+  p=(const unsigned int *) pixels;
+  if (LocaleCompare(map,"BGR") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
       {
-        quantum_map[i]=RedQuantum;
-        break;
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
+          SetPixelRed(image,ScaleLongToQuantum(*p++),q);
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
       }
-      case 'Y':
-      case 'y':
+      return;
+    }
+  if (LocaleCompare(map,"BGRA") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
       {
-        quantum_map[i]=YellowQuantum;
-        (void) SetImageColorspace(image,CMYKColorspace,exception);
-        break;
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
+          SetPixelRed(image,ScaleLongToQuantum(*p++),q);
+          SetPixelAlpha(image,ScaleLongToQuantum(*p++),q);
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
       }
-      default:
+      return;
+    }
+  if (LocaleCompare(map,"BGRP") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
       {
-        quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
-        (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
-          "UnrecognizedPixelMap","`%s'",map);
-        return(MagickFalse);
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
+          SetPixelRed(image,ScaleLongToQuantum(*p++),q);
+          p++;
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
       }
+      return;
     }
-  }
-  if (SetImageStorageClass(image,DirectClass,exception) == MagickFalse)
-    return(MagickFalse);
-  /*
-    Transfer the pixels from the pixel datarray to the image.
-  */
-  switch (type)
-  {
-    case CharPixel:
+  if (LocaleCompare(map,"I") == 0)
     {
-      register const unsigned char
-        *p;
-
-      p=(const unsigned char *) pixels;
-      if (LocaleCompare(map,"BGR") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
-              SetPixelRed(image,ScaleCharToQuantum(*p++),q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
           break;
-        }
-      if (LocaleCompare(map,"BGRA") == 0)
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
-              SetPixelRed(image,ScaleCharToQuantum(*p++),q);
-              SetPixelAlpha(image,ScaleCharToQuantum(*p++),q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
-          break;
+          SetPixelGray(image,ScaleLongToQuantum(*p++),q);
+          q+=GetPixelChannels(image);
         }
-      if (LocaleCompare(map,"BGRO") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
-              SetPixelRed(image,ScaleCharToQuantum(*p++),q);
-              SetPixelAlpha(image,ScaleCharToQuantum(*p++),q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
           break;
-        }
-      if (LocaleCompare(map,"BGRP") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
-              SetPixelRed(image,ScaleCharToQuantum(*p++),q);
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGB") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
           break;
-        }
-      if (LocaleCompare(map,"I") == 0)
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelGray(image,ScaleCharToQuantum(*p++),q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
-          break;
+          SetPixelRed(image,ScaleLongToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
+          SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
+          q+=GetPixelChannels(image);
         }
-      if (LocaleCompare(map,"RGB") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelRed(image,ScaleCharToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
-              SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
           break;
-        }
-      if (LocaleCompare(map,"RGBA") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelRed(image,ScaleCharToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
-              SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
-              SetPixelAlpha(image,ScaleCharToQuantum(*p++),q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGBA") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
           break;
-        }
-      if (LocaleCompare(map,"RGBO") == 0)
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelRed(image,ScaleCharToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
-              SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
-              SetPixelAlpha(image,ScaleCharToQuantum(*p++),q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
-          break;
+          SetPixelRed(image,ScaleLongToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
+          SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
+          SetPixelAlpha(image,ScaleLongToQuantum(*p++),q);
+          q+=GetPixelChannels(image);
         }
-      if (LocaleCompare(map,"RGBP") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelRed(image,ScaleCharToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
-              SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
           break;
-        }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGBP") == 0)
+    {
       for (y=0; y < (ssize_t) rows; y++)
       {
         q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
@@ -2225,242 +3200,101 @@ MagickExport MagickBooleanType ImportImagePixels(Image *image,
           break;
         for (x=0; x < (ssize_t) columns; x++)
         {
-          for (i=0; i < (ssize_t) length; i++)
-          {
-            switch (quantum_map[i])
-            {
-              case RedQuantum:
-              case CyanQuantum:
-              {
-                SetPixelRed(image,ScaleCharToQuantum(*p),q);
-                break;
-              }
-              case GreenQuantum:
-              case MagentaQuantum:
-              {
-                SetPixelGreen(image,ScaleCharToQuantum(*p),q);
-                break;
-              }
-              case BlueQuantum:
-              case YellowQuantum:
-              {
-                SetPixelBlue(image,ScaleCharToQuantum(*p),q);
-                break;
-              }
-              case AlphaQuantum:
-              {
-                SetPixelAlpha(image,ScaleCharToQuantum(*p),q);
-                break;
-              }
-              case OpacityQuantum:
-              {
-                SetPixelAlpha(image,ScaleCharToQuantum(*p),q);
-                break;
-              }
-              case BlackQuantum:
-              {
-                SetPixelBlack(image,ScaleCharToQuantum(*p),q);
-                break;
-              }
-              case IndexQuantum:
-              {
-                SetPixelGray(image,ScaleCharToQuantum(*p),q);
-                break;
-              }
-              default:
-                break;
-            }
-            p++;
-          }
+          SetPixelRed(image,ScaleLongToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
+          SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
+          p++;
           q+=GetPixelChannels(image);
         }
         if (SyncAuthenticPixels(image,exception) == MagickFalse)
           break;
       }
-      break;
+      return;
     }
-    case DoublePixel:
+  for (y=0; y < (ssize_t) rows; y++)
+  {
+    q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+    if (q == (Quantum *) NULL)
+      break;
+    for (x=0; x < (ssize_t) columns; x++)
     {
-      register const double
-        *p;
+      register ssize_t
+        i;
 
-      p=(const double *) pixels;
-      if (LocaleCompare(map,"BGR") == 0)
+      for (i=0; i < (ssize_t) strlen(map); i++)
+      {
+        switch (quantum_map[i])
         {
-          for (y=0; y < (ssize_t) rows; y++)
+          case RedQuantum:
+          case CyanQuantum:
           {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
+            SetPixelRed(image,ScaleLongToQuantum(*p),q);
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"BGRA") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case GreenQuantum:
+          case MagentaQuantum:
           {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
+            SetPixelGreen(image,ScaleLongToQuantum(*p),q);
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"BGRP") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case BlueQuantum:
+          case YellowQuantum:
           {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
+            SetPixelBlue(image,ScaleLongToQuantum(*p),q);
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"I") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case AlphaQuantum:
           {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelGray(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
+            SetPixelAlpha(image,ScaleLongToQuantum(*p),q);
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"RGB") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case OpacityQuantum:
           {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
+            SetPixelAlpha(image,ScaleLongToQuantum(*p),q);
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"RGBA") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case BlackQuantum:
           {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
+            SetPixelBlack(image,ScaleLongToQuantum(*p),q);
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"RGBP") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case IndexQuantum:
           {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
+            SetPixelGray(image,ScaleLongToQuantum(*p),q);
+            break;
           }
-          break;
+          default:
+            break;
         }
+        p++;
+      }
+      q+=GetPixelChannels(image);
+    }
+    if (SyncAuthenticPixels(image,exception) == MagickFalse)
+      break;
+  }
+}
+
+static void ImportQuantumPixel(Image *image,const ssize_t x_offset,
+  const ssize_t y_offset,const size_t columns,const size_t rows,
+  const char *restrict map,const QuantumType *quantum_map,
+  const unsigned char *restrict pixels,ExceptionInfo *exception)
+{
+  register const Quantum
+    *restrict p;
+
+  register Quantum
+    *q;
+
+  register ssize_t
+    x;
+
+  ssize_t
+    y;
+
+  p=(const Quantum *) pixels;
+  if (LocaleCompare(map,"BGR") == 0)
+    {
       for (y=0; y < (ssize_t) rows; y++)
       {
         q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
@@ -2468,249 +3302,58 @@ MagickExport MagickBooleanType ImportImagePixels(Image *image,
           break;
         for (x=0; x < (ssize_t) columns; x++)
         {
-          for (i=0; i < (ssize_t) length; i++)
-          {
-            switch (quantum_map[i])
-            {
-              case RedQuantum:
-              case CyanQuantum:
-              {
-                SetPixelRed(image,ClampToQuantum((MagickRealType)
-                  QuantumRange*(*p)),q);
-                break;
-              }
-              case GreenQuantum:
-              case MagentaQuantum:
-              {
-                SetPixelGreen(image,ClampToQuantum((MagickRealType)
-                  QuantumRange*(*p)),q);
-                break;
-              }
-              case BlueQuantum:
-              case YellowQuantum:
-              {
-                SetPixelBlue(image,ClampToQuantum((MagickRealType)
-                  QuantumRange*(*p)),q);
-                break;
-              }
-              case AlphaQuantum:
-              {
-                SetPixelAlpha(image,ClampToQuantum((MagickRealType)
-                  QuantumRange*(*p)),q);
-                break;
-              }
-              case OpacityQuantum:
-              {
-                SetPixelAlpha(image,ClampToQuantum((MagickRealType)
-                  QuantumRange*(*p)),q);
-                break;
-              }
-              case BlackQuantum:
-              {
-                SetPixelBlack(image,ClampToQuantum((MagickRealType)
-                  QuantumRange*(*p)),q);
-                break;
-              }
-              case IndexQuantum:
-              {
-                SetPixelGray(image,ClampToQuantum((MagickRealType)
-                  QuantumRange*(*p)),q);
-                break;
-              }
-              default:
-                break;
-            }
-            p++;
-          }
+          SetPixelBlue(image,*p++,q);
+          SetPixelGreen(image,*p++,q);
+          SetPixelRed(image,*p++,q);
           q+=GetPixelChannels(image);
         }
         if (SyncAuthenticPixels(image,exception) == MagickFalse)
           break;
       }
-      break;
+      return;
     }
-    case FloatPixel:
+  if (LocaleCompare(map,"BGRA") == 0)
     {
-      register const float
-        *p;
-
-      p=(const float *) pixels;
-      if (LocaleCompare(map,"BGR") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
-          break;
-        }
-      if (LocaleCompare(map,"BGRA") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
           break;
-        }
-      if (LocaleCompare(map,"BGRP") == 0)
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
-          break;
+          SetPixelBlue(image,*p++,q);
+          SetPixelGreen(image,*p++,q);
+          SetPixelRed(image,*p++,q);
+          SetPixelAlpha(image,*p++,q);
+          q+=GetPixelChannels(image);
         }
-      if (LocaleCompare(map,"I") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelGray(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
           break;
-        }
-      if (LocaleCompare(map,"RGB") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"BGRP") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
           break;
-        }
-      if (LocaleCompare(map,"RGBA") == 0)
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelRed(image,ClampToQuantum((MagickRealType)
-                QuantumRange*(*p)),q);
-              p++;
-              SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
-          break;
+          SetPixelBlue(image,*p++,q);
+          SetPixelGreen(image,*p++,q);
+          SetPixelRed(image,*p++,q);
+          p++;
+          q+=GetPixelChannels(image);
         }
-      if (LocaleCompare(map,"RGBP") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
-                (*p)),q);
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
           break;
-        }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"I") == 0)
+    {
       for (y=0; y < (ssize_t) rows; y++)
       {
         q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
@@ -2718,208 +3361,55 @@ MagickExport MagickBooleanType ImportImagePixels(Image *image,
           break;
         for (x=0; x < (ssize_t) columns; x++)
         {
-          for (i=0; i < (ssize_t) length; i++)
-          {
-            switch (quantum_map[i])
-            {
-              case RedQuantum:
-              case CyanQuantum:
-              {
-                SetPixelRed(image,ClampToQuantum((MagickRealType)
-                  QuantumRange*(*p)),q);
-                break;
-              }
-              case GreenQuantum:
-              case MagentaQuantum:
-              {
-                SetPixelGreen(image,ClampToQuantum((MagickRealType)
-                  QuantumRange*(*p)),q);
-                break;
-              }
-              case BlueQuantum:
-              case YellowQuantum:
-              {
-                SetPixelBlue(image,ClampToQuantum((MagickRealType)
-                  QuantumRange*(*p)),q);
-                break;
-              }
-              case AlphaQuantum:
-              {
-                SetPixelAlpha(image,ClampToQuantum((MagickRealType)
-                  QuantumRange*(*p)),q);
-                break;
-              }
-              case OpacityQuantum:
-              {
-                SetPixelAlpha(image,ClampToQuantum((MagickRealType)
-                  QuantumRange*(*p)),q);
-                break;
-              }
-              case BlackQuantum:
-              {
-                SetPixelBlack(image,ClampToQuantum((MagickRealType)
-                  QuantumRange*(*p)),q);
-                break;
-              }
-              case IndexQuantum:
-              {
-                SetPixelGray(image,ClampToQuantum((MagickRealType)
-                  QuantumRange*(*p)),q);
-                break;
-              }
-              default:
-                break;
-            }
-            p++;
-          }
+          SetPixelGray(image,*p++,q);
           q+=GetPixelChannels(image);
         }
         if (SyncAuthenticPixels(image,exception) == MagickFalse)
           break;
       }
-      break;
+      return;
     }
-    case IntegerPixel:
+  if (LocaleCompare(map,"RGB") == 0)
     {
-      register const unsigned int
-        *p;
-
-      p=(const unsigned int *) pixels;
-      if (LocaleCompare(map,"BGR") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
-              SetPixelRed(image,ScaleLongToQuantum(*p++),q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
-          break;
-        }
-      if (LocaleCompare(map,"BGRA") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
-              SetPixelRed(image,ScaleLongToQuantum(*p++),q);
-              SetPixelAlpha(image,ScaleLongToQuantum(*p++),q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
           break;
-        }
-      if (LocaleCompare(map,"BGRP") == 0)
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
-              SetPixelRed(image,ScaleLongToQuantum(*p++),q);
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
-          break;
+          SetPixelRed(image,*p++,q);
+          SetPixelGreen(image,*p++,q);
+          SetPixelBlue(image,*p++,q);
+          q+=GetPixelChannels(image);
         }
-      if (LocaleCompare(map,"I") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelGray(image,ScaleLongToQuantum(*p++),q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
           break;
-        }
-      if (LocaleCompare(map,"RGB") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelRed(image,ScaleLongToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
-              SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGBA") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
           break;
-        }
-      if (LocaleCompare(map,"RGBA") == 0)
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelRed(image,ScaleLongToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
-              SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
-              SetPixelAlpha(image,ScaleLongToQuantum(*p++),q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
-          break;
+          SetPixelRed(image,*p++,q);
+          SetPixelGreen(image,*p++,q);
+          SetPixelBlue(image,*p++,q);
+          SetPixelAlpha(image,*p++,q);
+          q+=GetPixelChannels(image);
         }
-      if (LocaleCompare(map,"RGBP") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelRed(image,ScaleLongToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
-              SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
           break;
-        }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGBP") == 0)
+    {
       for (y=0; y < (ssize_t) rows; y++)
       {
         q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
@@ -2927,201 +3417,101 @@ MagickExport MagickBooleanType ImportImagePixels(Image *image,
           break;
         for (x=0; x < (ssize_t) columns; x++)
         {
-          for (i=0; i < (ssize_t) length; i++)
-          {
-            switch (quantum_map[i])
-            {
-              case RedQuantum:
-              case CyanQuantum:
-              {
-                SetPixelRed(image,ScaleLongToQuantum(*p),q);
-                break;
-              }
-              case GreenQuantum:
-              case MagentaQuantum:
-              {
-                SetPixelGreen(image,ScaleLongToQuantum(*p),q);
-                break;
-              }
-              case BlueQuantum:
-              case YellowQuantum:
-              {
-                SetPixelBlue(image,ScaleLongToQuantum(*p),q);
-                break;
-              }
-              case AlphaQuantum:
-              {
-                SetPixelAlpha(image,ScaleLongToQuantum(*p),q);
-                break;
-              }
-              case OpacityQuantum:
-              {
-                SetPixelAlpha(image,ScaleLongToQuantum(*p),q);
-                break;
-              }
-              case BlackQuantum:
-              {
-                SetPixelBlack(image,ScaleLongToQuantum(*p),q);
-                break;
-              }
-              case IndexQuantum:
-              {
-                SetPixelGray(image,ScaleLongToQuantum(*p),q);
-                break;
-              }
-              default:
-                break;
-            }
-            p++;
-          }
+          SetPixelRed(image,*p++,q);
+          SetPixelGreen(image,*p++,q);
+          SetPixelBlue(image,*p++,q);
+          p++;
           q+=GetPixelChannels(image);
         }
         if (SyncAuthenticPixels(image,exception) == MagickFalse)
           break;
       }
-      break;
+      return;
     }
-    case LongPixel:
+  for (y=0; y < (ssize_t) rows; y++)
+  {
+    q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+    if (q == (Quantum *) NULL)
+      break;
+    for (x=0; x < (ssize_t) columns; x++)
     {
-      register const unsigned int
-        *p;
+      register ssize_t
+        i;
 
-      p=(const unsigned int *) pixels;
-      if (LocaleCompare(map,"BGR") == 0)
+      for (i=0; i < (ssize_t) strlen(map); i++)
+      {
+        switch (quantum_map[i])
         {
-          for (y=0; y < (ssize_t) rows; y++)
+          case RedQuantum:
+          case CyanQuantum:
           {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
-              SetPixelRed(image,ScaleLongToQuantum(*p++),q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
+            SetPixelRed(image,*p,q);
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"BGRA") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case GreenQuantum:
+          case MagentaQuantum:
           {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
-              SetPixelRed(image,ScaleLongToQuantum(*p++),q);
-              SetPixelAlpha(image,ScaleLongToQuantum(*p++),q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
+            SetPixelGreen(image,*p,q);
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"BGRP") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case BlueQuantum:
+          case YellowQuantum:
           {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
-              SetPixelRed(image,ScaleLongToQuantum(*p++),q);
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
+            SetPixelBlue(image,*p,q);
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"I") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case AlphaQuantum:
           {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelGray(image,ScaleLongToQuantum(*p++),q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
+            SetPixelAlpha(image,*p,q);
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"RGB") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case OpacityQuantum:
           {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelRed(image,ScaleLongToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
-              SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
+            SetPixelAlpha(image,*p,q);
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"RGBA") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case BlackQuantum:
           {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelRed(image,ScaleLongToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
-              SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
-              SetPixelAlpha(image,ScaleLongToQuantum(*p++),q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
+            SetPixelBlack(image,*p,q);
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"RGBP") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case IndexQuantum:
           {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelRed(image,ScaleLongToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
-              SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
+            SetPixelGray(image,*p,q);
+            break;
           }
-          break;
+          default:
+            break;
         }
+        p++;
+      }
+      q+=GetPixelChannels(image);
+    }
+    if (SyncAuthenticPixels(image,exception) == MagickFalse)
+      break;
+  }
+}
+
+static void ImportShortPixel(Image *image,const ssize_t x_offset,
+  const ssize_t y_offset,const size_t columns,const size_t rows,
+  const char *restrict map,const QuantumType *quantum_map,
+  const unsigned char *restrict pixels,ExceptionInfo *exception)
+{
+  register const unsigned short
+    *restrict p;
+
+  register Quantum
+    *q;
+
+  register ssize_t
+    x;
+
+  ssize_t
+    y;
+
+  p=(const unsigned short *) pixels;
+  if (LocaleCompare(map,"BGR") == 0)
+    {
       for (y=0; y < (ssize_t) rows; y++)
       {
         q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
@@ -3129,201 +3519,114 @@ MagickExport MagickBooleanType ImportImagePixels(Image *image,
           break;
         for (x=0; x < (ssize_t) columns; x++)
         {
-          for (i=0; i < (ssize_t) length; i++)
-          {
-            switch (quantum_map[i])
-            {
-              case RedQuantum:
-              case CyanQuantum:
-              {
-                SetPixelRed(image,ScaleLongToQuantum(*p),q);
-                break;
-              }
-              case GreenQuantum:
-              case MagentaQuantum:
-              {
-                SetPixelGreen(image,ScaleLongToQuantum(*p),q);
-                break;
-              }
-              case BlueQuantum:
-              case YellowQuantum:
-              {
-                SetPixelBlue(image,ScaleLongToQuantum(*p),q);
-                break;
-              }
-              case AlphaQuantum:
-              {
-                SetPixelAlpha(image,ScaleLongToQuantum(*p),q);
-                break;
-              }
-              case OpacityQuantum:
-              {
-                SetPixelAlpha(image,ScaleLongToQuantum(*p),q);
-                break;
-              }
-              case BlackQuantum:
-              {
-                SetPixelBlack(image,ScaleLongToQuantum(*p),q);
-                break;
-              }
-              case IndexQuantum:
-              {
-                SetPixelGray(image,ScaleLongToQuantum(*p),q);
-                break;
-              }
-              default:
-                break;
-            }
-            p++;
-          }
+          SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
+          SetPixelRed(image,ScaleShortToQuantum(*p++),q);
           q+=GetPixelChannels(image);
         }
         if (SyncAuthenticPixels(image,exception) == MagickFalse)
           break;
       }
-      break;
+      return;
     }
-    case QuantumPixel:
+  if (LocaleCompare(map,"BGRA") == 0)
     {
-      register const Quantum
-        *p;
-
-      p=(const Quantum *) pixels;
-      if (LocaleCompare(map,"BGR") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelBlue(image,*p++,q);
-              SetPixelGreen(image,*p++,q);
-              SetPixelRed(image,*p++,q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
           break;
-        }
-      if (LocaleCompare(map,"BGRA") == 0)
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelBlue(image,*p++,q);
-              SetPixelGreen(image,*p++,q);
-              SetPixelRed(image,*p++,q);
-              SetPixelAlpha(image,*p++,q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
-          break;
+          SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
+          SetPixelRed(image,ScaleShortToQuantum(*p++),q);
+          SetPixelAlpha(image,ScaleShortToQuantum(*p++),q);
+          q+=GetPixelChannels(image);
         }
-      if (LocaleCompare(map,"BGRP") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelBlue(image,*p++,q);
-              SetPixelGreen(image,*p++,q);
-              SetPixelRed(image,*p++,q);
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
           break;
-        }
-      if (LocaleCompare(map,"I") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelGray(image,*p++,q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
+      }
+      return;
+    }
+  if (LocaleCompare(map,"BGRP") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
           break;
-        }
-      if (LocaleCompare(map,"RGB") == 0)
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelRed(image,*p++,q);
-              SetPixelGreen(image,*p++,q);
-              SetPixelBlue(image,*p++,q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
-          break;
+          SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
+          SetPixelRed(image,ScaleShortToQuantum(*p++),q);
+          p++;
+          q+=GetPixelChannels(image);
         }
-      if (LocaleCompare(map,"RGBA") == 0)
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"I") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
+          break;
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelRed(image,*p++,q);
-              SetPixelGreen(image,*p++,q);
-              SetPixelBlue(image,*p++,q);
-              SetPixelAlpha(image,*p++,q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
+          SetPixelGray(image,ScaleShortToQuantum(*p++),q);
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGB") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
           break;
-        }
-      if (LocaleCompare(map,"RGBP") == 0)
+        for (x=0; x < (ssize_t) columns; x++)
         {
-          for (y=0; y < (ssize_t) rows; y++)
-          {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelRed(image,*p++,q);
-              SetPixelGreen(image,*p++,q);
-              SetPixelBlue(image,*p++,q);
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
-          }
+          SetPixelRed(image,ScaleShortToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
+          SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
+          q+=GetPixelChannels(image);
+        }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGBA") == 0)
+    {
+      for (y=0; y < (ssize_t) rows; y++)
+      {
+        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+        if (q == (Quantum *) NULL)
           break;
+        for (x=0; x < (ssize_t) columns; x++)
+        {
+          SetPixelRed(image,ScaleShortToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
+          SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
+          SetPixelAlpha(image,ScaleShortToQuantum(*p++),q);
+          q+=GetPixelChannels(image);
         }
+        if (SyncAuthenticPixels(image,exception) == MagickFalse)
+          break;
+      }
+      return;
+    }
+  if (LocaleCompare(map,"RGBP") == 0)
+    {
       for (y=0; y < (ssize_t) rows; y++)
       {
         q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
@@ -3331,260 +3634,236 @@ MagickExport MagickBooleanType ImportImagePixels(Image *image,
           break;
         for (x=0; x < (ssize_t) columns; x++)
         {
-          for (i=0; i < (ssize_t) length; i++)
-          {
-            switch (quantum_map[i])
-            {
-              case RedQuantum:
-              case CyanQuantum:
-              {
-                SetPixelRed(image,*p,q);
-                break;
-              }
-              case GreenQuantum:
-              case MagentaQuantum:
-              {
-                SetPixelGreen(image,*p,q);
-                break;
-              }
-              case BlueQuantum:
-              case YellowQuantum:
-              {
-                SetPixelBlue(image,*p,q);
-                break;
-              }
-              case AlphaQuantum:
-              {
-                SetPixelAlpha(image,*p,q);
-                break;
-              }
-              case OpacityQuantum:
-              {
-                SetPixelAlpha(image,*p,q);
-                break;
-              }
-              case BlackQuantum:
-              {
-                SetPixelBlack(image,*p,q);
-                break;
-              }
-              case IndexQuantum:
-              {
-                SetPixelGray(image,*p,q);
-                break;
-              }
-              default:
-                break;
-            }
-            p++;
-          }
+          SetPixelRed(image,ScaleShortToQuantum(*p++),q);
+          SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
+          SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
+          p++;
           q+=GetPixelChannels(image);
         }
         if (SyncAuthenticPixels(image,exception) == MagickFalse)
           break;
       }
-      break;
+      return;
     }
-    case ShortPixel:
+  for (y=0; y < (ssize_t) rows; y++)
+  {
+    q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
+    if (q == (Quantum *) NULL)
+      break;
+    for (x=0; x < (ssize_t) columns; x++)
     {
-      register const unsigned short
-        *p;
+      register ssize_t
+        i;
 
-      p=(const unsigned short *) pixels;
-      if (LocaleCompare(map,"BGR") == 0)
+      for (i=0; i < (ssize_t) strlen(map); i++)
+      {
+        switch (quantum_map[i])
         {
-          for (y=0; y < (ssize_t) rows; y++)
+          case RedQuantum:
+          case CyanQuantum:
           {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
-              SetPixelRed(image,ScaleShortToQuantum(*p++),q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
+            SetPixelRed(image,ScaleShortToQuantum(*p),q);
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"BGRA") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case GreenQuantum:
+          case MagentaQuantum:
           {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
-              SetPixelRed(image,ScaleShortToQuantum(*p++),q);
-              SetPixelAlpha(image,ScaleShortToQuantum(*p++),q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
+            SetPixelGreen(image,ScaleShortToQuantum(*p),q);
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"BGRP") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case BlueQuantum:
+          case YellowQuantum:
           {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
-              SetPixelRed(image,ScaleShortToQuantum(*p++),q);
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
+            SetPixelBlue(image,ScaleShortToQuantum(*p),q);
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"I") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case AlphaQuantum:
           {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelGray(image,ScaleShortToQuantum(*p++),q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
+            SetPixelAlpha(image,ScaleShortToQuantum(*p),q);
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"RGB") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case OpacityQuantum:
           {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelRed(image,ScaleShortToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
-              SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
+            SetPixelAlpha(image,ScaleShortToQuantum(*p),q);
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"RGBA") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case BlackQuantum:
           {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelRed(image,ScaleShortToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
-              SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
-              SetPixelAlpha(image,ScaleShortToQuantum(*p++),q);
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
+            SetPixelBlack(image,ScaleShortToQuantum(*p),q);
+            break;
           }
-          break;
-        }
-      if (LocaleCompare(map,"RGBP") == 0)
-        {
-          for (y=0; y < (ssize_t) rows; y++)
+          case IndexQuantum:
           {
-            q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-            if (q == (Quantum *) NULL)
-              break;
-            for (x=0; x < (ssize_t) columns; x++)
-            {
-              SetPixelRed(image,ScaleShortToQuantum(*p++),q);
-              SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
-              SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
-              p++;
-              q+=GetPixelChannels(image);
-            }
-            if (SyncAuthenticPixels(image,exception) == MagickFalse)
-              break;
+            SetPixelGray(image,ScaleShortToQuantum(*p),q);
+            break;
           }
-          break;
+          default:
+            break;
         }
-      for (y=0; y < (ssize_t) rows; y++)
+        p++;
+      }
+      q+=GetPixelChannels(image);
+    }
+    if (SyncAuthenticPixels(image,exception) == MagickFalse)
+      break;
+  }
+}
+
+MagickExport MagickBooleanType ImportImagePixels(Image *image,
+  const ssize_t x_offset,const ssize_t y_offset,const size_t columns,
+  const size_t rows,const char *map,const StorageType type,
+  const void *pixels,ExceptionInfo *exception)
+{
+  QuantumType
+    *quantum_map;
+
+  register ssize_t
+    i;
+
+  /*
+    Allocate image structure.
+  */
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickSignature);
+  if (image->debug != MagickFalse)
+    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
+  quantum_map=(QuantumType *) AcquireQuantumMemory(strlen(map),
+    sizeof(*quantum_map));
+  if (quantum_map == (QuantumType *) NULL)
+    ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed",
+      image->filename);
+  for (i=0; i < (ssize_t) strlen(map); i++)
+  {
+    switch (map[i])
+    {
+      case 'a':
+      case 'A':
       {
-        q=GetAuthenticPixels(image,x_offset,y_offset+y,columns,1,exception);
-        if (q == (Quantum *) NULL)
-          break;
-        for (x=0; x < (ssize_t) columns; x++)
-        {
-          for (i=0; i < (ssize_t) length; i++)
-          {
-            switch (quantum_map[i])
-            {
-              case RedQuantum:
-              case CyanQuantum:
-              {
-                SetPixelRed(image,ScaleShortToQuantum(*p),q);
-                break;
-              }
-              case GreenQuantum:
-              case MagentaQuantum:
-              {
-                SetPixelGreen(image,ScaleShortToQuantum(*p),q);
-                break;
-              }
-              case BlueQuantum:
-              case YellowQuantum:
-              {
-                SetPixelBlue(image,ScaleShortToQuantum(*p),q);
-                break;
-              }
-              case AlphaQuantum:
-              {
-                SetPixelAlpha(image,ScaleShortToQuantum(*p),q);
-                break;
-              }
-              case OpacityQuantum:
-              {
-                SetPixelAlpha(image,ScaleShortToQuantum(*p),q);
-                break;
-              }
-              case BlackQuantum:
-              {
-                SetPixelBlack(image,ScaleShortToQuantum(*p),q);
-                break;
-              }
-              case IndexQuantum:
-              {
-                SetPixelGray(image,ScaleShortToQuantum(*p),q);
-                break;
-              }
-              default:
-                break;
-            }
-            p++;
-          }
-          q+=GetPixelChannels(image);
-        }
-        if (SyncAuthenticPixels(image,exception) == MagickFalse)
-          break;
+        quantum_map[i]=AlphaQuantum;
+        image->matte=MagickTrue;
+        break;
+      }
+      case 'B':
+      case 'b':
+      {
+        quantum_map[i]=BlueQuantum;
+        break;
+      }
+      case 'C':
+      case 'c':
+      {
+        quantum_map[i]=CyanQuantum;
+        (void) SetImageColorspace(image,CMYKColorspace,exception);
+        break;
+      }
+      case 'g':
+      case 'G':
+      {
+        quantum_map[i]=GreenQuantum;
+        break;
+      }
+      case 'K':
+      case 'k':
+      {
+        quantum_map[i]=BlackQuantum;
+        (void) SetImageColorspace(image,CMYKColorspace,exception);
+        break;
+      }
+      case 'I':
+      case 'i':
+      {
+        quantum_map[i]=IndexQuantum;
+        break;
+      }
+      case 'm':
+      case 'M':
+      {
+        quantum_map[i]=MagentaQuantum;
+        (void) SetImageColorspace(image,CMYKColorspace,exception);
+        break;
+      }
+      case 'O':
+      case 'o':
+      {
+        quantum_map[i]=OpacityQuantum;
+        image->matte=MagickTrue;
+        break;
+      }
+      case 'P':
+      case 'p':
+      {
+        quantum_map[i]=UndefinedQuantum;
+        break;
+      }
+      case 'R':
+      case 'r':
+      {
+        quantum_map[i]=RedQuantum;
+        break;
       }
+      case 'Y':
+      case 'y':
+      {
+        quantum_map[i]=YellowQuantum;
+        (void) SetImageColorspace(image,CMYKColorspace,exception);
+        break;
+      }
+      default:
+      {
+        quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
+        (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
+          "UnrecognizedPixelMap","`%s'",map);
+        return(MagickFalse);
+      }
+    }
+  }
+  if (SetImageStorageClass(image,DirectClass,exception) == MagickFalse)
+    return(MagickFalse);
+  /*
+    Transfer the pixels from the pixel data to the image.
+  */
+  switch (type)
+  {
+    case CharPixel:
+    {
+      ImportCharPixel(image,x_offset,y_offset,columns,rows,map,quantum_map,
+        pixels,exception);
+      break;
+    }
+    case DoublePixel:
+    {
+      ImportDoublePixel(image,x_offset,y_offset,columns,rows,map,quantum_map,
+        pixels,exception);
+      break;
+    }
+    case FloatPixel:
+    {
+      ImportFloatPixel(image,x_offset,y_offset,columns,rows,map,quantum_map,
+        pixels,exception);
+      break;
+    }
+    case IntegerPixel:
+    {
+      ImportIntegerPixel(image,x_offset,y_offset,columns,rows,map,quantum_map,
+        pixels,exception);
+      break;
+    }
+    case LongPixel:
+    {
+      ImportLongPixel(image,x_offset,y_offset,columns,rows,map,quantum_map,
+        pixels,exception);
+      break;
+    }
+    case QuantumPixel:
+    {
+      ImportQuantumPixel(image,x_offset,y_offset,columns,rows,map,quantum_map,
+        pixels,exception);
+      break;
+    }
+    case ShortPixel:
+    {
+      ImportShortPixel(image,x_offset,y_offset,columns,rows,map,quantum_map,
+        pixels,exception);
       break;
     }
     default: