]> granicus.if.org Git - imagemagick/commitdiff
Fixed rotational blur for images with an alpha channel.
authordirk <dirk@git.imagemagick.org>
Mon, 11 Jul 2016 18:53:14 +0000 (20:53 +0200)
committerdirk <dirk@git.imagemagick.org>
Mon, 11 Jul 2016 18:53:14 +0000 (20:53 +0200)
MagickCore/effect.c

index 7a4b36530dd8dc2ed97607c343b92b0c273ed221..87bbb19131996bc0c35eefa6c1387b4dbe1a34db 100644 (file)
@@ -2942,7 +2942,8 @@ MagickExport Image *RotationalBlurImage(const Image *image,const double angle,
           }
         gamma=0.0;
         pixel=0.0;
-        if ((blur_traits & BlendPixelTrait) == 0)
+        if ((GetPixelChannelTraits(image,AlphaChannel) == UndefinedPixelTrait) ||
+            (channel == AlphaChannel))
           {
             for (j=0; j < (ssize_t) n; j+=(ssize_t) step)
             {
@@ -2964,6 +2965,9 @@ MagickExport Image *RotationalBlurImage(const Image *image,const double angle,
           }
         for (j=0; j < (ssize_t) n; j+=(ssize_t) step)
         {
+          double
+            alpha;
+
           r=GetCacheViewVirtualPixels(radial_view, (ssize_t) (blur_center.x+
             center.x*cos_theta[j]-center.y*sin_theta[j]+0.5),(ssize_t)
             (blur_center.y+center.x*sin_theta[j]+center.y*cos_theta[j]+0.5),
@@ -2973,8 +2977,9 @@ MagickExport Image *RotationalBlurImage(const Image *image,const double angle,
               status=MagickFalse;
               continue;
             }
-          pixel+=GetPixelAlpha(image,r)*r[i];
-          gamma+=GetPixelAlpha(image,r);
+          alpha=(double) QuantumScale*GetPixelAlpha(image,r);
+          pixel+=alpha*r[i];
+          gamma+=alpha;
         }
         gamma=PerceptibleReciprocal(gamma);
         SetPixelChannel(blur_image,channel,ClampToQuantum(gamma*pixel),q);