]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Fri, 13 Jan 2012 02:14:12 +0000 (02:14 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Fri, 13 Jan 2012 02:14:12 +0000 (02:14 +0000)
MagickCore/composite.c
MagickWand/mogrify.c

index 34f2d3b32bdca0d89e024f3d6c8c2326b3907509..dfa66d78e267471ae00d5213db38693829aa938f 100644 (file)
@@ -531,12 +531,12 @@ MagickExport MagickBooleanType CompositeImage(Image *image,
   MagickStatusType
     flags;
 
-  ssize_t
-    y;
-
   size_t
     channels;
 
+  ssize_t
+    y;
+
   /*
      Composition based on the SVG specification:
 
@@ -584,7 +584,6 @@ MagickExport MagickBooleanType CompositeImage(Image *image,
          performed as 'pure' mathematical operations, rather than as image
          operations.
   */
-
   assert(image != (Image *) NULL);
   assert(image->signature == MagickSignature);
   if (image->debug != MagickFalse)
@@ -1581,6 +1580,7 @@ MagickExport MagickBooleanType CompositeImage(Image *image,
             break;
         }
         gamma=1.0/(fabs(alpha) <= MagickEpsilon ? 1.0 : alpha);
+        pixel=Dc;
         switch (compose)
         {
           case AlphaCompositeOp:
@@ -1694,30 +1694,35 @@ MagickExport MagickBooleanType CompositeImage(Image *image,
           case CopyAlphaCompositeOp:
           case IntensityCompositeOp:
           {
-            pixel=Dc;
+            if (channel == AlphaPixelChannel)
+              pixel=(MagickRealType) GetPixelAlpha(composite_image,p);
             break;
           }
           case CopyBlackCompositeOp:
           {
-            pixel=(MagickRealType) GetPixelBlack(composite_image,p);
+            if (channel == BlackPixelChannel)
+              pixel=(MagickRealType) GetPixelBlack(composite_image,p);
             break;
           }
           case CopyBlueCompositeOp:
           case CopyYellowCompositeOp:
           {
-            pixel=(MagickRealType) GetPixelBlue(composite_image,p);
+            if (channel == BluePixelChannel)
+              pixel=(MagickRealType) GetPixelBlue(composite_image,p);
             break;
           }
           case CopyGreenCompositeOp:
           case CopyMagentaCompositeOp:
           {
-            pixel=(MagickRealType) GetPixelGreen(composite_image,p);
+            if (channel == GreenPixelChannel)
+              pixel=(MagickRealType) GetPixelGreen(composite_image,p);
             break;
           }
           case CopyRedCompositeOp:
           case CopyCyanCompositeOp:
           {
-            pixel=(MagickRealType) GetPixelRed(composite_image,p);
+            if (channel == RedPixelChannel)
+              pixel=(MagickRealType) GetPixelRed(composite_image,p);
             break;
           }
           case DarkenCompositeOp:
index d7202e2775cf4a4599954f96000fbd395d5fc9de..704e22603aea620e1efae42b217410d0d6a6e698 100644 (file)
@@ -7479,8 +7479,8 @@ WandExport MagickBooleanType MogrifyImageList(ImageInfo *image_info,
                 else
                   {
                     /*
-                      Set a blending mask for the composition.
-                      Posible error, what if image->mask already set.
+                      Set a blending mask for the composition.  Possible
+                      problem, what if image->mask already set.
                     */
                     image->mask=mask_image;
                     (void) NegateImage(image->mask,MagickFalse,exception);
@@ -7489,7 +7489,10 @@ WandExport MagickBooleanType MogrifyImageList(ImageInfo *image_info,
             (void) CompositeImage(image,image->compose,composite_image,
               geometry.x,geometry.y,exception);
             if (mask_image != (Image *) NULL)
-              mask_image=image->mask=DestroyImage(image->mask);
+              {
+                image->mask=DestroyImage(image->mask);
+                mask_image=(Image *) NULL;
+              }
             composite_image=DestroyImage(composite_image);
             *images=DestroyImageList(*images);
             *images=image;