23using namespace Magick;
25#if defined(MAGICKCORE_FREETYPE_DELEGATE)
26 #define MakeLabel(image, text) image.label( (text) )
28 #define MakeLabel(image, text)
31int main(
int ,
char ** argv)
35 InitializeMagick(*argv);
37 const char *
const p = getenv(
"MAGICK_FONT");
38 const string MAGICK_FONT(p ? p :
"");
43 if(getenv(
"SRCDIR") != 0)
44 srcdir = getenv(
"SRCDIR");
52 cout <<
"Read images ..." << endl;
54 Image model( srcdir +
"model.miff" );
55 MakeLabel(model,
"Magick++");
56 model.borderColor(
"black" );
57 model.backgroundColor(
"black" );
59 Image smile( srcdir +
"smile.miff" );
60 MakeLabel(smile,
"Smile");
61 smile.borderColor(
"black" );
66 cout <<
"Creating thumbnails..." << endl;
71 null.read(
"NULL:black" );
72 list<Image> images( 7, null );
74 Image example = model;
82 cout <<
" add noise ..." << endl;
83 MakeLabel(example,
"Add Noise");
84 example.addNoise( LaplacianNoise );
85 images.push_back( example );
87 cout <<
" add noise (blue) ..." << endl;
88 MakeLabel(example,
"Add Noise\n(Blue Channel)");
89 example.addNoiseChannel( BlueChannel, PoissonNoise );
90 images.push_back( example );
92#if defined(MAGICKCORE_FREETYPE_DELEGATE)
93 cout <<
" annotate ..." << endl;
95 MakeLabel(example,
"Annotate");
96 example.density(
"72x72" );
97 example.fontPointsize( 18 );
98 example.font(MAGICK_FONT);
99 example.strokeColor(
Color() );
100 example.fillColor(
"gold" );
101 example.annotate(
"Magick++",
"+0+20", NorthGravity );
102 images.push_back( example );
105 cout <<
" blur ..." << endl;
107 MakeLabel(example,
"Blur");
108 example.blur( 0, 1.5 );
109 images.push_back( example );
111 cout <<
" blur red channel ..." << endl;
113 MakeLabel(example,
"Blur Channel\n(Red Channel)");
114 example.blurChannel( RedChannel, 0, 3.0 );
115 images.push_back( example );
117 cout <<
" border ..." << endl;
119 MakeLabel(example,
"Border");
120 example.borderColor(
"gold" );
122 images.push_back( example );
124 cout <<
" channel ..." << endl;
126 MakeLabel(example,
"Channel\n(Red Channel)");
127 example.channel( RedChannel );
128 images.push_back( example );
130 cout <<
" charcoal ..." << endl;
132 MakeLabel(example,
"Charcoal");
134 images.push_back( example );
136 cout <<
" composite ..." << endl;
138 MakeLabel(example,
"Composite");
139 example.composite( smile,
"+35+65", OverCompositeOp);
140 images.push_back( example );
142 cout <<
" contrast ..." << endl;
144 MakeLabel(example,
"Contrast");
145 example.contrast(
false );
146 images.push_back( example );
148 cout <<
" convolve ..." << endl;
150 MakeLabel(example,
"Convolve");
153 const double kernel[] = { 1, 1, 1, 1, 4, 1, 1, 1, 1 };
154 example.convolve( 3, kernel );
156 images.push_back( example );
158 cout <<
" crop ..." << endl;
160 MakeLabel(example,
"Crop");
161 example.crop(
"80x80+25+50" );
162 images.push_back( example );
164 cout <<
" despeckle ..." << endl;
166 MakeLabel(example,
"Despeckle");
167 example.despeckle( );
168 images.push_back( example );
170 cout <<
" draw ..." << endl;
172 MakeLabel(example,
"Draw");
173 example.fillColor(
Color());
174 example.strokeColor(
"gold" );
175 example.strokeWidth( 2 );
177 images.push_back( example );
179 cout <<
" edge ..." << endl;
181 MakeLabel(example,
"Detect Edges");
183 images.push_back( example );
185 cout <<
" emboss ..." << endl;
187 MakeLabel(example,
"Emboss");
189 images.push_back( example );
191 cout <<
" equalize ..." << endl;
193 MakeLabel(example,
"Equalize");
195 images.push_back( example );
197 cout <<
" explode ..." << endl;
199 MakeLabel(example,
"Explode");
200 example.backgroundColor(
"#000000FF" );
201 example.implode( -1 );
202 images.push_back( example );
204 cout <<
" flip ..." << endl;
206 MakeLabel(example,
"Flip");
208 images.push_back( example );
210 cout <<
" flop ..." << endl;
212 MakeLabel(example,
"Flop");
214 images.push_back( example );
216 cout <<
" frame ..." << endl;
218 MakeLabel(example,
"Frame");
220 images.push_back( example );
222 cout <<
" gamma ..." << endl;
224 MakeLabel(example,
"Gamma");
225 example.gamma( 1.6 );
226 images.push_back( example );
228 cout <<
" gaussian blur ..." << endl;
230 MakeLabel(example,
"Gaussian Blur");
231 example.gaussianBlur( 0.0, 1.5 );
232 images.push_back( example );
234 cout <<
" gaussian blur channel ..." << endl;
236 MakeLabel(example,
"Gaussian Blur\n(Green Channel)");
237 example.gaussianBlurChannel( GreenChannel, 0.0, 1.5 );
238 images.push_back( example );
240 cout <<
" gradient ..." << endl;
242 gradient.size(
"130x194" );
243 gradient.read(
"gradient:#20a0ff-#ffff00" );
244 MakeLabel(gradient,
"Gradient");
245 images.push_back( gradient );
247 cout <<
" grayscale ..." << endl;
249 MakeLabel(example,
"Grayscale");
250 example.quantizeColorSpace( GRAYColorspace );
252 images.push_back( example );
254 cout <<
" implode ..." << endl;
256 MakeLabel(example,
"Implode");
257 example.implode( 0.5 );
258 images.push_back( example );
260 cout <<
" level ..." << endl;
262 MakeLabel(example,
"Level");
263 example.level( 0.20*QuantumRange, 0.90*QuantumRange, 1.20 );
264 images.push_back( example );
266 cout <<
" level red channel ..." << endl;
268 MakeLabel(example,
"Level Channel\n(Red Channel)");
269 example.levelChannel( RedChannel, 0.20*QuantumRange, 0.90*QuantumRange, 1.20 );
270 images.push_back( example );
272 cout <<
" median filter ..." << endl;
274 MakeLabel(example,
"Median Filter");
275 example.medianFilter( );
276 images.push_back( example );
278 cout <<
" modulate ..." << endl;
280 MakeLabel(example,
"Modulate");
281 example.modulate( 110, 110, 110 );
282 images.push_back( example );
284 cout <<
" monochrome ..." << endl;
286 MakeLabel(example,
"Monochrome");
287 example.quantizeColorSpace( GRAYColorspace );
288 example.quantizeColors( 2 );
289 example.quantizeDither(
false );
291 images.push_back( example );
293 cout <<
" motion blur ..." << endl;
295 MakeLabel(example,
"Motion Blur");
296 example.motionBlur( 0.0, 7.0,45 );
297 images.push_back( example );
299 cout <<
" negate ..." << endl;
301 MakeLabel(example,
"Negate");
303 images.push_back( example );
305 cout <<
" normalize ..." << endl;
307 MakeLabel(example,
"Normalize");
308 example.normalize( );
309 images.push_back( example );
311 cout <<
" oil paint ..." << endl;
313 MakeLabel(example,
"Oil Paint");
315 images.push_back( example );
317 cout <<
" ordered dither 2x2 ..." << endl;
319 MakeLabel(example,
"Ordered Dither\n(2x2)");
320 example.randomThreshold(2,2);
321 images.push_back( example );
323 cout <<
" ordered dither 3x3..." << endl;
325 MakeLabel(example,
"Ordered Dither\n(3x3)");
326 example.randomThreshold(3,3);
327 images.push_back( example );
329 cout <<
" ordered dither 4x4..." << endl;
331 MakeLabel(example,
"Ordered Dither\n(4x4)");
332 example.randomThreshold(4,4);
333 images.push_back( example );
335 cout <<
" ordered dither red 4x4..." << endl;
337 MakeLabel(example,
"Ordered Dither\n(Red 4x4)");
338 example.randomThresholdChannel(RedChannel,4,4);
339 images.push_back( example );
341 cout <<
" plasma ..." << endl;
343 plasma.size(
"130x194" );
344 plasma.read(
"plasma:fractal" );
345 MakeLabel(plasma,
"Plasma");
346 images.push_back( plasma );
348 cout <<
" quantize ..." << endl;
350 MakeLabel(example,
"Quantize");
352 images.push_back( example );
354 cout <<
" quantum operator ..." << endl;
356 MakeLabel(example,
"Quantum Operator\nRed * 0.4");
357 example.evaluate( RedChannel,MultiplyEvaluateOperator,0.40 );
358 images.push_back( example );
360 cout <<
" raise ..." << endl;
362 MakeLabel(example,
"Raise");
364 images.push_back( example );
366 cout <<
" reduce noise ..." << endl;
368 MakeLabel(example,
"Reduce Noise");
369 example.reduceNoise( 1.0 );
370 images.push_back( example );
372 cout <<
" resize ..." << endl;
374 MakeLabel(example,
"Resize");
375 example.zoom(
"50%" );
376 images.push_back( example );
378 cout <<
" roll ..." << endl;
380 MakeLabel(example,
"Roll");
381 example.roll(
"+20+10" );
382 images.push_back( example );
384 cout <<
" rotate ..." << endl;
386 MakeLabel(example,
"Rotate");
387 example.rotate( 45 );
388 example.transparent(
"black" );
389 images.push_back( example );
391 cout <<
" scale ..." << endl;
393 MakeLabel(example,
"Scale");
394 example.scale(
"60%" );
395 images.push_back( example );
397 cout <<
" segment ..." << endl;
399 MakeLabel(example,
"Segment");
400 example.segment( 0.5, 0.25 );
401 images.push_back( example );
403 cout <<
" shade ..." << endl;
405 MakeLabel(example,
"Shade");
406 example.shade( 30, 30,
false );
407 images.push_back( example );
409 cout <<
" sharpen ..." << endl;
411 MakeLabel(example,
"Sharpen");
412 example.sharpen( 0.0, 1.0 );
413 images.push_back( example );
415 cout <<
" shave ..." << endl;
417 MakeLabel(example,
"Shave");
419 images.push_back( example );
421 cout <<
" shear ..." << endl;
423 MakeLabel(example,
"Shear");
424 example.shear( 45, 45 );
425 example.transparent(
"black" );
426 images.push_back( example );
428 cout <<
" spread ..." << endl;
430 MakeLabel(example,
"Spread");
432 images.push_back( example );
434 cout <<
" solarize ..." << endl;
436 MakeLabel(example,
"Solarize");
438 images.push_back( example );
440 cout <<
" swirl ..." << endl;
442 example.backgroundColor(
"#000000FF" );
443 MakeLabel(example,
"Swirl");
445 images.push_back( example );
447 cout <<
" threshold ..." << endl;
449 MakeLabel(example,
"Threshold");
450 example.threshold( QuantumRange/2.0 );
451 images.push_back( example );
453 cout <<
" threshold random ..." << endl;
455 MakeLabel(example,
"Random\nThreshold");
456 example.randomThreshold( (0.3*QuantumRange),
457 (0.85*QuantumRange) );
458 images.push_back( example );
460 cout <<
" unsharp mask ..." << endl;
462 MakeLabel(example,
"Unsharp Mask");
464 example.unsharpmask( 0.0, 1.0, 1.0, 0.05);
465 images.push_back( example );
467 cout <<
" wave ..." << endl;
469 MakeLabel(example,
"Wave");
470 example.alpha(
true );
471 example.backgroundColor(
"#000000FF" );
472 example.wave( 25, 150 );
473 images.push_back( example );
478 cout <<
"Montage images..." << endl;
483 montageOpts.geometry(
"130x194+10+5>" );
484 montageOpts.gravity( CenterGravity );
485 montageOpts.borderColor(
"green" );
486 montageOpts.borderWidth( 1 );
487 montageOpts.tile(
"7x4" );
488 montageOpts.backgroundColor(
"#ffffff" );
489 montageOpts.pointSize( 18 );
490 montageOpts.font(MAGICK_FONT);
491 montageOpts.fillColor(
"#600" );
492 montageOpts.strokeColor(
Color() );
493 montageOpts.fileName(
"Magick++ Demo" );
494 montageImages( &montage, images.begin(), images.end(), montageOpts );
497 Image& montage_image = montage.front();
500 cout <<
"Adding logo image ..." << endl;
501 Image logo(
"logo:" );
505 Geometry placement(0,0,((ssize_t) montage_image.columns()/2)-
506 ((ssize_t) logo.columns()/2),0);
507 montage_image.composite( logo, placement, OverCompositeOp );
510 for_each( montage.begin(), montage.end(),
depthImage(8) );
511 for_each( montage.begin(), montage.end(),
alphaImage(
false ) );
514 cout <<
"Writing image \"demo_out.miff\" ..." << endl;
515 writeImages(montage.begin(),montage.end(),
"demo_out_%d.miff");
522 catch( exception &error_ )
524 cout <<
"Caught exception: " << error_.what() << endl;