// Last updated 2010/08/05 09:50
/*
https://imagemagick.org.cn/discourse-server/viewtopic.php?f=10&t=12285
and more recently: https://imagemagick.org.cn/discourse-server/viewtopic.php?f=1&t=16783
https://imagemagick.org.cn/Usage/channels/#masked_compose
Replicate a masked composite:
convert -size 100x100 tile:tile_water.jpg tile:tile_disks.jpg \
mask_bite.png -composite compose_masked.png
When doing composites in C it is best to think of the order that is used
in the convert command because that is the order you will specify them in
the MagickCompositeImage function.
*/
#include <windows.h>
#include <wand/magick_wand.h>
void test_wand(LPTSTR lpCmdLine)
{
MagickWand *dest = NULL, *src = NULL, *mask = NULL;
MagickWandGenesis();
/* Create the wands */
dest = NewMagickWand();
mask = NewMagickWand();
src = NewMagickWand();
MagickSetSize(dest,100,100);
MagickSetSize(src,100,100);
MagickReadImage(dest,"tile:tile_water.jpg");
MagickReadImage(mask,"mask_bite.png");
// When you create a mask, you use white for those parts that you want
// to show through and black for those which must not show through.
// But internally it's the opposite so the mask must be negated
MagickNegateImage(mask,MagickFalse);
MagickSetImageClipMask(dest,mask);
MagickReadImage(src,"tile:tile_disks.jpg");
// This does the src (overlay) over the dest (background)
MagickCompositeImage(dest,src,OverCompositeOp,0,0);
MagickWriteImage(dest,"clip_out.jpg");
/* Tidy up */
if(dest)dest = DestroyMagickWand(dest);
if(mask)mask = DestroyMagickWand(mask);
if(src)src = DestroyMagickWand(src);
MagickWandTerminus();
}