MagickStatusType
flags;
- ssize_t
- y;
-
size_t
channels;
+ ssize_t
+ y;
+
/*
Composition based on the SVG specification:
performed as 'pure' mathematical operations, rather than as image
operations.
*/
-
assert(image != (Image *) NULL);
assert(image->signature == MagickSignature);
if (image->debug != MagickFalse)
break;
}
gamma=1.0/(fabs(alpha) <= MagickEpsilon ? 1.0 : alpha);
+ pixel=Dc;
switch (compose)
{
case AlphaCompositeOp:
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:
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);
(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;