// Last updated 2008/11/04 11:20

// The program makes two tiles, one using the plasma: pseudo file and one using noise
// See: http://www.imagemagick.org/Usage/canvas/#plasma_seeded
// and: http://www.imagemagick.org/Usage/canvas/#random

// convert -size 100x100  plasma:red-yellow ( +clone -flop ) +append \
//		( +clone -flip ) -append -resize 50% tile_plasma.png
// and
// convert -size 100x100 xc: +noise Random -virtual-pixel tile \
//		-blur 0x10 -normalize ( +clone -flop ) +append \
//		( +clone -flip ) -append -resize 50% tile_random.png
/*
 Basically this flops and flips the image and joins the four results together
 and then resizes the result by 50% so that it's the same size as the original.
 E.g. if the original image is "/", it creates the flop image "\" and then appends
 them side by side to give "/\". Then it takes this image and flips it which produces
 "\/" and then appends these one on top of the other to produce
 
  /\
  \/

 and finally, since this image is now twice the size of the original, it is resized to 50%.
*/

#include <windows.h>
#include <wand/magick_wand.h>

// make-tile creates a tileable image from an input image.
// ( +clone -flop ) +append  ( +clone -flip ) -append -resize 50%
 void make_tile(MagickWand *mw,char *outfile)
{
	MagickWand *mwc = NULL, *mwf = NULL;
	int w,h;

	mwc = CloneMagickWand(mw);
	MagickFlopImage(mwc);
	MagickAddImage(mw,mwc);
	if(mwc)mwc = DestroyMagickWand(mwc);
	mwc = MagickAppendImages(mw,MagickFalse);

	mwf = CloneMagickWand(mwc);
	MagickFlipImage(mwf);
	MagickAddImage(mwc,mwf);
	if(mwf)mwf = DestroyMagickWand(mwf);
	mwf = MagickAppendImages(mwc,MagickTrue);

	w = MagickGetImageWidth(mwf);
	h = MagickGetImageHeight(mwf);
	// 1 = Don't blur or sharpen image
	MagickResizeImage(mwf,w/2,h/2,LanczosFilter,1);
	MagickWriteImage(mwf,outfile);
	if(mwf)mwf = DestroyMagickWand(mwf);
	if(mwc)mwc = DestroyMagickWand(mwc);
}
void test_wand(void)
{
	MagickWand *mw = NULL;

	MagickWandGenesis();

	mw = NewMagickWand();
	MagickSetSize(mw,100,100);
	MagickReadImage(mw,"plasma:red-yellow");
	make_tile(mw,"tile_plasma.png");
	if(mw)mw = DestroyMagickWand(mw);


	mw = NewMagickWand();
	MagickSetSize(mw,100,100);
	MagickReadImage(mw,"xc:");
	MagickAddNoiseImage(mw,RandomNoise);
	MagickSetImageVirtualPixelMethod(mw,TileVirtualPixelMethod);
	MagickBlurImage(mw,0,10);
	MagickNormalizeImage(mw);
	make_tile(mw,"tile_random.png");
	if(mw)mw = DestroyMagickWand(mw);

	MagickWandTerminus();
}