diff --git a/MagickCore/quantize.c b/MagickCore/quantize.c
index aaaff78..5d8b38e 100644
--- a/MagickCore/quantize.c
+++ b/MagickCore/quantize.c
@@ -480,7 +480,7 @@
 static inline Quantum ClampPixel(const MagickRealType value)
 {
   if (value < 0.0f)
-    return(0.0f);
+    return(0);
   if (value >= (MagickRealType) QuantumRange)
     return((Quantum) QuantumRange);
 #if !defined(MAGICKCORE_HDRI_SUPPORT)
@@ -892,11 +892,12 @@
         Sum RGB for this leaf for later derivation of the mean cube color.
       */
       node_info->number_unique+=count;
-      node_info->total_color.red+=count*QuantumScale*pixel.red;
-      node_info->total_color.green+=count*QuantumScale*pixel.green;
-      node_info->total_color.blue+=count*QuantumScale*pixel.blue;
+      node_info->total_color.red+=count*QuantumScale*ClampPixel(pixel.red);
+      node_info->total_color.green+=count*QuantumScale*ClampPixel(pixel.green);
+      node_info->total_color.blue+=count*QuantumScale*ClampPixel(pixel.blue);
       if (cube_info->associate_alpha != MagickFalse)
-        node_info->total_color.alpha+=count*QuantumScale*pixel.alpha;
+        node_info->total_color.alpha+=count*QuantumScale*
+          ClampPixel(pixel.alpha);
       p+=count*GetPixelChannels(image);
     }
     if (cube_info->colors > cube_info->maximum_colors)
@@ -987,11 +988,12 @@
         Sum RGB for this leaf for later derivation of the mean cube color.
       */
       node_info->number_unique+=count;
-      node_info->total_color.red+=count*QuantumScale*pixel.red;
-      node_info->total_color.green+=count*QuantumScale*pixel.green;
-      node_info->total_color.blue+=count*QuantumScale*pixel.blue;
+      node_info->total_color.red+=count*QuantumScale*ClampPixel(pixel.red);
+      node_info->total_color.green+=count*QuantumScale*ClampPixel(pixel.green);
+      node_info->total_color.blue+=count*QuantumScale*ClampPixel(pixel.blue);
       if (cube_info->associate_alpha != MagickFalse)
-        node_info->total_color.alpha+=count*QuantumScale*pixel.alpha;
+        node_info->total_color.alpha+=count*QuantumScale*
+          ClampPixel(pixel.alpha);
       p+=count*GetPixelChannels(image);
     }
     proceed=SetImageProgress(image,ClassifyImageTag,(MagickOffsetType) y,
@@ -1256,30 +1258,29 @@
       alpha=PerceptibleReciprocal(alpha);
       if (cube_info->associate_alpha == MagickFalse)
         {
-          q->red=(double) ClampToQuantum(ClampPixel(alpha*QuantumRange*
-            node_info->total_color.red));
-          q->green=(double) ClampToQuantum(ClampPixel(alpha*QuantumRange*
-            node_info->total_color.green));
-          q->blue=(double) ClampToQuantum(ClampPixel(alpha*QuantumRange*
-            node_info->total_color.blue));
-          q->alpha=OpaqueAlpha;
+          q->red=(double) ClampToQuantum(alpha*QuantumRange*
+            node_info->total_color.red);
+          q->green=(double) ClampToQuantum(alpha*QuantumRange*
+            node_info->total_color.green);
+          q->blue=(double) ClampToQuantum(alpha*QuantumRange*
+            node_info->total_color.blue);
+          q->alpha=(double) OpaqueAlpha;
         }
       else
         {
           double
             opacity;
 
-          opacity=(double) (alpha*QuantumRange*
-            node_info->total_color.alpha);
-          q->alpha=(double) ClampToQuantum(ClampPixel(opacity));
+          opacity=(double) (alpha*QuantumRange*node_info->total_color.alpha);
+          q->alpha=(double) ClampToQuantum((opacity));
           if (q->alpha == OpaqueAlpha)
             {
-              q->red=(double) ClampToQuantum(ClampPixel(alpha*QuantumRange*
-                node_info->total_color.red));
-              q->green=(double) ClampToQuantum(ClampPixel(alpha*QuantumRange*
-                node_info->total_color.green));
-              q->blue=(double) ClampToQuantum(ClampPixel(alpha*QuantumRange*
-                node_info->total_color.blue));
+              q->red=(double) ClampToQuantum(alpha*QuantumRange*
+                node_info->total_color.red);
+              q->green=(double) ClampToQuantum(alpha*QuantumRange*
+                node_info->total_color.green);
+              q->blue=(double) ClampToQuantum(alpha*QuantumRange*
+                node_info->total_color.blue);
             }
           else
             {
@@ -1288,12 +1289,12 @@
 
               gamma=(double) (QuantumScale*q->alpha);
               gamma=PerceptibleReciprocal(gamma);
-              q->red=(double) ClampToQuantum(ClampPixel(alpha*gamma*
-                QuantumRange*node_info->total_color.red));
-              q->green=(double) ClampToQuantum(ClampPixel(alpha*gamma*
-                QuantumRange*node_info->total_color.green));
-              q->blue=(double) ClampToQuantum(ClampPixel(alpha*gamma*
-                QuantumRange*node_info->total_color.blue));
+              q->red=(double) ClampToQuantum(alpha*gamma*QuantumRange*
+                node_info->total_color.red);
+              q->green=(double) ClampToQuantum(alpha*gamma*QuantumRange*
+                node_info->total_color.green);
+              q->blue=(double) ClampToQuantum(alpha*gamma*QuantumRange*
+                node_info->total_color.blue);
               if (node_info->number_unique > cube_info->transparent_pixels)
                 {
                   cube_info->transparent_pixels=node_info->number_unique;
