From: Cristy Date: Tue, 5 Sep 2017 22:42:51 +0000 (-0400) Subject: https://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=32591 X-Git-Tag: 7.0.7-1~21 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8c4672238c9dc0cc8df2ce6b5d2152ad7549da54;p=imagemagick https://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=32591 --- diff --git a/MagickCore/compare.c b/MagickCore/compare.c index 5e558cda1..cccd8fae1 100644 --- a/MagickCore/compare.c +++ b/MagickCore/compare.c @@ -292,7 +292,10 @@ MagickExport Image *CompareImages(Image *image,const Image *reconstruct_image, (reconstruct_traits == UndefinedPixelTrait) || ((reconstruct_traits & UpdatePixelTrait) == 0)) continue; - distance=Sa*p[i]-Da*GetPixelChannel(reconstruct_image,channel,q); + if (channel == AlphaPixelChannel) + distance=p[i]-GetPixelChannel(reconstruct_image,channel,q); + else + distance=Sa*p[i]-Da*GetPixelChannel(reconstruct_image,channel,q); if ((distance*distance) > fuzz) { difference=MagickTrue; @@ -447,7 +450,10 @@ static MagickBooleanType GetAbsoluteDistortion(const Image *image, (reconstruct_traits == UndefinedPixelTrait) || ((reconstruct_traits & UpdatePixelTrait) == 0)) continue; - distance=Sa*p[i]-Da*GetPixelChannel(reconstruct_image,channel,q); + if (channel == AlphaPixelChannel) + distance=p[i]-GetPixelChannel(reconstruct_image,channel,q); + else + distance=Sa*p[i]-Da*GetPixelChannel(reconstruct_image,channel,q); if ((distance*distance) > fuzz) { channel_distortion[i]++; @@ -460,7 +466,7 @@ static MagickBooleanType GetAbsoluteDistortion(const Image *image, q+=GetPixelChannels(reconstruct_image); } #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_GetAbsoluteError) + #pragma omp critical (MagickCore_GetAbsoluteDistortion) #endif for (j=0; j <= MaxPixelChannels; j++) distortion[j]+=channel_distortion[j]; @@ -556,8 +562,12 @@ static MagickBooleanType GetFuzzDistortion(const Image *image, (reconstruct_traits == UndefinedPixelTrait) || ((reconstruct_traits & UpdatePixelTrait) == 0)) continue; - distance=QuantumScale*(Sa*p[i]-Da*GetPixelChannel(reconstruct_image, - channel,q)); + if (channel == AlphaPixelChannel) + distance=QuantumScale*(p[i]-GetPixelChannel(reconstruct_image, + channel,q)); + else + distance=QuantumScale*(Sa*p[i]-Da*GetPixelChannel(reconstruct_image, + channel,q)); channel_distortion[i]+=distance*distance; channel_distortion[CompositePixelChannel]+=distance*distance; } @@ -667,8 +677,12 @@ static MagickBooleanType GetMeanAbsoluteDistortion(const Image *image, (reconstruct_traits == UndefinedPixelTrait) || ((reconstruct_traits & UpdatePixelTrait) == 0)) continue; - distance=QuantumScale*fabs(Sa*p[i]-Da*GetPixelChannel(reconstruct_image, - channel,q)); + if (channel == AlphaPixelChannel) + distance=QuantumScale*fabs(p[i]-GetPixelChannel(reconstruct_image, + channel,q)); + else + distance=QuantumScale*fabs(Sa*p[i]-Da*GetPixelChannel( + reconstruct_image,channel,q)); channel_distortion[i]+=distance; channel_distortion[CompositePixelChannel]+=distance; } @@ -768,7 +782,11 @@ static MagickBooleanType GetMeanErrorPerPixel(Image *image, (reconstruct_traits == UndefinedPixelTrait) || ((reconstruct_traits & UpdatePixelTrait) == 0)) continue; - distance=fabs(Sa*p[i]-Da*GetPixelChannel(reconstruct_image,channel,q)); + if (channel == AlphaPixelChannel) + distance=fabs(p[i]-GetPixelChannel(reconstruct_image,channel,q)); + else + distance=fabs(Sa*p[i]-Da*GetPixelChannel(reconstruct_image,channel, + q)); distortion[i]+=distance; distortion[CompositePixelChannel]+=distance; mean_error+=distance*distance; @@ -874,8 +892,12 @@ static MagickBooleanType GetMeanSquaredDistortion(const Image *image, (reconstruct_traits == UndefinedPixelTrait) || ((reconstruct_traits & UpdatePixelTrait) == 0)) continue; - distance=QuantumScale*(Sa*p[i]-Da*GetPixelChannel(reconstruct_image, - channel,q)); + if (channel == AlphaPixelChannel) + distance=QuantumScale*(p[i]-GetPixelChannel(reconstruct_image, + channel,q)); + else + distance=QuantumScale*(Sa*p[i]-Da*GetPixelChannel(reconstruct_image, + channel,q)); channel_distortion[i]+=distance*distance; channel_distortion[CompositePixelChannel]+=distance*distance; } @@ -1171,8 +1193,12 @@ static MagickBooleanType GetPeakAbsoluteDistortion(const Image *image, (reconstruct_traits == UndefinedPixelTrait) || ((reconstruct_traits & UpdatePixelTrait) == 0)) continue; - distance=QuantumScale*fabs(Sa*p[i]-Da*GetPixelChannel(reconstruct_image, - channel,q)); + if (channel == AlphaPixelChannel) + distance=QuantumScale*fabs(p[i]-GetPixelChannel(reconstruct_image, + channel,q)); + else + distance=QuantumScale*fabs(Sa*p[i]-Da*GetPixelChannel( + reconstruct_image,channel,q)); if (distance > channel_distortion[i]) channel_distortion[i]=distance; if (distance > channel_distortion[CompositePixelChannel])