]> granicus.if.org Git - imagemagick/blobdiff - MagickCore/quantum-import.c
Added decorators for unused arguments.
[imagemagick] / MagickCore / quantum-import.c
index 31bf535c7243794c66e20b07f2db495cf57274d1..68dd8c134f786a5dd7cef3251427755e95d21248 100644 (file)
 %                 MagickCore Methods to Import Quantum Pixels                 %
 %                                                                             %
 %                             Software Design                                 %
-%                               John Cristy                                   %
+%                                  Cristy                                     %
 %                               October 1998                                  %
 %                                                                             %
 %                                                                             %
-%  Copyright 1999-2008 ImageMagick Studio LLC, a non-profit organization      %
+%  Copyright 1999-2017 ImageMagick Studio LLC, a non-profit organization      %
 %  dedicated to making software imaging solutions freely available.           %
 %                                                                             %
 %  You may not use this file except in compliance with the License.  You may  %
 %  obtain a copy of the License at                                            %
 %                                                                             %
-%    http://www.imagemagick.org/script/license.php                            %
+%    https://www.imagemagick.org/script/license.php                           %
 %                                                                             %
 %  Unless required by applicable law or agreed to in writing, software        %
 %  distributed under the License is distributed on an "AS IS" BASIS,          %
@@ -92,7 +92,7 @@
 %
 %      size_t ImportQuantumPixels(const Image *image,CacheView *image_view,
 %        QuantumInfo *quantum_info,const QuantumType quantum_type,
-%        const unsigned char *pixels,ExceptionInfo *exception)
+%        const unsigned char *magick_restrict pixels,ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
@@ -121,7 +121,7 @@ static inline Quantum PushColormapIndex(const Image *image,const size_t index,
 }
 
 static inline const unsigned char *PushDoublePixel(QuantumInfo *quantum_info,
-  const unsigned char *pixels,double *pixel)
+  const unsigned char *magick_restrict pixels,double *pixel)
 {
   double
     *p;
@@ -129,30 +129,30 @@ static inline const unsigned char *PushDoublePixel(QuantumInfo *quantum_info,
   unsigned char
     quantum[8];
 
-  if (quantum_info->endian != LSBEndian)
+  if (quantum_info->endian == LSBEndian)
     {
-      quantum[7]=(*pixels++);
-      quantum[6]=(*pixels++);
-      quantum[5]=(*pixels++);
-      quantum[5]=(*pixels++);
-      quantum[3]=(*pixels++);
-      quantum[2]=(*pixels++);
-      quantum[1]=(*pixels++);
       quantum[0]=(*pixels++);
+      quantum[1]=(*pixels++);
+      quantum[2]=(*pixels++);
+      quantum[3]=(*pixels++);
+      quantum[4]=(*pixels++);
+      quantum[5]=(*pixels++);
+      quantum[6]=(*pixels++);
+      quantum[7]=(*pixels++);
       p=(double *) quantum;
       *pixel=(*p);
       *pixel-=quantum_info->minimum;
       *pixel*=quantum_info->scale;
       return(pixels);
     }
-  quantum[0]=(*pixels++);
-  quantum[1]=(*pixels++);
-  quantum[2]=(*pixels++);
-  quantum[3]=(*pixels++);
-  quantum[4]=(*pixels++);
-  quantum[5]=(*pixels++);
-  quantum[6]=(*pixels++);
   quantum[7]=(*pixels++);
+  quantum[6]=(*pixels++);
+  quantum[5]=(*pixels++);
+  quantum[4]=(*pixels++);
+  quantum[3]=(*pixels++);
+  quantum[2]=(*pixels++);
+  quantum[1]=(*pixels++);
+  quantum[0]=(*pixels++);
   p=(double *) quantum;
   *pixel=(*p);
   *pixel-=quantum_info->minimum;
@@ -161,7 +161,7 @@ static inline const unsigned char *PushDoublePixel(QuantumInfo *quantum_info,
 }
 
 static inline const unsigned char *PushFloatPixel(QuantumInfo *quantum_info,
-  const unsigned char *pixels,float *pixel)
+  const unsigned char *magick_restrict pixels,float *pixel)
 {
   float
     *p;
@@ -169,22 +169,22 @@ static inline const unsigned char *PushFloatPixel(QuantumInfo *quantum_info,
   unsigned char
     quantum[4];
 
-  if (quantum_info->endian != LSBEndian)
+  if (quantum_info->endian == LSBEndian)
     {
-      quantum[3]=(*pixels++);
-      quantum[2]=(*pixels++);
-      quantum[1]=(*pixels++);
       quantum[0]=(*pixels++);
+      quantum[1]=(*pixels++);
+      quantum[2]=(*pixels++);
+      quantum[3]=(*pixels++);
       p=(float *) quantum;
       *pixel=(*p);
       *pixel-=quantum_info->minimum;
       *pixel*=quantum_info->scale;
       return(pixels);
     }
-  quantum[0]=(*pixels++);
-  quantum[1]=(*pixels++);
-  quantum[2]=(*pixels++);
   quantum[3]=(*pixels++);
+  quantum[2]=(*pixels++);
+  quantum[1]=(*pixels++);
+  quantum[0]=(*pixels++);
   p=(float *) quantum;
   *pixel=(*p);
   *pixel-=quantum_info->minimum;
@@ -193,7 +193,7 @@ static inline const unsigned char *PushFloatPixel(QuantumInfo *quantum_info,
 }
 
 static inline const unsigned char *PushQuantumPixel(QuantumInfo *quantum_info,
-  const unsigned char *pixels,unsigned int *quantum)
+  const unsigned char *magick_restrict pixels,unsigned int *quantum)
 {
   register ssize_t
     i;
@@ -222,7 +222,8 @@ static inline const unsigned char *PushQuantumPixel(QuantumInfo *quantum_info,
 }
 
 static inline const unsigned char *PushQuantumLongPixel(
-  QuantumInfo *quantum_info,const unsigned char *pixels,unsigned int *quantum)
+  QuantumInfo *quantum_info,const unsigned char *magick_restrict pixels,
+  unsigned int *quantum)
 {
   register ssize_t
     i;
@@ -251,8 +252,8 @@ static inline const unsigned char *PushQuantumLongPixel(
 }
 
 static void ImportAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
-  const MagickSizeType number_pixels,const unsigned char *restrict p,
-  Quantum *restrict q,ExceptionInfo *exception)
+  const MagickSizeType number_pixels,const unsigned char *magick_restrict p,
+  Quantum *magick_restrict q)
 {
   QuantumAny
     range;
@@ -263,6 +264,8 @@ static void ImportAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
   unsigned int
     pixel;
 
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickCoreSignature);
   switch (quantum_info->depth)
   {
     case 8:
@@ -289,7 +292,7 @@ static void ImportAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelAlpha(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p+=quantum_info->pad;
             q+=GetPixelChannels(image);
@@ -366,8 +369,8 @@ static void ImportAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
 }
 
 static void ImportBGRQuantum(const Image *image,QuantumInfo *quantum_info,
-  const MagickSizeType number_pixels,const unsigned char *restrict p,
-  Quantum *restrict q,ExceptionInfo *exception)
+  const MagickSizeType number_pixels,const unsigned char *magick_restrict p,
+  Quantum *magick_restrict q)
 {
   QuantumAny
     range;
@@ -381,6 +384,8 @@ static void ImportBGRQuantum(const Image *image,QuantumInfo *quantum_info,
   unsigned int
     pixel;
 
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickCoreSignature);
   switch (quantum_info->depth)
   {
     case 8:
@@ -573,13 +578,13 @@ static void ImportBGRQuantum(const Image *image,QuantumInfo *quantum_info,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelRed(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelGreen(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelBlue(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p+=quantum_info->pad;
             q+=GetPixelChannels(image);
@@ -675,8 +680,8 @@ static void ImportBGRQuantum(const Image *image,QuantumInfo *quantum_info,
 }
 
 static void ImportBGRAQuantum(const Image *image,QuantumInfo *quantum_info,
-  const MagickSizeType number_pixels,const unsigned char *restrict p,
-  Quantum *restrict q,ExceptionInfo *exception)
+  const MagickSizeType number_pixels,const unsigned char *magick_restrict p,
+  Quantum *magick_restrict q)
 {
   QuantumAny
     range;
@@ -687,6 +692,8 @@ static void ImportBGRAQuantum(const Image *image,QuantumInfo *quantum_info,
   unsigned int
     pixel;
 
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickCoreSignature);
   switch (quantum_info->depth)
   {
     case 8:
@@ -792,16 +799,16 @@ static void ImportBGRAQuantum(const Image *image,QuantumInfo *quantum_info,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelRed(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelGreen(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelBlue(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelAlpha(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p+=quantum_info->pad;
             q+=GetPixelChannels(image);
@@ -906,9 +913,243 @@ static void ImportBGRAQuantum(const Image *image,QuantumInfo *quantum_info,
   }
 }
 
+static void ImportBGROQuantum(const Image *image,QuantumInfo *quantum_info,
+  const MagickSizeType number_pixels,const unsigned char *magick_restrict p,
+  Quantum *magick_restrict q)
+{
+  QuantumAny
+    range;
+
+  register ssize_t
+    x;
+
+  unsigned int
+    pixel;
+
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickCoreSignature);
+  switch (quantum_info->depth)
+  {
+    case 8:
+    {
+      unsigned char
+        pixel;
+
+      for (x=0; x < (ssize_t) number_pixels; x++)
+      {
+        p=PushCharPixel(p,&pixel);
+        SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
+        p=PushCharPixel(p,&pixel);
+        SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
+        p=PushCharPixel(p,&pixel);
+        SetPixelRed(image,ScaleCharToQuantum(pixel),q);
+        p=PushCharPixel(p,&pixel);
+        SetPixelOpacity(image,ScaleCharToQuantum(pixel),q);
+        p+=quantum_info->pad;
+        q+=GetPixelChannels(image);
+      }
+      break;
+    }
+    case 10:
+    {
+      pixel=0;
+      if (quantum_info->pack == MagickFalse)
+        {
+          register ssize_t
+            i;
+
+          size_t
+            quantum;
+
+          ssize_t
+            n;
+
+          n=0;
+          quantum=0;
+          for (x=0; x < (ssize_t) number_pixels; x++)
+          {
+            for (i=0; i < 4; i++)
+            {
+              switch (n % 3)
+              {
+                case 0:
+                {
+                  p=PushLongPixel(quantum_info->endian,p,&pixel);
+                  quantum=(size_t) (ScaleShortToQuantum((unsigned short)
+                    (((pixel >> 22) & 0x3ff) << 6)));
+                  break;
+                }
+                case 1:
+                {
+                  quantum=(size_t) (ScaleShortToQuantum((unsigned short)
+                    (((pixel >> 12) & 0x3ff) << 6)));
+                  break;
+                }
+                case 2:
+                {
+                  quantum=(size_t) (ScaleShortToQuantum((unsigned short)
+                    (((pixel >> 2) & 0x3ff) << 6)));
+                  break;
+                }
+              }
+              switch (i)
+              {
+                case 0: SetPixelRed(image,(Quantum) quantum,q); break;
+                case 1: SetPixelGreen(image,(Quantum) quantum,q); break;
+                case 2: SetPixelBlue(image,(Quantum) quantum,q); break;
+                case 3: SetPixelOpacity(image,(Quantum) quantum,q); break;
+              }
+              n++;
+            }
+            p+=quantum_info->pad;
+            q+=GetPixelChannels(image);
+          }
+          break;
+        }
+      for (x=0; x < (ssize_t) number_pixels; x++)
+      {
+        p=PushQuantumPixel(quantum_info,p,&pixel);
+        SetPixelRed(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),q);
+        p=PushQuantumPixel(quantum_info,p,&pixel);
+        SetPixelGreen(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
+          q);
+        p=PushQuantumPixel(quantum_info,p,&pixel);
+        SetPixelBlue(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
+          q);
+        p=PushQuantumPixel(quantum_info,p,&pixel);
+        SetPixelOpacity(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
+          q);
+        q+=GetPixelChannels(image);
+      }
+      break;
+    }
+    case 16:
+    {
+      unsigned short
+        pixel;
+
+      if (quantum_info->format == FloatingPointQuantumFormat)
+        {
+          for (x=0; x < (ssize_t) number_pixels; x++)
+          {
+            p=PushShortPixel(quantum_info->endian,p,&pixel);
+            SetPixelRed(image,ClampToQuantum(QuantumRange*
+              HalfToSinglePrecision(pixel)),q);
+            p=PushShortPixel(quantum_info->endian,p,&pixel);
+            SetPixelGreen(image,ClampToQuantum(QuantumRange*
+              HalfToSinglePrecision(pixel)),q);
+            p=PushShortPixel(quantum_info->endian,p,&pixel);
+            SetPixelBlue(image,ClampToQuantum(QuantumRange*
+              HalfToSinglePrecision(pixel)),q);
+            p=PushShortPixel(quantum_info->endian,p,&pixel);
+            SetPixelOpacity(image,ClampToQuantum(QuantumRange*
+              HalfToSinglePrecision(pixel)),q);
+            p+=quantum_info->pad;
+            q+=GetPixelChannels(image);
+          }
+          break;
+        }
+      for (x=0; x < (ssize_t) number_pixels; x++)
+      {
+        p=PushShortPixel(quantum_info->endian,p,&pixel);
+        SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
+        p=PushShortPixel(quantum_info->endian,p,&pixel);
+        SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
+        p=PushShortPixel(quantum_info->endian,p,&pixel);
+        SetPixelRed(image,ScaleShortToQuantum(pixel),q);
+        p=PushShortPixel(quantum_info->endian,p,&pixel);
+        SetPixelOpacity(image,ScaleShortToQuantum(pixel),q);
+        p+=quantum_info->pad;
+        q+=GetPixelChannels(image);
+      }
+      break;
+    }
+    case 32:
+    {
+      unsigned int
+        pixel;
+
+      if (quantum_info->format == FloatingPointQuantumFormat)
+        {
+          float
+            pixel;
+
+          for (x=0; x < (ssize_t) number_pixels; x++)
+          {
+            p=PushFloatPixel(quantum_info,p,&pixel);
+            SetPixelRed(image,ClampToQuantum(pixel),q);
+            p=PushFloatPixel(quantum_info,p,&pixel);
+            SetPixelGreen(image,ClampToQuantum(pixel),q);
+            p=PushFloatPixel(quantum_info,p,&pixel);
+            SetPixelBlue(image,ClampToQuantum(pixel),q);
+            p=PushFloatPixel(quantum_info,p,&pixel);
+            SetPixelOpacity(image,ClampToQuantum(pixel),q);
+            p+=quantum_info->pad;
+            q+=GetPixelChannels(image);
+          }
+          break;
+        }
+      for (x=0; x < (ssize_t) number_pixels; x++)
+      {
+        p=PushLongPixel(quantum_info->endian,p,&pixel);
+        SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
+        p=PushLongPixel(quantum_info->endian,p,&pixel);
+        SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
+        p=PushLongPixel(quantum_info->endian,p,&pixel);
+        SetPixelRed(image,ScaleLongToQuantum(pixel),q);
+        p=PushLongPixel(quantum_info->endian,p,&pixel);
+        SetPixelOpacity(image,ScaleLongToQuantum(pixel),q);
+        p+=quantum_info->pad;
+        q+=GetPixelChannels(image);
+      }
+      break;
+    }
+    case 64:
+    {
+      if (quantum_info->format == FloatingPointQuantumFormat)
+        {
+          double
+            pixel;
+
+          for (x=0; x < (ssize_t) number_pixels; x++)
+          {
+            p=PushDoublePixel(quantum_info,p,&pixel);
+            SetPixelRed(image,ClampToQuantum(pixel),q);
+            p=PushDoublePixel(quantum_info,p,&pixel);
+            SetPixelGreen(image,ClampToQuantum(pixel),q);
+            p=PushDoublePixel(quantum_info,p,&pixel);
+            SetPixelBlue(image,ClampToQuantum(pixel),q);
+            p=PushDoublePixel(quantum_info,p,&pixel);
+            SetPixelOpacity(image,ClampToQuantum(pixel),q);
+            p+=quantum_info->pad;
+            q+=GetPixelChannels(image);
+          }
+          break;
+        }
+    }
+    default:
+    {
+      range=GetQuantumRange(quantum_info->depth);
+      for (x=0; x < (ssize_t) number_pixels; x++)
+      {
+        p=PushQuantumPixel(quantum_info,p,&pixel);
+        SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
+        p=PushQuantumPixel(quantum_info,p,&pixel);
+        SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
+        p=PushQuantumPixel(quantum_info,p,&pixel);
+        SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
+        p=PushQuantumPixel(quantum_info,p,&pixel);
+        SetPixelOpacity(image,ScaleAnyToQuantum(pixel,range),q);
+        q+=GetPixelChannels(image);
+      }
+      break;
+    }
+  }
+}
+
 static void ImportBlackQuantum(const Image *image,QuantumInfo *quantum_info,
-  const MagickSizeType number_pixels,const unsigned char *restrict p,
-  Quantum *restrict q,ExceptionInfo *exception)
+  const MagickSizeType number_pixels,const unsigned char *magick_restrict p,
+  Quantum *magick_restrict q,ExceptionInfo *exception)
 {
   QuantumAny
     range;
@@ -922,7 +1163,7 @@ static void ImportBlackQuantum(const Image *image,QuantumInfo *quantum_info,
   if (image->colorspace != CMYKColorspace)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "ColorSeparatedImageRequired","'%s'",image->filename);
+        "ColorSeparatedImageRequired","`%s'",image->filename);
       return;
     }
   switch (quantum_info->depth)
@@ -951,7 +1192,7 @@ static void ImportBlackQuantum(const Image *image,QuantumInfo *quantum_info,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelBlack(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelBlack(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p+=quantum_info->pad;
             q+=GetPixelChannels(image);
@@ -1028,8 +1269,8 @@ static void ImportBlackQuantum(const Image *image,QuantumInfo *quantum_info,
 }
 
 static void ImportBlueQuantum(const Image *image,QuantumInfo *quantum_info,
-  const MagickSizeType number_pixels,const unsigned char *restrict p,
-  Quantum *restrict q,ExceptionInfo *exception)
+  const MagickSizeType number_pixels,const unsigned char *magick_restrict p,
+  Quantum *magick_restrict q)
 {
   QuantumAny
     range;
@@ -1040,6 +1281,8 @@ static void ImportBlueQuantum(const Image *image,QuantumInfo *quantum_info,
   unsigned int
     pixel;
 
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickCoreSignature);
   switch (quantum_info->depth)
   {
     case 8:
@@ -1066,7 +1309,7 @@ static void ImportBlueQuantum(const Image *image,QuantumInfo *quantum_info,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelBlue(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p+=quantum_info->pad;
             q+=GetPixelChannels(image);
@@ -1143,8 +1386,8 @@ static void ImportBlueQuantum(const Image *image,QuantumInfo *quantum_info,
 }
 
 static void ImportCbYCrYQuantum(const Image *image,QuantumInfo *quantum_info,
-  const MagickSizeType number_pixels,const unsigned char *restrict p,
-  Quantum *restrict q,ExceptionInfo *exception)
+  const MagickSizeType number_pixels,const unsigned char *magick_restrict p,
+  Quantum *magick_restrict q)
 {
   QuantumAny
     range;
@@ -1155,6 +1398,8 @@ static void ImportCbYCrYQuantum(const Image *image,QuantumInfo *quantum_info,
   unsigned int
     pixel;
 
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickCoreSignature);
   switch (quantum_info->depth)
   {
     case 10:
@@ -1176,7 +1421,7 @@ static void ImportCbYCrYQuantum(const Image *image,QuantumInfo *quantum_info,
 
           n=0;
           quantum=0;
-          for (x=0; x < (ssize_t) number_pixels; x+=2)
+          for (x=0; x < (ssize_t) number_pixels; x+=4)
           {
             for (i=0; i < 4; i++)
             {
@@ -1235,8 +1480,8 @@ static void ImportCbYCrYQuantum(const Image *image,QuantumInfo *quantum_info,
 }
 
 static void ImportCMYKQuantum(const Image *image,QuantumInfo *quantum_info,
-  const MagickSizeType number_pixels,const unsigned char *restrict p,
-  Quantum *restrict q,ExceptionInfo *exception)
+  const MagickSizeType number_pixels,const unsigned char *magick_restrict p,
+  Quantum *magick_restrict q,ExceptionInfo *exception)
 {
   QuantumAny
     range;
@@ -1250,7 +1495,7 @@ static void ImportCMYKQuantum(const Image *image,QuantumInfo *quantum_info,
   if (image->colorspace != CMYKColorspace)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "ColorSeparatedImageRequired","'%s'",image->filename);
+        "ColorSeparatedImageRequired","`%s'",image->filename);
       return;
     }
   switch (quantum_info->depth)
@@ -1285,16 +1530,16 @@ static void ImportCMYKQuantum(const Image *image,QuantumInfo *quantum_info,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelRed(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelGreen(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelBlue(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelBlack(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelBlack(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p+=quantum_info->pad;
             q+=GetPixelChannels(image);
@@ -1400,8 +1645,8 @@ static void ImportCMYKQuantum(const Image *image,QuantumInfo *quantum_info,
 }
 
 static void ImportCMYKAQuantum(const Image *image,QuantumInfo *quantum_info,
-  const MagickSizeType number_pixels,const unsigned char *restrict p,
-  Quantum *restrict q,ExceptionInfo *exception)
+  const MagickSizeType number_pixels,const unsigned char *magick_restrict p,
+  Quantum *magick_restrict q,ExceptionInfo *exception)
 {
   QuantumAny
     range;
@@ -1415,7 +1660,7 @@ static void ImportCMYKAQuantum(const Image *image,QuantumInfo *quantum_info,
   if (image->colorspace != CMYKColorspace)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "ColorSeparatedImageRequired","'%s'",image->filename);
+        "ColorSeparatedImageRequired","`%s'",image->filename);
       return;
     }
   switch (quantum_info->depth)
@@ -1452,19 +1697,19 @@ static void ImportCMYKAQuantum(const Image *image,QuantumInfo *quantum_info,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelRed(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelGreen(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelBlue(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelBlack(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelBlack(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelAlpha(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p+=quantum_info->pad;
             q+=GetPixelChannels(image);
@@ -1580,9 +1825,190 @@ static void ImportCMYKAQuantum(const Image *image,QuantumInfo *quantum_info,
   }
 }
 
+static void ImportCMYKOQuantum(const Image *image,QuantumInfo *quantum_info,
+  const MagickSizeType number_pixels,const unsigned char *magick_restrict p,
+  Quantum *magick_restrict q,ExceptionInfo *exception)
+{
+  QuantumAny
+    range;
+
+  register ssize_t
+    x;
+
+  unsigned int
+    pixel;
+
+  if (image->colorspace != CMYKColorspace)
+    {
+      (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
+        "ColorSeparatedImageRequired","`%s'",image->filename);
+      return;
+    }
+  switch (quantum_info->depth)
+  {
+    case 8:
+    {
+      unsigned char
+        pixel;
+
+      for (x=0; x < (ssize_t) number_pixels; x++)
+      {
+        p=PushCharPixel(p,&pixel);
+        SetPixelRed(image,ScaleCharToQuantum(pixel),q);
+        p=PushCharPixel(p,&pixel);
+        SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
+        p=PushCharPixel(p,&pixel);
+        SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
+        p=PushCharPixel(p,&pixel);
+        SetPixelBlack(image,ScaleCharToQuantum(pixel),q);
+        p=PushCharPixel(p,&pixel);
+        SetPixelOpacity(image,ScaleCharToQuantum(pixel),q);
+        p+=quantum_info->pad;
+        q+=GetPixelChannels(image);
+      }
+      break;
+    }
+    case 16:
+    {
+      unsigned short
+        pixel;
+
+      if (quantum_info->format == FloatingPointQuantumFormat)
+        {
+          for (x=0; x < (ssize_t) number_pixels; x++)
+          {
+            p=PushShortPixel(quantum_info->endian,p,&pixel);
+            SetPixelRed(image,ClampToQuantum(QuantumRange*
+              HalfToSinglePrecision(pixel)),q);
+            p=PushShortPixel(quantum_info->endian,p,&pixel);
+            SetPixelGreen(image,ClampToQuantum(QuantumRange*
+              HalfToSinglePrecision(pixel)),q);
+            p=PushShortPixel(quantum_info->endian,p,&pixel);
+            SetPixelBlue(image,ClampToQuantum(QuantumRange*
+              HalfToSinglePrecision(pixel)),q);
+            p=PushShortPixel(quantum_info->endian,p,&pixel);
+            SetPixelBlack(image,ClampToQuantum(QuantumRange*
+              HalfToSinglePrecision(pixel)),q);
+            p=PushShortPixel(quantum_info->endian,p,&pixel);
+            SetPixelOpacity(image,ClampToQuantum(QuantumRange*
+              HalfToSinglePrecision(pixel)),q);
+            p+=quantum_info->pad;
+            q+=GetPixelChannels(image);
+          }
+          break;
+        }
+      for (x=0; x < (ssize_t) number_pixels; x++)
+      {
+        p=PushShortPixel(quantum_info->endian,p,&pixel);
+        SetPixelRed(image,ScaleShortToQuantum(pixel),q);
+        p=PushShortPixel(quantum_info->endian,p,&pixel);
+        SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
+        p=PushShortPixel(quantum_info->endian,p,&pixel);
+        SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
+        p=PushShortPixel(quantum_info->endian,p,&pixel);
+        SetPixelBlack(image,ScaleShortToQuantum(pixel),q);
+        p=PushShortPixel(quantum_info->endian,p,&pixel);
+        SetPixelOpacity(image,ScaleShortToQuantum(pixel),q);
+        p+=quantum_info->pad;
+        q+=GetPixelChannels(image);
+      }
+      break;
+    }
+    case 32:
+    {
+      unsigned int
+        pixel;
+
+      if (quantum_info->format == FloatingPointQuantumFormat)
+        {
+          float
+            pixel;
+
+          for (x=0; x < (ssize_t) number_pixels; x++)
+          {
+            p=PushFloatPixel(quantum_info,p,&pixel);
+            SetPixelRed(image,ClampToQuantum(pixel),q);
+            p=PushFloatPixel(quantum_info,p,&pixel);
+            SetPixelGreen(image,ClampToQuantum(pixel),q);
+            p=PushFloatPixel(quantum_info,p,&pixel);
+            SetPixelBlue(image,ClampToQuantum(pixel),q);
+            p=PushFloatPixel(quantum_info,p,&pixel);
+            SetPixelBlack(image,ClampToQuantum(pixel),q);
+            p=PushFloatPixel(quantum_info,p,&pixel);
+            SetPixelOpacity(image,ClampToQuantum(pixel),q);
+            p+=quantum_info->pad;
+            q+=GetPixelChannels(image);
+          }
+          break;
+        }
+      for (x=0; x < (ssize_t) number_pixels; x++)
+      {
+        p=PushLongPixel(quantum_info->endian,p,&pixel);
+        SetPixelRed(image,ScaleLongToQuantum(pixel),q);
+        p=PushLongPixel(quantum_info->endian,p,&pixel);
+        SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
+        p=PushLongPixel(quantum_info->endian,p,&pixel);
+        SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
+        p=PushLongPixel(quantum_info->endian,p,&pixel);
+        SetPixelBlack(image,ScaleLongToQuantum(pixel),q);
+        p=PushLongPixel(quantum_info->endian,p,&pixel);
+        SetPixelOpacity(image,ScaleLongToQuantum(pixel),q);
+        p+=quantum_info->pad;
+        q+=GetPixelChannels(image);
+      }
+      break;
+    }
+    case 64:
+    {
+      if (quantum_info->format == FloatingPointQuantumFormat)
+        {
+          double
+            pixel;
+
+          for (x=0; x < (ssize_t) number_pixels; x++)
+          {
+            p=PushDoublePixel(quantum_info,p,&pixel);
+            SetPixelRed(image,ClampToQuantum(pixel),q);
+            p=PushDoublePixel(quantum_info,p,&pixel);
+            SetPixelGreen(image,ClampToQuantum(pixel),q);
+            p=PushDoublePixel(quantum_info,p,&pixel);
+            SetPixelBlue(image,ClampToQuantum(pixel),q);
+            p=PushDoublePixel(quantum_info,p,&pixel);
+            SetPixelBlack(image,ClampToQuantum(pixel),q);
+            p=PushDoublePixel(quantum_info,p,&pixel);
+            SetPixelOpacity(image,ClampToQuantum(pixel),q);
+            p=PushDoublePixel(quantum_info,p,&pixel);
+            p+=quantum_info->pad;
+            q+=GetPixelChannels(image);
+          }
+          break;
+        }
+    }
+    default:
+    {
+      range=GetQuantumRange(quantum_info->depth);
+      for (x=0; x < (ssize_t) number_pixels; x++)
+      {
+        p=PushQuantumPixel(quantum_info,p,&pixel);
+        SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
+        p=PushQuantumPixel(quantum_info,p,&pixel);
+        SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
+        p=PushQuantumPixel(quantum_info,p,&pixel);
+        SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
+        p=PushQuantumPixel(quantum_info,p,&pixel);
+        SetPixelBlack(image,ScaleAnyToQuantum(pixel,range),q);
+        p=PushQuantumPixel(quantum_info,p,&pixel);
+        SetPixelOpacity(image,ScaleAnyToQuantum(pixel,range),q);
+        q+=GetPixelChannels(image);
+      }
+      break;
+    }
+  }
+}
+
 static void ImportGrayQuantum(const Image *image,QuantumInfo *quantum_info,
-  const MagickSizeType number_pixels,const unsigned char *restrict p,
-  Quantum *restrict q,ExceptionInfo *exception)
+  const MagickSizeType number_pixels,const unsigned char *magick_restrict p,
+  Quantum *magick_restrict q)
 {
   QuantumAny
     range;
@@ -1596,6 +2022,9 @@ static void ImportGrayQuantum(const Image *image,QuantumInfo *quantum_info,
   unsigned int
     pixel;
 
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickCoreSignature);
+  pixel=0;
   switch (quantum_info->depth)
   {
     case 1:
@@ -1663,7 +2092,7 @@ static void ImportGrayQuantum(const Image *image,QuantumInfo *quantum_info,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             p=PushCharPixel(p,&pixel);
-            SetPixelGray(image,ScaleCharToQuantum(pixel),q);
+            SetPixelGray(image,QuantumRange-ScaleCharToQuantum(pixel),q);
             SetPixelAlpha(image,OpaqueAlpha,q);
             p+=quantum_info->pad;
             q+=GetPixelChannels(image);
@@ -1685,18 +2114,18 @@ static void ImportGrayQuantum(const Image *image,QuantumInfo *quantum_info,
       range=GetQuantumRange(quantum_info->depth);
       if (quantum_info->pack == MagickFalse)
         {
-          if (image->endian != LSBEndian)
+          if (image->endian == LSBEndian)
             {
               for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
               {
                 p=PushLongPixel(quantum_info->endian,p,&pixel);
-                SetPixelGray(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,
+                SetPixelGray(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,
                   range),q);
                 q+=GetPixelChannels(image);
                 SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,
                   range),q);
                 q+=GetPixelChannels(image);
-                SetPixelGray(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,
+                SetPixelGray(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,
                   range),q);
                 p+=quantum_info->pad;
                 q+=GetPixelChannels(image);
@@ -1704,7 +2133,7 @@ static void ImportGrayQuantum(const Image *image,QuantumInfo *quantum_info,
               p=PushLongPixel(quantum_info->endian,p,&pixel);
               if (x++ < (ssize_t) (number_pixels-1))
                 {
-                  SetPixelGray(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,
+                  SetPixelGray(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,
                     range),q);
                   q+=GetPixelChannels(image);
                 }
@@ -1719,13 +2148,13 @@ static void ImportGrayQuantum(const Image *image,QuantumInfo *quantum_info,
           for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
           {
             p=PushLongPixel(quantum_info->endian,p,&pixel);
-            SetPixelGray(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range),
+            SetPixelGray(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,range),
               q);
             q+=GetPixelChannels(image);
             SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range),
               q);
             q+=GetPixelChannels(image);
-            SetPixelGray(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,range),
+            SetPixelGray(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range),
               q);
             p+=quantum_info->pad;
             q+=GetPixelChannels(image);
@@ -1733,14 +2162,14 @@ static void ImportGrayQuantum(const Image *image,QuantumInfo *quantum_info,
           p=PushLongPixel(quantum_info->endian,p,&pixel);
           if (x++ < (ssize_t) (number_pixels-1))
             {
-              SetPixelGray(image,ScaleAnyToQuantum((pixel >> 22) & 0x3ff,range),
-                q);
+              SetPixelGray(image,ScaleAnyToQuantum((pixel >> 2) & 0x3ff,
+                range),q);
               q+=GetPixelChannels(image);
             }
           if (x++ < (ssize_t) number_pixels)
             {
-              SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,range),
-                q);
+              SetPixelGray(image,ScaleAnyToQuantum((pixel >> 12) & 0x3ff,
+                range),q);
               q+=GetPixelChannels(image);
             }
           break;
@@ -1816,7 +2245,7 @@ static void ImportGrayQuantum(const Image *image,QuantumInfo *quantum_info,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelGray(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelGray(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p+=quantum_info->pad;
             q+=GetPixelChannels(image);
@@ -1893,8 +2322,8 @@ static void ImportGrayQuantum(const Image *image,QuantumInfo *quantum_info,
 }
 
 static void ImportGrayAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
-  const MagickSizeType number_pixels,const unsigned char *restrict p,
-  Quantum *restrict q,ExceptionInfo *exception)
+  const MagickSizeType number_pixels,const unsigned char *magick_restrict p,
+  Quantum *magick_restrict q)
 {
   QuantumAny
     range;
@@ -1908,6 +2337,8 @@ static void ImportGrayAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
   unsigned int
     pixel;
 
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickCoreSignature);
   switch (quantum_info->depth)
   {
     case 1:
@@ -1915,6 +2346,7 @@ static void ImportGrayAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
       register unsigned char
         pixel;
 
+      bit=0;
       for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
       {
         for (bit=0; bit < 8; bit+=2)
@@ -2011,10 +2443,10 @@ static void ImportGrayAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelGray(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelGray(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelAlpha(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p+=quantum_info->pad;
             q+=GetPixelChannels(image);
@@ -2101,8 +2533,8 @@ static void ImportGrayAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
 }
 
 static void ImportGreenQuantum(const Image *image,QuantumInfo *quantum_info,
-  const MagickSizeType number_pixels,const unsigned char *restrict p,
-  Quantum *restrict q,ExceptionInfo *exception)
+  const MagickSizeType number_pixels,const unsigned char *magick_restrict p,
+  Quantum *magick_restrict q)
 {
   QuantumAny
     range;
@@ -2113,6 +2545,8 @@ static void ImportGreenQuantum(const Image *image,QuantumInfo *quantum_info,
   unsigned int
     pixel;
 
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickCoreSignature);
   switch (quantum_info->depth)
   {
     case 8:
@@ -2139,7 +2573,7 @@ static void ImportGreenQuantum(const Image *image,QuantumInfo *quantum_info,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelGreen(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p+=quantum_info->pad;
             q+=GetPixelChannels(image);
@@ -2216,8 +2650,8 @@ static void ImportGreenQuantum(const Image *image,QuantumInfo *quantum_info,
 }
 
 static void ImportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
-  const MagickSizeType number_pixels,const unsigned char *restrict p,
-  Quantum *restrict q,ExceptionInfo *exception)
+  const MagickSizeType number_pixels,const unsigned char *magick_restrict p,
+  Quantum *magick_restrict q,ExceptionInfo *exception)
 {
   MagickBooleanType
     range_exception;
@@ -2234,7 +2668,7 @@ static void ImportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
   if (image->storage_class != PseudoClass)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "ColormappedImageRequired","'%s'",image->filename);
+        "ColormappedImageRequired","`%s'",image->filename);
       return;
     }
   range_exception=MagickFalse;
@@ -2257,7 +2691,7 @@ static void ImportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
               0x00 : 0x01);
           SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),
             q);
-          SetPixelInfoPixel(image,image->colormap+(ssize_t)
+          SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
             GetPixelIndex(image,q),q);
           q+=GetPixelChannels(image);
         }
@@ -2270,7 +2704,7 @@ static void ImportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
         else
           pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
         SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
-        SetPixelInfoPixel(image,image->colormap+(ssize_t)
+        SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
           GetPixelIndex(image,q),q);
         q+=GetPixelChannels(image);
       }
@@ -2285,12 +2719,12 @@ static void ImportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
       {
         pixel=(unsigned char) ((*p >> 4) & 0xf);
         SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
-        SetPixelInfoPixel(image,image->colormap+(ssize_t)
+        SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
           GetPixelIndex(image,q),q);
         q+=GetPixelChannels(image);
         pixel=(unsigned char) ((*p) & 0xf);
         SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
-        SetPixelInfoPixel(image,image->colormap+(ssize_t)
+        SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
           GetPixelIndex(image,q),q);
         p++;
         q+=GetPixelChannels(image);
@@ -2299,7 +2733,7 @@ static void ImportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
       {
         pixel=(unsigned char) ((*p++ >> 4) & 0xf);
         SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
-        SetPixelInfoPixel(image,image->colormap+(ssize_t)
+        SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
           GetPixelIndex(image,q),q);
         q+=GetPixelChannels(image);
       }
@@ -2314,7 +2748,7 @@ static void ImportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
       {
         p=PushCharPixel(p,&pixel);
         SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
-        SetPixelInfoPixel(image,image->colormap+(ssize_t)
+        SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
           GetPixelIndex(image,q),q);
         p+=quantum_info->pad;
         q+=GetPixelChannels(image);
@@ -2332,9 +2766,9 @@ static void ImportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
           {
             p=PushShortPixel(quantum_info->endian,p,&pixel);
             SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(
-              (MagickRealType) QuantumRange*HalfToSinglePrecision(pixel)),
+              (double) QuantumRange*HalfToSinglePrecision(pixel)),
               &range_exception),q);
-            SetPixelInfoPixel(image,image->colormap+(ssize_t)
+            SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
               GetPixelIndex(image,q),q);
             p+=quantum_info->pad;
             q+=GetPixelChannels(image);
@@ -2345,7 +2779,7 @@ static void ImportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
       {
         p=PushShortPixel(quantum_info->endian,p,&pixel);
         SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
-        SetPixelInfoPixel(image,image->colormap+(ssize_t)
+        SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
           GetPixelIndex(image,q),q);
         p+=quantum_info->pad;
         q+=GetPixelChannels(image);
@@ -2367,7 +2801,7 @@ static void ImportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
             p=PushFloatPixel(quantum_info,p,&pixel);
             SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(pixel),
               &range_exception),q);
-            SetPixelInfoPixel(image,image->colormap+(ssize_t)
+            SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
               GetPixelIndex(image,q),q);
             p+=quantum_info->pad;
             q+=GetPixelChannels(image);
@@ -2378,7 +2812,7 @@ static void ImportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
       {
         p=PushLongPixel(quantum_info->endian,p,&pixel);
         SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
-        SetPixelInfoPixel(image,image->colormap+(ssize_t)
+        SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
           GetPixelIndex(image,q),q);
         p+=quantum_info->pad;
         q+=GetPixelChannels(image);
@@ -2397,7 +2831,7 @@ static void ImportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
             p=PushDoublePixel(quantum_info,p,&pixel);
             SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(pixel),
               &range_exception),q);
-            SetPixelInfoPixel(image,image->colormap+(ssize_t)
+            SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
               GetPixelIndex(image,q),q);
             p+=quantum_info->pad;
             q+=GetPixelChannels(image);
@@ -2411,7 +2845,7 @@ static void ImportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
       {
         p=PushQuantumPixel(quantum_info,p,&pixel);
         SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
-        SetPixelInfoPixel(image,image->colormap+(ssize_t)
+        SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
           GetPixelIndex(image,q),q);
         p+=quantum_info->pad;
         q+=GetPixelChannels(image);
@@ -2421,12 +2855,13 @@ static void ImportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
   }
   if (range_exception != MagickFalse)
     (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
-      "InvalidColormapIndex","'%s'",image->filename);
+      "InvalidColormapIndex","`%s'",image->filename);
 }
 
 static void ImportIndexAlphaQuantum(const Image *image,
   QuantumInfo *quantum_info,const MagickSizeType number_pixels,
-  const unsigned char *restrict p,Quantum *restrict q,ExceptionInfo *exception)
+  const unsigned char *magick_restrict p,Quantum *magick_restrict q,
+  ExceptionInfo *exception)
 {
   MagickBooleanType
     range_exception;
@@ -2446,7 +2881,7 @@ static void ImportIndexAlphaQuantum(const Image *image,
   if (image->storage_class != PseudoClass)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "ColormappedImageRequired","'%s'",image->filename);
+        "ColormappedImageRequired","`%s'",image->filename);
       return;
     }
   range_exception=MagickFalse;
@@ -2497,7 +2932,7 @@ static void ImportIndexAlphaQuantum(const Image *image,
       {
         pixel=(unsigned char) ((*p >> 4) & 0xf);
         SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
-        SetPixelInfoPixel(image,image->colormap+(ssize_t)
+        SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
           GetPixelIndex(image,q),q);
         pixel=(unsigned char) ((*p) & 0xf);
         SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
@@ -2515,7 +2950,7 @@ static void ImportIndexAlphaQuantum(const Image *image,
       {
         p=PushCharPixel(p,&pixel);
         SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
-        SetPixelInfoPixel(image,image->colormap+(ssize_t)
+        SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
           GetPixelIndex(image,q),q);
         p=PushCharPixel(p,&pixel);
         SetPixelAlpha(image,ScaleCharToQuantum(pixel),q);
@@ -2535,13 +2970,13 @@ static void ImportIndexAlphaQuantum(const Image *image,
           {
             p=PushShortPixel(quantum_info->endian,p,&pixel);
             SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(
-              (MagickRealType) QuantumRange*HalfToSinglePrecision(pixel)),
+              (double) QuantumRange*HalfToSinglePrecision(pixel)),
               &range_exception),q);
-            SetPixelInfoPixel(image,image->colormap+(ssize_t)
+            SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
               GetPixelIndex(image,q),q);
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelAlpha(image,ClampToQuantum((MagickRealType)
-              QuantumRange*HalfToSinglePrecision(pixel)),q);
+            SetPixelAlpha(image,ClampToQuantum(QuantumRange*
+              HalfToSinglePrecision(pixel)),q);
             p+=quantum_info->pad;
             q+=GetPixelChannels(image);
           }
@@ -2551,7 +2986,7 @@ static void ImportIndexAlphaQuantum(const Image *image,
       {
         p=PushShortPixel(quantum_info->endian,p,&pixel);
         SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
-        SetPixelInfoPixel(image,image->colormap+(ssize_t)
+        SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
           GetPixelIndex(image,q),q);
         p=PushShortPixel(quantum_info->endian,p,&pixel);
         SetPixelAlpha(image,ScaleShortToQuantum(pixel),q);
@@ -2575,7 +3010,7 @@ static void ImportIndexAlphaQuantum(const Image *image,
             p=PushFloatPixel(quantum_info,p,&pixel);
             SetPixelIndex(image,PushColormapIndex(image,
               ClampToQuantum(pixel),&range_exception),q);
-            SetPixelInfoPixel(image,image->colormap+(ssize_t)
+            SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
               GetPixelIndex(image,q),q);
             p=PushFloatPixel(quantum_info,p,&pixel);
             SetPixelAlpha(image,ClampToQuantum(pixel),q);
@@ -2588,7 +3023,7 @@ static void ImportIndexAlphaQuantum(const Image *image,
       {
         p=PushLongPixel(quantum_info->endian,p,&pixel);
         SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
-        SetPixelInfoPixel(image,image->colormap+(ssize_t)
+        SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
           GetPixelIndex(image,q),q);
         p=PushLongPixel(quantum_info->endian,p,&pixel);
         SetPixelAlpha(image,ScaleLongToQuantum(pixel),q);
@@ -2609,7 +3044,7 @@ static void ImportIndexAlphaQuantum(const Image *image,
             p=PushDoublePixel(quantum_info,p,&pixel);
             SetPixelIndex(image,PushColormapIndex(image,ClampToQuantum(pixel),
               &range_exception),q);
-            SetPixelInfoPixel(image,image->colormap+(ssize_t)
+            SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
               GetPixelIndex(image,q),q);
             p=PushDoublePixel(quantum_info,p,&pixel);
             SetPixelAlpha(image,ClampToQuantum(pixel),q);
@@ -2626,7 +3061,7 @@ static void ImportIndexAlphaQuantum(const Image *image,
       {
         p=PushQuantumPixel(quantum_info,p,&pixel);
         SetPixelIndex(image,PushColormapIndex(image,pixel,&range_exception),q);
-        SetPixelInfoPixel(image,image->colormap+(ssize_t)
+        SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
           GetPixelIndex(image,q),q);
         p=PushQuantumPixel(quantum_info,p,&pixel);
         SetPixelAlpha(image,ScaleAnyToQuantum(pixel,range),q);
@@ -2638,12 +3073,12 @@ static void ImportIndexAlphaQuantum(const Image *image,
   }
   if (range_exception != MagickFalse)
     (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
-      "InvalidColormapIndex","'%s'",image->filename);
+      "InvalidColormapIndex","`%s'",image->filename);
 }
 
 static void ImportOpacityQuantum(const Image *image,QuantumInfo *quantum_info,
-  const MagickSizeType number_pixels,const unsigned char *restrict p,
-  Quantum *restrict q,ExceptionInfo *exception)
+  const MagickSizeType number_pixels,const unsigned char *magick_restrict p,
+  Quantum *magick_restrict q)
 {
   QuantumAny
     range;
@@ -2654,6 +3089,8 @@ static void ImportOpacityQuantum(const Image *image,QuantumInfo *quantum_info,
   unsigned int
     pixel;
 
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickCoreSignature);
   switch (quantum_info->depth)
   {
     case 8:
@@ -2680,7 +3117,7 @@ static void ImportOpacityQuantum(const Image *image,QuantumInfo *quantum_info,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelOpacity(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelOpacity(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p+=quantum_info->pad;
             q+=GetPixelChannels(image);
@@ -2755,9 +3192,10 @@ static void ImportOpacityQuantum(const Image *image,QuantumInfo *quantum_info,
     }
   }
 }
+
 static void ImportRedQuantum(const Image *image,QuantumInfo *quantum_info,
-  const MagickSizeType number_pixels,const unsigned char *restrict p,
-  Quantum *restrict q,ExceptionInfo *exception)
+  const MagickSizeType number_pixels,const unsigned char *magick_restrict p,
+  Quantum *magick_restrict q)
 {
   QuantumAny
     range;
@@ -2768,6 +3206,8 @@ static void ImportRedQuantum(const Image *image,QuantumInfo *quantum_info,
   unsigned int
     pixel;
 
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickCoreSignature);
   switch (quantum_info->depth)
   {
     case 8:
@@ -2794,7 +3234,7 @@ static void ImportRedQuantum(const Image *image,QuantumInfo *quantum_info,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelRed(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p+=quantum_info->pad;
             q+=GetPixelChannels(image);
@@ -2871,8 +3311,8 @@ static void ImportRedQuantum(const Image *image,QuantumInfo *quantum_info,
 }
 
 static void ImportRGBQuantum(const Image *image,QuantumInfo *quantum_info,
-  const MagickSizeType number_pixels,const unsigned char *restrict p,
-  Quantum *restrict q,ExceptionInfo *exception)
+  const MagickSizeType number_pixels,const unsigned char *magick_restrict p,
+  Quantum *magick_restrict q)
 {
   QuantumAny
     range;
@@ -2886,6 +3326,8 @@ static void ImportRGBQuantum(const Image *image,QuantumInfo *quantum_info,
   unsigned int
     pixel;
 
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickCoreSignature);
   switch (quantum_info->depth)
   {
     case 8:
@@ -3078,13 +3520,13 @@ static void ImportRGBQuantum(const Image *image,QuantumInfo *quantum_info,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelRed(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelGreen(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelBlue(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p+=quantum_info->pad;
             q+=GetPixelChannels(image);
@@ -3180,8 +3622,8 @@ static void ImportRGBQuantum(const Image *image,QuantumInfo *quantum_info,
 }
 
 static void ImportRGBAQuantum(const Image *image,QuantumInfo *quantum_info,
-  const MagickSizeType number_pixels,const unsigned char *restrict p,
-  Quantum *restrict q,ExceptionInfo *exception)
+  const MagickSizeType number_pixels,const unsigned char *magick_restrict p,
+  Quantum *magick_restrict q)
 {
   QuantumAny
     range;
@@ -3192,6 +3634,8 @@ static void ImportRGBAQuantum(const Image *image,QuantumInfo *quantum_info,
   unsigned int
     pixel;
 
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickCoreSignature);
   switch (quantum_info->depth)
   {
     case 8:
@@ -3297,16 +3741,16 @@ static void ImportRGBAQuantum(const Image *image,QuantumInfo *quantum_info,
           for (x=0; x < (ssize_t) number_pixels; x++)
           {
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelRed(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelGreen(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelBlue(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p=PushShortPixel(quantum_info->endian,p,&pixel);
-            SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
+            SetPixelAlpha(image,ClampToQuantum(QuantumRange*
               HalfToSinglePrecision(pixel)),q);
             p+=quantum_info->pad;
             q+=GetPixelChannels(image);
@@ -3411,34 +3855,268 @@ static void ImportRGBAQuantum(const Image *image,QuantumInfo *quantum_info,
   }
 }
 
+static void ImportRGBOQuantum(const Image *image,QuantumInfo *quantum_info,
+  const MagickSizeType number_pixels,const unsigned char *magick_restrict p,
+  Quantum *magick_restrict q)
+{
+  QuantumAny
+    range;
+
+  register ssize_t
+    x;
+
+  unsigned int
+    pixel;
+
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickCoreSignature);
+  switch (quantum_info->depth)
+  {
+    case 8:
+    {
+      unsigned char
+        pixel;
+
+      for (x=0; x < (ssize_t) number_pixels; x++)
+      {
+        p=PushCharPixel(p,&pixel);
+        SetPixelRed(image,ScaleCharToQuantum(pixel),q);
+        p=PushCharPixel(p,&pixel);
+        SetPixelGreen(image,ScaleCharToQuantum(pixel),q);
+        p=PushCharPixel(p,&pixel);
+        SetPixelBlue(image,ScaleCharToQuantum(pixel),q);
+        p=PushCharPixel(p,&pixel);
+        SetPixelOpacity(image,ScaleCharToQuantum(pixel),q);
+        p+=quantum_info->pad;
+        q+=GetPixelChannels(image);
+      }
+      break;
+    }
+    case 10:
+    {
+      pixel=0;
+      if (quantum_info->pack == MagickFalse)
+        {
+          register ssize_t
+            i;
+
+          size_t
+            quantum;
+
+          ssize_t
+            n;
+
+          n=0;
+          quantum=0;
+          for (x=0; x < (ssize_t) number_pixels; x++)
+          {
+            for (i=0; i < 4; i++)
+            {
+              switch (n % 3)
+              {
+                case 0:
+                {
+                  p=PushLongPixel(quantum_info->endian,p,&pixel);
+                  quantum=(size_t) (ScaleShortToQuantum((unsigned short)
+                    (((pixel >> 22) & 0x3ff) << 6)));
+                  break;
+                }
+                case 1:
+                {
+                  quantum=(size_t) (ScaleShortToQuantum((unsigned short)
+                    (((pixel >> 12) & 0x3ff) << 6)));
+                  break;
+                }
+                case 2:
+                {
+                  quantum=(size_t) (ScaleShortToQuantum((unsigned short)
+                    (((pixel >> 2) & 0x3ff) << 6)));
+                  break;
+                }
+              }
+              switch (i)
+              {
+                case 0: SetPixelRed(image,(Quantum) quantum,q); break;
+                case 1: SetPixelGreen(image,(Quantum) quantum,q); break;
+                case 2: SetPixelBlue(image,(Quantum) quantum,q); break;
+                case 3: SetPixelOpacity(image,(Quantum) quantum,q); break;
+              }
+              n++;
+            }
+            p+=quantum_info->pad;
+            q+=GetPixelChannels(image);
+          }
+          break;
+        }
+      for (x=0; x < (ssize_t) number_pixels; x++)
+      {
+        p=PushQuantumPixel(quantum_info,p,&pixel);
+        SetPixelRed(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),q);
+        p=PushQuantumPixel(quantum_info,p,&pixel);
+        SetPixelGreen(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
+          q);
+        p=PushQuantumPixel(quantum_info,p,&pixel);
+        SetPixelBlue(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
+          q);
+        p=PushQuantumPixel(quantum_info,p,&pixel);
+        SetPixelOpacity(image,ScaleShortToQuantum((unsigned short) (pixel << 6)),
+          q);
+        q+=GetPixelChannels(image);
+      }
+      break;
+    }
+    case 16:
+    {
+      unsigned short
+        pixel;
+
+      if (quantum_info->format == FloatingPointQuantumFormat)
+        {
+          for (x=0; x < (ssize_t) number_pixels; x++)
+          {
+            p=PushShortPixel(quantum_info->endian,p,&pixel);
+            SetPixelRed(image,ClampToQuantum(QuantumRange*
+              HalfToSinglePrecision(pixel)),q);
+            p=PushShortPixel(quantum_info->endian,p,&pixel);
+            SetPixelGreen(image,ClampToQuantum(QuantumRange*
+              HalfToSinglePrecision(pixel)),q);
+            p=PushShortPixel(quantum_info->endian,p,&pixel);
+            SetPixelBlue(image,ClampToQuantum(QuantumRange*
+              HalfToSinglePrecision(pixel)),q);
+            p=PushShortPixel(quantum_info->endian,p,&pixel);
+            SetPixelOpacity(image,ClampToQuantum(QuantumRange*
+              HalfToSinglePrecision(pixel)),q);
+            p+=quantum_info->pad;
+            q+=GetPixelChannels(image);
+          }
+          break;
+        }
+      for (x=0; x < (ssize_t) number_pixels; x++)
+      {
+        p=PushShortPixel(quantum_info->endian,p,&pixel);
+        SetPixelRed(image,ScaleShortToQuantum(pixel),q);
+        p=PushShortPixel(quantum_info->endian,p,&pixel);
+        SetPixelGreen(image,ScaleShortToQuantum(pixel),q);
+        p=PushShortPixel(quantum_info->endian,p,&pixel);
+        SetPixelBlue(image,ScaleShortToQuantum(pixel),q);
+        p=PushShortPixel(quantum_info->endian,p,&pixel);
+        SetPixelOpacity(image,ScaleShortToQuantum(pixel),q);
+        p+=quantum_info->pad;
+        q+=GetPixelChannels(image);
+      }
+      break;
+    }
+    case 32:
+    {
+      unsigned int
+        pixel;
+
+      if (quantum_info->format == FloatingPointQuantumFormat)
+        {
+          float
+            pixel;
+
+          for (x=0; x < (ssize_t) number_pixels; x++)
+          {
+            p=PushFloatPixel(quantum_info,p,&pixel);
+            SetPixelRed(image,ClampToQuantum(pixel),q);
+            p=PushFloatPixel(quantum_info,p,&pixel);
+            SetPixelGreen(image,ClampToQuantum(pixel),q);
+            p=PushFloatPixel(quantum_info,p,&pixel);
+            SetPixelBlue(image,ClampToQuantum(pixel),q);
+            p=PushFloatPixel(quantum_info,p,&pixel);
+            SetPixelOpacity(image,ClampToQuantum(pixel),q);
+            p+=quantum_info->pad;
+            q+=GetPixelChannels(image);
+          }
+          break;
+        }
+      for (x=0; x < (ssize_t) number_pixels; x++)
+      {
+        p=PushLongPixel(quantum_info->endian,p,&pixel);
+        SetPixelRed(image,ScaleLongToQuantum(pixel),q);
+        p=PushLongPixel(quantum_info->endian,p,&pixel);
+        SetPixelGreen(image,ScaleLongToQuantum(pixel),q);
+        p=PushLongPixel(quantum_info->endian,p,&pixel);
+        SetPixelBlue(image,ScaleLongToQuantum(pixel),q);
+        p=PushLongPixel(quantum_info->endian,p,&pixel);
+        SetPixelOpacity(image,ScaleLongToQuantum(pixel),q);
+        p+=quantum_info->pad;
+        q+=GetPixelChannels(image);
+      }
+      break;
+    }
+    case 64:
+    {
+      if (quantum_info->format == FloatingPointQuantumFormat)
+        {
+          double
+            pixel;
+
+          for (x=0; x < (ssize_t) number_pixels; x++)
+          {
+            p=PushDoublePixel(quantum_info,p,&pixel);
+            SetPixelRed(image,ClampToQuantum(pixel),q);
+            p=PushDoublePixel(quantum_info,p,&pixel);
+            SetPixelGreen(image,ClampToQuantum(pixel),q);
+            p=PushDoublePixel(quantum_info,p,&pixel);
+            SetPixelBlue(image,ClampToQuantum(pixel),q);
+            p=PushDoublePixel(quantum_info,p,&pixel);
+            SetPixelOpacity(image,ClampToQuantum(pixel),q);
+            p+=quantum_info->pad;
+            q+=GetPixelChannels(image);
+          }
+          break;
+        }
+    }
+    default:
+    {
+      range=GetQuantumRange(quantum_info->depth);
+      for (x=0; x < (ssize_t) number_pixels; x++)
+      {
+        p=PushQuantumPixel(quantum_info,p,&pixel);
+        SetPixelRed(image,ScaleAnyToQuantum(pixel,range),q);
+        p=PushQuantumPixel(quantum_info,p,&pixel);
+        SetPixelGreen(image,ScaleAnyToQuantum(pixel,range),q);
+        p=PushQuantumPixel(quantum_info,p,&pixel);
+        SetPixelBlue(image,ScaleAnyToQuantum(pixel,range),q);
+        p=PushQuantumPixel(quantum_info,p,&pixel);
+        SetPixelOpacity(image,ScaleAnyToQuantum(pixel,range),q);
+        q+=GetPixelChannels(image);
+      }
+      break;
+    }
+  }
+}
+
 MagickExport size_t ImportQuantumPixels(const Image *image,
   CacheView *image_view,QuantumInfo *quantum_info,
-  const QuantumType quantum_type,const unsigned char *pixels,
+  const QuantumType quantum_type,const unsigned char *magick_restrict pixels,
   ExceptionInfo *exception)
 {
   MagickSizeType
     number_pixels;
 
   register const unsigned char
-    *restrict p;
+    *magick_restrict p;
 
   register ssize_t
     x;
 
   register Quantum
-    *restrict q;
+    *magick_restrict q;
 
   size_t
     extent;
 
   assert(image != (Image *) NULL);
-  assert(image->signature == MagickSignature);
+  assert(image->signature == MagickCoreSignature);
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   assert(quantum_info != (QuantumInfo *) NULL);
-  assert(quantum_info->signature == MagickSignature);
+  assert(quantum_info->signature == MagickCoreSignature);
   if (pixels == (const unsigned char *) NULL)
-    pixels=GetQuantumPixels(quantum_info);
+    pixels=(const unsigned char *) GetQuantumPixels(quantum_info);
   x=0;
   p=pixels;
   if (image_view == (CacheView *) NULL)
@@ -3457,18 +4135,22 @@ MagickExport size_t ImportQuantumPixels(const Image *image,
   {
     case AlphaQuantum:
     {
-      ImportAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
+      ImportAlphaQuantum(image,quantum_info,number_pixels,p,q);
       break;
     }
     case BGRQuantum:
     {
-      ImportBGRQuantum(image,quantum_info,number_pixels,p,q,exception);
+      ImportBGRQuantum(image,quantum_info,number_pixels,p,q);
       break;
     }
     case BGRAQuantum:
+    {
+      ImportBGRAQuantum(image,quantum_info,number_pixels,p,q);
+      break;
+    }
     case BGROQuantum:
     {
-      ImportBGRAQuantum(image,quantum_info,number_pixels,p,q,exception);
+      ImportBGROQuantum(image,quantum_info,number_pixels,p,q);
       break;
     }
     case BlackQuantum:
@@ -3479,7 +4161,7 @@ MagickExport size_t ImportQuantumPixels(const Image *image,
     case BlueQuantum:
     case YellowQuantum:
     {
-      ImportBlueQuantum(image,quantum_info,number_pixels,p,q,exception);
+      ImportBlueQuantum(image,quantum_info,number_pixels,p,q);
       break;
     }
     case CMYKQuantum:
@@ -3488,30 +4170,34 @@ MagickExport size_t ImportQuantumPixels(const Image *image,
       break;
     }
     case CMYKAQuantum:
-    case CMYKOQuantum:
     {
       ImportCMYKAQuantum(image,quantum_info,number_pixels,p,q,exception);
       break;
     }
+    case CMYKOQuantum:
+    {
+      ImportCMYKOQuantum(image,quantum_info,number_pixels,p,q,exception);
+      break;
+    }
     case CbYCrYQuantum:
     {
-      ImportCbYCrYQuantum(image,quantum_info,number_pixels,p,q,exception);
+      ImportCbYCrYQuantum(image,quantum_info,number_pixels,p,q);
       break;
     }
     case GrayQuantum:
     {
-      ImportGrayQuantum(image,quantum_info,number_pixels,p,q,exception);
+      ImportGrayQuantum(image,quantum_info,number_pixels,p,q);
       break;
     }
     case GrayAlphaQuantum:
     {
-      ImportGrayAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
+      ImportGrayAlphaQuantum(image,quantum_info,number_pixels,p,q);
       break;
     }
     case GreenQuantum:
     case MagentaQuantum:
     {
-      ImportGreenQuantum(image,quantum_info,number_pixels,p,q,exception);
+      ImportGreenQuantum(image,quantum_info,number_pixels,p,q);
       break;
     }
     case IndexQuantum:
@@ -3526,26 +4212,30 @@ MagickExport size_t ImportQuantumPixels(const Image *image,
     }
     case OpacityQuantum:
     {
-      ImportOpacityQuantum(image,quantum_info,number_pixels,p,q,exception);
+      ImportOpacityQuantum(image,quantum_info,number_pixels,p,q);
       break;
     }
     case RedQuantum:
     case CyanQuantum:
     {
-      ImportRedQuantum(image,quantum_info,number_pixels,p,q,exception);
+      ImportRedQuantum(image,quantum_info,number_pixels,p,q);
       break;
     }
     case RGBQuantum:
     case CbYCrQuantum:
     {
-      ImportRGBQuantum(image,quantum_info,number_pixels,p,q,exception);
+      ImportRGBQuantum(image,quantum_info,number_pixels,p,q);
       break;
     }
     case RGBAQuantum:
-    case RGBOQuantum:
     case CbYCrAQuantum:
     {
-      ImportRGBAQuantum(image,quantum_info,number_pixels,p,q,exception);
+      ImportRGBAQuantum(image,quantum_info,number_pixels,p,q);
+      break;
+    }
+    case RGBOQuantum:
+    {
+      ImportRGBOQuantum(image,quantum_info,number_pixels,p,q);
       break;
     }
     default:
@@ -3557,7 +4247,7 @@ MagickExport size_t ImportQuantumPixels(const Image *image,
         quantum;
 
       register Quantum
-        *restrict q;
+        *magick_restrict q;
 
       q=GetAuthenticPixelQueue(image);
       if (image_view != (CacheView *) NULL)
@@ -3570,28 +4260,14 @@ MagickExport size_t ImportQuantumPixels(const Image *image,
         q+=GetPixelChannels(image);
       }
     }
-  if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum))
-    {
-      register Quantum
-        *restrict q;
-
-      q=GetAuthenticPixelQueue(image);
-      if (image_view != (CacheView *) NULL)
-        q=GetCacheViewAuthenticPixelQueue(image_view);
-      for (x=0; x < (ssize_t) number_pixels; x++)
-      {
-        SetPixelAlpha(image,GetPixelAlpha(image,q),q);
-        q+=GetPixelChannels(image);
-      }
-    }
   if (quantum_info->alpha_type == DisassociatedQuantumAlpha)
     {
-      MagickRealType
+      double
         gamma,
         Sa;
 
       register Quantum
-        *restrict q;
+        *magick_restrict q;
 
       /*
         Disassociate alpha.
@@ -3604,24 +4280,19 @@ MagickExport size_t ImportQuantumPixels(const Image *image,
         register ssize_t
           i;
 
-        if (GetPixelMask(image,q) != 0)
+        if (GetPixelWriteMask(image,q) == 0)
           {
             q+=GetPixelChannels(image);
             continue;
           }
         Sa=QuantumScale*GetPixelAlpha(image,q);
-        gamma=MagickEpsilonReciprocal(Sa);
+        gamma=PerceptibleReciprocal(Sa);
         for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
         {
-          PixelChannel
-            channel;
-
-          PixelTrait
-            traits;
-
-          channel=GetPixelChannelMapChannel(image,i);
-          traits=GetPixelChannelMapTraits(image,channel);
-          if ((traits & UpdatePixelTrait) == 0)
+          PixelChannel channel=GetPixelChannelChannel(image,i);
+          PixelTrait traits=GetPixelChannelTraits(image,channel);
+          if ((channel == AlphaPixelChannel) ||
+              ((traits & UpdatePixelTrait) == 0))
             continue;
           q[i]=ClampToQuantum(gamma*q[i]);
         }