From: cristy Date: Wed, 24 Sep 2014 12:59:33 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~1976 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b4d27c3dba1d142ba3eade4ba8067ba33756eff3;p=imagemagick --- diff --git a/MagickCore/quantize.c b/MagickCore/quantize.c index e004e1e7c..03995fd84 100644 --- a/MagickCore/quantize.c +++ b/MagickCore/quantize.c @@ -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--; }