]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Wed, 24 Sep 2014 12:59:33 +0000 (12:59 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Wed, 24 Sep 2014 12:59:33 +0000 (12:59 +0000)
MagickCore/quantize.c

index e004e1e7c6a01bcad7ef63ca88ddf42bf682d69d..03995fd8448f0dc6c60d36af015f65160e2ea7f1 100644 (file)
@@ -852,6 +852,9 @@ static MagickBooleanType ClassifyImageColors(CubeInfo *cube_info,
       node_info=cube_info->root;
       for (level=1; level <= MaxTreeDepth; level++)
       {
+        double
+          distance;
+
         bisect*=0.5;
         id=ColorToNodeId(cube_info,&pixel,index);
         mid.red+=(id & 1) != 0 ? bisect : -bisect;
@@ -883,9 +886,11 @@ static MagickBooleanType ClassifyImageColors(CubeInfo *cube_info,
         error.blue=QuantumScale*(pixel.blue-mid.blue);
         if (cube_info->associate_alpha != MagickFalse)
           error.alpha=QuantumScale*(pixel.alpha-mid.alpha);
-        node_info->quantize_error+=count*sqrt((double) (error.red*error.red+
-          error.green*error.green+error.blue*error.blue+
-          error.alpha*error.alpha));
+        distance=(double) (error.red*error.red+error.green*error.green+
+          error.blue*error.blue+error.alpha*error.alpha);
+        if (IsNaN(distance) != MagickFalse)
+          distance=0.0;
+        node_info->quantize_error+=count*sqrt(distance);
         cube_info->root->quantize_error+=node_info->quantize_error;
         index--;
       }
@@ -951,6 +956,9 @@ static MagickBooleanType ClassifyImageColors(CubeInfo *cube_info,
       node_info=cube_info->root;
       for (level=1; level <= cube_info->depth; level++)
       {
+        double
+          distance;
+
         bisect*=0.5;
         id=ColorToNodeId(cube_info,&pixel,index);
         mid.red+=(id & 1) != 0 ? bisect : -bisect;
@@ -982,9 +990,11 @@ static MagickBooleanType ClassifyImageColors(CubeInfo *cube_info,
         error.blue=QuantumScale*(pixel.blue-mid.blue);
         if (cube_info->associate_alpha != MagickFalse)
           error.alpha=QuantumScale*(pixel.alpha-mid.alpha);
-        node_info->quantize_error+=count*sqrt((double) (error.red*error.red+
-          error.green*error.green+error.blue*error.blue+
-          error.alpha*error.alpha));
+        distance=(double) (error.red*error.red+error.green*error.green+
+          error.blue*error.blue+error.alpha*error.alpha);
+        if (IsNaN(distance) != MagickFalse)
+          distance=0.0;
+        node_info->quantize_error+=count*sqrt(distance);
         cube_info->root->quantize_error+=node_info->quantize_error;
         index--;
       }