From: Cristy Date: Sat, 11 Feb 2017 18:51:48 +0000 (-0500) Subject: ... X-Git-Tag: 7.0.4-8~22 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b1710fe65803521bafa3fa39cf6790451e69dec6;p=imagemagick ... --- diff --git a/PerlMagick/Magick.xs b/PerlMagick/Magick.xs index 66f2d4ff9..7cabd5fb2 100644 --- a/PerlMagick/Magick.xs +++ b/PerlMagick/Magick.xs @@ -4075,46 +4075,46 @@ Features(ref,...) { #define ChannelFeatures(channel,direction) \ { \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].angular_second_moment[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].contrast[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].contrast[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].variance_sum_of_squares[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].inverse_difference_moment[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].sum_average[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].sum_variance[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].sum_entropy[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].entropy[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].difference_variance[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].difference_entropy[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].measure_of_correlation_1[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].measure_of_correlation_2[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].maximum_correlation_coefficient[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ } @@ -4704,7 +4704,7 @@ Get(ref,...) { if (image == (Image *) NULL) break; - (void) FormatLocaleString(color,MagickPathExtent,"%.15g,%.15g", + (void) FormatLocaleString(color,MagickPathExtent,"%.20g,%.20g", image->chromaticity.blue_primary.x, image->chromaticity.blue_primary.y); s=newSVpv(color,0); @@ -4897,7 +4897,7 @@ Get(ref,...) if (image == (Image *) NULL) break; - (void) FormatLocaleString(geometry,MagickPathExtent,"%.15gx%.15g", + (void) FormatLocaleString(geometry,MagickPathExtent,"%.20gx%.20g", image->resolution.x,image->resolution.y); s=newSVpv(geometry,0); PUSHs(s ? sv_2mortal(s) : &sv_undef); @@ -5089,7 +5089,7 @@ Get(ref,...) { if (image == (Image *) NULL) break; - (void) FormatLocaleString(color,MagickPathExtent,"%.15g,%.15g", + (void) FormatLocaleString(color,MagickPathExtent,"%.20g,%.20g", image->chromaticity.green_primary.x, image->chromaticity.green_primary.y); s=newSVpv(color,0); @@ -5523,7 +5523,7 @@ Get(ref,...) { if (image == (Image *) NULL) break; - (void) FormatLocaleString(color,MagickPathExtent,"%.15g,%.15g", + (void) FormatLocaleString(color,MagickPathExtent,"%.20g,%.20g", image->chromaticity.red_primary.x, image->chromaticity.red_primary.y); s=newSVpv(color,0); @@ -5720,7 +5720,7 @@ Get(ref,...) { if (image == (Image *) NULL) break; - (void) FormatLocaleString(color,MagickPathExtent,"%.15g,%.15g", + (void) FormatLocaleString(color,MagickPathExtent,"%.20g,%.20g", image->chromaticity.white_point.x, image->chromaticity.white_point.y); s=newSVpv(color,0); @@ -9081,7 +9081,7 @@ Mogrify(ref,...) if (attribute_flag[0] == 0) { (void) FormatLocaleString(message,MagickPathExtent, - "%.15g,%.15g,%.15g",(double) argument_list[2].real_reference, + "%.20g,%.20g,%.20g",(double) argument_list[2].real_reference, (double) argument_list[3].real_reference, (double) argument_list[4].real_reference); argument_list[0].string_reference=message; @@ -9189,7 +9189,7 @@ Mogrify(ref,...) geometry_info.rho=argument_list[6].real_reference; SetImageArtifact(image,"modulate:colorspace","HWB"); } - (void) FormatLocaleString(modulate,MagickPathExtent,"%.15g,%.15g,%.15g", + (void) FormatLocaleString(modulate,MagickPathExtent,"%.20g,%.20g,%.20g", geometry_info.rho,geometry_info.sigma,geometry_info.xi); (void) ModulateImage(image,modulate,exception); break; @@ -12981,7 +12981,7 @@ QueryFontMetrics(ref,...) { draw_info->geometry=AcquireString((char *) NULL); (void) FormatLocaleString(draw_info->geometry,MagickPathExtent, - "%.15g,%.15g",x,y); + "%.20g,%.20g",x,y); } status=GetTypeMetrics(image,draw_info,&metrics,exception); (void) CatchImageException(image); @@ -13354,7 +13354,7 @@ QueryMultilineFontMetrics(ref,...) { draw_info->geometry=AcquireString((char *) NULL); (void) FormatLocaleString(draw_info->geometry,MagickPathExtent, - "%.15g,%.15g",x,y); + "%.20g,%.20g",x,y); } status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception); (void) CatchException(exception); @@ -14300,25 +14300,25 @@ Statistics(ref,...) (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ (double) channel_statistics[channel].depth); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_statistics[channel].minima/scale); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_statistics[channel].maxima/scale); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_statistics[channel].mean/scale); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_statistics[channel].standard_deviation/scale); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_statistics[channel].kurtosis); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_statistics[channel].skewness); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_statistics[channel].entropy); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ } @@ -14375,19 +14375,22 @@ Statistics(ref,...) count=0; for ( ; image; image=image->next) { + register size_t + i; + channel_statistics=GetImageStatistics(image,exception); if (channel_statistics == (ChannelStatistics *) NULL) continue; count++; - EXTEND(sp,35*count); - scale=(double) QuantumRange; - ChannelStatistics(RedChannel); - ChannelStatistics(GreenChannel); - ChannelStatistics(BlueChannel); - if (image->colorspace == CMYKColorspace) - ChannelStatistics(BlackChannel); - if (image->alpha_trait != UndefinedPixelTrait) - ChannelStatistics(AlphaChannel); + for (i=0; i < (ssize_t) GetPixelChannels(image); i++) + { + PixelChannel channel=GetPixelChannelChannel(image,i); + PixelTrait traits=GetPixelChannelTraits(image,channel); + if ((traits & UpdatePixelTrait) == 0) + continue; + EXTEND(sp,8*i*count); + ChannelStatistics(channel); + } channel_statistics=(ChannelStatistics *) RelinquishMagickMemory(channel_statistics); } diff --git a/PerlMagick/quantum/quantum.xs.in b/PerlMagick/quantum/quantum.xs.in index e9a391f3c..f3199d784 100644 --- a/PerlMagick/quantum/quantum.xs.in +++ b/PerlMagick/quantum/quantum.xs.in @@ -4075,46 +4075,46 @@ Features(ref,...) { #define ChannelFeatures(channel,direction) \ { \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].angular_second_moment[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].contrast[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].contrast[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].variance_sum_of_squares[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].inverse_difference_moment[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].sum_average[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].sum_variance[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].sum_entropy[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].entropy[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].difference_variance[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].difference_entropy[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].measure_of_correlation_1[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].measure_of_correlation_2[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_features[channel].maximum_correlation_coefficient[direction]); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ } @@ -4704,7 +4704,7 @@ Get(ref,...) { if (image == (Image *) NULL) break; - (void) FormatLocaleString(color,MagickPathExtent,"%.15g,%.15g", + (void) FormatLocaleString(color,MagickPathExtent,"%.20g,%.20g", image->chromaticity.blue_primary.x, image->chromaticity.blue_primary.y); s=newSVpv(color,0); @@ -4897,7 +4897,7 @@ Get(ref,...) if (image == (Image *) NULL) break; - (void) FormatLocaleString(geometry,MagickPathExtent,"%.15gx%.15g", + (void) FormatLocaleString(geometry,MagickPathExtent,"%.20gx%.20g", image->resolution.x,image->resolution.y); s=newSVpv(geometry,0); PUSHs(s ? sv_2mortal(s) : &sv_undef); @@ -5089,7 +5089,7 @@ Get(ref,...) { if (image == (Image *) NULL) break; - (void) FormatLocaleString(color,MagickPathExtent,"%.15g,%.15g", + (void) FormatLocaleString(color,MagickPathExtent,"%.20g,%.20g", image->chromaticity.green_primary.x, image->chromaticity.green_primary.y); s=newSVpv(color,0); @@ -5523,7 +5523,7 @@ Get(ref,...) { if (image == (Image *) NULL) break; - (void) FormatLocaleString(color,MagickPathExtent,"%.15g,%.15g", + (void) FormatLocaleString(color,MagickPathExtent,"%.20g,%.20g", image->chromaticity.red_primary.x, image->chromaticity.red_primary.y); s=newSVpv(color,0); @@ -5720,7 +5720,7 @@ Get(ref,...) { if (image == (Image *) NULL) break; - (void) FormatLocaleString(color,MagickPathExtent,"%.15g,%.15g", + (void) FormatLocaleString(color,MagickPathExtent,"%.20g,%.20g", image->chromaticity.white_point.x, image->chromaticity.white_point.y); s=newSVpv(color,0); @@ -9081,7 +9081,7 @@ Mogrify(ref,...) if (attribute_flag[0] == 0) { (void) FormatLocaleString(message,MagickPathExtent, - "%.15g,%.15g,%.15g",(double) argument_list[2].real_reference, + "%.20g,%.20g,%.20g",(double) argument_list[2].real_reference, (double) argument_list[3].real_reference, (double) argument_list[4].real_reference); argument_list[0].string_reference=message; @@ -9189,7 +9189,7 @@ Mogrify(ref,...) geometry_info.rho=argument_list[6].real_reference; SetImageArtifact(image,"modulate:colorspace","HWB"); } - (void) FormatLocaleString(modulate,MagickPathExtent,"%.15g,%.15g,%.15g", + (void) FormatLocaleString(modulate,MagickPathExtent,"%.20g,%.20g,%.20g", geometry_info.rho,geometry_info.sigma,geometry_info.xi); (void) ModulateImage(image,modulate,exception); break; @@ -12981,7 +12981,7 @@ QueryFontMetrics(ref,...) { draw_info->geometry=AcquireString((char *) NULL); (void) FormatLocaleString(draw_info->geometry,MagickPathExtent, - "%.15g,%.15g",x,y); + "%.20g,%.20g",x,y); } status=GetTypeMetrics(image,draw_info,&metrics,exception); (void) CatchImageException(image); @@ -13354,7 +13354,7 @@ QueryMultilineFontMetrics(ref,...) { draw_info->geometry=AcquireString((char *) NULL); (void) FormatLocaleString(draw_info->geometry,MagickPathExtent, - "%.15g,%.15g",x,y); + "%.20g,%.20g",x,y); } status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception); (void) CatchException(exception); @@ -14300,25 +14300,25 @@ Statistics(ref,...) (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ (double) channel_statistics[channel].depth); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_statistics[channel].minima/scale); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_statistics[channel].maxima/scale); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_statistics[channel].mean/scale); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_statistics[channel].standard_deviation/scale); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_statistics[channel].kurtosis); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_statistics[channel].skewness); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ - (void) FormatLocaleString(message,MagickPathExtent,"%.15g", \ + (void) FormatLocaleString(message,MagickPathExtent,"%.20g", \ channel_statistics[channel].entropy); \ PUSHs(sv_2mortal(newSVpv(message,0))); \ } @@ -14375,19 +14375,22 @@ Statistics(ref,...) count=0; for ( ; image; image=image->next) { + register size_t + i; + channel_statistics=GetImageStatistics(image,exception); if (channel_statistics == (ChannelStatistics *) NULL) continue; count++; - EXTEND(sp,35*count); - scale=(double) QuantumRange; - ChannelStatistics(RedChannel); - ChannelStatistics(GreenChannel); - ChannelStatistics(BlueChannel); - if (image->colorspace == CMYKColorspace) - ChannelStatistics(BlackChannel); - if (image->alpha_trait != UndefinedPixelTrait) - ChannelStatistics(AlphaChannel); + for (i=0; i < (ssize_t) GetPixelChannels(image); i++) + { + PixelChannel channel=GetPixelChannelChannel(image,i); + PixelTrait traits=GetPixelChannelTraits(image,channel); + if ((traits & UpdatePixelTrait) == 0) + continue; + EXTEND(sp,8*i*count); + ChannelStatistics(channel); + } channel_statistics=(ChannelStatistics *) RelinquishMagickMemory(channel_statistics); }