From d197cbbbde474ea2cbdd56d0defa45f100e44cd0 Mon Sep 17 00:00:00 2001 From: cristy Date: Fri, 13 Jan 2012 02:14:12 +0000 Subject: [PATCH] --- MagickCore/composite.c | 23 ++++++++++++++--------- MagickWand/mogrify.c | 9 ++++++--- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/MagickCore/composite.c b/MagickCore/composite.c index 34f2d3b32..dfa66d78e 100644 --- a/MagickCore/composite.c +++ b/MagickCore/composite.c @@ -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: diff --git a/MagickWand/mogrify.c b/MagickWand/mogrify.c index d7202e277..704e22603 100644 --- a/MagickWand/mogrify.c +++ b/MagickWand/mogrify.c @@ -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; -- 2.40.0