]> granicus.if.org Git - imagemagick/commitdiff
Don't blend alpha when the alpha channel is deactivated
authorCristy <urban-warrior@imagemagick.org>
Tue, 8 Sep 2015 22:51:56 +0000 (18:51 -0400)
committerCristy <urban-warrior@imagemagick.org>
Tue, 8 Sep 2015 22:51:56 +0000 (18:51 -0400)
MagickCore/composite.c
MagickCore/effect.c
MagickCore/pixel.c

index b183da6e97943dcec13eda6fbb88bf35ef13e612..b83b89ef86595f06d7adb01e5d6df97a77e24028 100644 (file)
@@ -291,11 +291,11 @@ static MagickBooleanType CompositeOverImage(Image *image,
 #define CompositeImageTag  "Composite/Image"
 
   CacheView
-    *source_view,
-    *image_view;
+    *image_view,
+    *source_view;
 
   const char
-     *value;
+    *value;
 
   MagickBooleanType
     clamp,
index c0d73ef792b4a7ebd026a462f99fbef4dc7eb212..97eb5f01223eb49bebbd0d6c66f167b63a9f0bcc 100644 (file)
@@ -3182,9 +3182,6 @@ MagickExport Image *ShadeImage(const Image *image,const MagickBooleanType gray,
       Shade this row of pixels.
     */
     normal.z=2.0*(double) QuantumRange;  /* constant Z of surface normal */
-    pre=p+GetPixelChannels(linear_image);
-    center=pre+(linear_image->columns+2)*GetPixelChannels(linear_image);
-    post=center+(linear_image->columns+2)*GetPixelChannels(linear_image);
     for (x=0; x < (ssize_t) linear_image->columns; x++)
     {
       register ssize_t
@@ -3193,6 +3190,9 @@ MagickExport Image *ShadeImage(const Image *image,const MagickBooleanType gray,
       /*
         Determine the surface normal and compute shading.
       */
+      pre=p+GetPixelChannels(linear_image);
+      center=pre+(linear_image->columns+2)*GetPixelChannels(linear_image);
+      post=center+(linear_image->columns+2)*GetPixelChannels(linear_image);
       normal.x=(double) (
         GetPixelIntensity(linear_image,pre-GetPixelChannels(linear_image))+
         GetPixelIntensity(linear_image,center-GetPixelChannels(linear_image))+
@@ -3207,7 +3207,8 @@ MagickExport Image *ShadeImage(const Image *image,const MagickBooleanType gray,
         GetPixelIntensity(linear_image,pre-GetPixelChannels(linear_image))-
         GetPixelIntensity(linear_image,pre)-
         GetPixelIntensity(linear_image,pre+GetPixelChannels(linear_image)));
-      if ((normal.x == 0.0) && (normal.y == 0.0))
+      if ((fabs(normal.x) <= MagickEpsilon) && 
+          (fabs(normal.y) <= MagickEpsilon))
         shade=light.z;
       else
         {
@@ -3255,9 +3256,7 @@ MagickExport Image *ShadeImage(const Image *image,const MagickBooleanType gray,
         SetPixelChannel(shade_image,channel,ClampToQuantum(QuantumScale*shade*
           center[i]),q);
       }
-      pre+=GetPixelChannels(linear_image);
-      center+=GetPixelChannels(linear_image);
-      post+=GetPixelChannels(linear_image);
+      p+=GetPixelChannels(linear_image);
       q+=GetPixelChannels(shade_image);
     }
     if (SyncCacheViewAuthenticPixels(shade_view,exception) == MagickFalse)
index 009ab1ab5be936b546b1593d737f7d1a5d088a8e..ab3cb37a4313e78e52129988c41ccc9a8a2774a4 100644 (file)
@@ -2369,7 +2369,7 @@ MagickExport MagickRealType GetPixelIntensity(const Image *restrict image,
     intensity;
 
   gamma=1.0;
-  if (image->alpha_trait != UndefinedPixelTrait)
+  if (image->alpha_trait == BlendPixelTrait)
     gamma=PerceptibleReciprocal(QuantumScale*GetPixelAlpha(image,pixel));
   red=gamma*GetPixelRed(image,pixel);
   green=gamma*GetPixelGreen(image,pixel);