// Last updated 2008/11/27 18:09
#include <windows.h>
#include <wand/MagickWand.h>
// convert logo: ( logo: -resize 100%x50%! -size 640x240 \
// gradient:white-black +matte -compose copyopacity -composite ) \
// -append logo_reflect.png
void test_wand(void)
{
MagickWand *mw = NULL,
// Reflection wand
*mwr = NULL,
// gradient wand
*mwg = NULL;
int w,h;
MagickWandGenesis();
mw = NewMagickWand();
MagickReadImage(mw,"logo:");
// We know that logo: is 640x480 but in the general case
// we need to get the dimensions of the image
w = MagickGetImageWidth(mw);
h = MagickGetImageHeight(mw);
// +matte is the same as -alpha off
// This does it the "new" way but if your IM doesn't have this
// then MagickSetImageMatte(mw,MagickFalse); can be used
MagickSetImageAlphaChannel(mw,DeactivateAlphaChannel);
// clone the input image
mwr = CloneMagickWand(mw);
// Resize it
MagickResizeImage(mwr,w,h/2,LanczosFilter,1);
// Flip the image over to form the reflection
MagickFlipImage(mwr);
// Create the gradient image which will be used as the alpha
// channel in the reflection image
mwg = NewMagickWand();
MagickSetSize(mwg,w,h/2);
MagickReadImage(mwg,"gradient:white-black");
// Copy the gradient in to the alpha channel of the reflection image
MagickCompositeImage(mwr,mwg,CopyOpacityCompositeOp,0,0);
// Add the reflection image to the wand which holds the original image
MagickAddImage(mw,mwr);
// Destroy and reuse mwg as the result image after the appen
if(mwg) mwg = DestroyMagickWand(mwg);
// Append the reflection to the bottom (MagickTrue) of the original image
mwg = MagickAppendImages(mw,MagickTrue);
// and save the result
MagickWriteImage(mwg,"logo_reflect.png");
if(mw) mw = DestroyMagickWand(mw);
if(mwg) mwg = DestroyMagickWand(mwg);
if(mwr) mwr = DestroyMagickWand(mwr);
MagickWandTerminus();
}