24using namespace Magick;
26#if defined(MAGICKCORE_FREETYPE_DELEGATE)
27 #define MakeLabel(image, text) image.label( (text) )
29 #define MakeLabel(image, text)
32int main(
int ,
char ** argv)
38 const char *
const p = getenv(
"MAGICK_FONT");
39 const string MAGICK_FONT(p ? p :
"");
44 if(getenv(
"SRCDIR") != 0)
45 srcdir = getenv(
"SRCDIR");
53 cout <<
"Read images ..." << endl;
55 Image model( srcdir +
"model.miff" );
56 MakeLabel(model,
"Magick++");
57 model.borderColor(
"black" );
58 model.backgroundColor(
"black" );
60 Image smile( srcdir +
"smile.miff" );
61 MakeLabel(smile,
"Smile");
62 smile.borderColor(
"black" );
67 cout <<
"Creating thumbnails..." << endl;
72 null.read(
"NULL:black" );
73 list<Image> images( 7, null );
75 Image example = model;
83 cout <<
" add noise ..." << endl;
84 MakeLabel(example,
"Add Noise");
85 example.addNoise( LaplacianNoise );
86 images.push_back( example );
88 cout <<
" add noise (blue) ..." << endl;
89 MakeLabel(example,
"Add Noise\n(Blue Channel)");
90 example.addNoiseChannel( BlueChannel, PoissonNoise );
91 images.push_back( example );
93#if defined(MAGICKCORE_FREETYPE_DELEGATE)
94 cout <<
" annotate ..." << endl;
96 MakeLabel(example,
"Annotate");
97 example.density(
"72x72" );
98 example.fontPointsize( 18 );
99 example.font(MAGICK_FONT);
100 example.strokeColor(
Color() );
101 example.fillColor(
"gold" );
102 example.annotate(
"Magick++",
"+0+20", NorthGravity );
103 images.push_back( example );
106 cout <<
" blur ..." << endl;
108 MakeLabel(example,
"Blur");
109 example.blur( 0, 1.5 );
110 images.push_back( example );
112 cout <<
" blur red channel ..." << endl;
114 MakeLabel(example,
"Blur Channel\n(Red Channel)");
115 example.blurChannel( RedChannel, 0, 3.0 );
116 images.push_back( example );
118 cout <<
" border ..." << endl;
120 MakeLabel(example,
"Border");
121 example.borderColor(
"gold" );
123 images.push_back( example );
125 cout <<
" channel ..." << endl;
127 MakeLabel(example,
"Channel\n(Red Channel)");
128 example.channel( RedChannel );
129 images.push_back( example );
131 cout <<
" charcoal ..." << endl;
133 MakeLabel(example,
"Charcoal");
135 images.push_back( example );
137 cout <<
" composite ..." << endl;
139 MakeLabel(example,
"Composite");
140 example.composite( smile,
"+35+65", OverCompositeOp);
141 images.push_back( example );
143 cout <<
" contrast ..." << endl;
145 MakeLabel(example,
"Contrast");
146 example.contrast(
false );
147 images.push_back( example );
149 cout <<
" convolve ..." << endl;
151 MakeLabel(example,
"Convolve");
154 const double kernel[] = { 1, 1, 1, 1, 4, 1, 1, 1, 1 };
155 example.convolve( 3, kernel );
157 images.push_back( example );
159 cout <<
" crop ..." << endl;
161 MakeLabel(example,
"Crop");
162 example.crop(
"80x80+25+50" );
163 images.push_back( example );
165 cout <<
" despeckle ..." << endl;
167 MakeLabel(example,
"Despeckle");
168 example.despeckle( );
169 images.push_back( example );
171 cout <<
" draw ..." << endl;
173 MakeLabel(example,
"Draw");
174 example.fillColor(
Color());
175 example.strokeColor(
"gold" );
176 example.strokeWidth( 2 );
178 images.push_back( example );
180 cout <<
" edge ..." << endl;
182 MakeLabel(example,
"Detect Edges");
184 images.push_back( example );
186 cout <<
" emboss ..." << endl;
188 MakeLabel(example,
"Emboss");
190 images.push_back( example );
192 cout <<
" equalize ..." << endl;
194 MakeLabel(example,
"Equalize");
196 images.push_back( example );
198 cout <<
" explode ..." << endl;
200 MakeLabel(example,
"Explode");
201 example.backgroundColor(
"#000000FF" );
202 example.implode( -1 );
203 images.push_back( example );
205 cout <<
" flip ..." << endl;
207 MakeLabel(example,
"Flip");
209 images.push_back( example );
211 cout <<
" flop ..." << endl;
213 MakeLabel(example,
"Flop");
215 images.push_back( example );
217 cout <<
" frame ..." << endl;
219 MakeLabel(example,
"Frame");
221 images.push_back( example );
223 cout <<
" gamma ..." << endl;
225 MakeLabel(example,
"Gamma");
226 example.gamma( 1.6 );
227 images.push_back( example );
229 cout <<
" gaussian blur ..." << endl;
231 MakeLabel(example,
"Gaussian Blur");
232 example.gaussianBlur( 0.0, 1.5 );
233 images.push_back( example );
235 cout <<
" gaussian blur channel ..." << endl;
237 MakeLabel(example,
"Gaussian Blur\n(Green Channel)");
238 example.gaussianBlurChannel( GreenChannel, 0.0, 1.5 );
239 images.push_back( example );
241 cout <<
" gradient ..." << endl;
243 gradient.size(
"130x194" );
244 gradient.read(
"gradient:#20a0ff-#ffff00" );
245 MakeLabel(gradient,
"Gradient");
246 images.push_back( gradient );
248 cout <<
" grayscale ..." << endl;
250 MakeLabel(example,
"Grayscale");
251 example.quantizeColorSpace( GRAYColorspace );
253 images.push_back( example );
255 cout <<
" implode ..." << endl;
257 MakeLabel(example,
"Implode");
258 example.implode( 0.5 );
259 images.push_back( example );
261 cout <<
" level ..." << endl;
263 MakeLabel(example,
"Level");
264 example.level( 0.20*QuantumRange, 0.90*QuantumRange, 1.20 );
265 images.push_back( example );
267 cout <<
" level red channel ..." << endl;
269 MakeLabel(example,
"Level Channel\n(Red Channel)");
270 example.levelChannel( RedChannel, 0.20*QuantumRange, 0.90*QuantumRange, 1.20 );
271 images.push_back( example );
273 cout <<
" median filter ..." << endl;
275 MakeLabel(example,
"Median Filter");
276 example.medianFilter( );
277 images.push_back( example );
279 cout <<
" modulate ..." << endl;
281 MakeLabel(example,
"Modulate");
282 example.modulate( 110, 110, 110 );
283 images.push_back( example );
285 cout <<
" monochrome ..." << endl;
287 MakeLabel(example,
"Monochrome");
288 example.quantizeColorSpace( GRAYColorspace );
289 example.quantizeColors( 2 );
290 example.quantizeDither(
false );
292 images.push_back( example );
294 cout <<
" motion blur ..." << endl;
296 MakeLabel(example,
"Motion Blur");
297 example.motionBlur( 0.0, 7.0,45 );
298 images.push_back( example );
300 cout <<
" negate ..." << endl;
302 MakeLabel(example,
"Negate");
304 images.push_back( example );
306 cout <<
" normalize ..." << endl;
308 MakeLabel(example,
"Normalize");
309 example.normalize( );
310 images.push_back( example );
312 cout <<
" oil paint ..." << endl;
314 MakeLabel(example,
"Oil Paint");
316 images.push_back( example );
318 cout <<
" ordered dither 2x2 ..." << endl;
320 MakeLabel(example,
"Ordered Dither\n(2x2)");
321 example.randomThreshold(2,2);
322 images.push_back( example );
324 cout <<
" ordered dither 3x3..." << endl;
326 MakeLabel(example,
"Ordered Dither\n(3x3)");
327 example.randomThreshold(3,3);
328 images.push_back( example );
330 cout <<
" ordered dither 4x4..." << endl;
332 MakeLabel(example,
"Ordered Dither\n(4x4)");
333 example.randomThreshold(4,4);
334 images.push_back( example );
336 cout <<
" ordered dither red 4x4..." << endl;
338 MakeLabel(example,
"Ordered Dither\n(Red 4x4)");
339 example.randomThresholdChannel(RedChannel,4,4);
340 images.push_back( example );
342 cout <<
" plasma ..." << endl;
344 plasma.size(
"130x194" );
345 plasma.read(
"plasma:fractal" );
346 MakeLabel(plasma,
"Plasma");
347 images.push_back( plasma );
349 cout <<
" quantize ..." << endl;
351 MakeLabel(example,
"Quantize");
353 images.push_back( example );
355 cout <<
" quantum operator ..." << endl;
357 MakeLabel(example,
"Quantum Operator\nRed * 0.4");
358 example.evaluate( RedChannel,MultiplyEvaluateOperator,0.40 );
359 images.push_back( example );
361 cout <<
" raise ..." << endl;
363 MakeLabel(example,
"Raise");
365 images.push_back( example );
367 cout <<
" reduce noise ..." << endl;
369 MakeLabel(example,
"Reduce Noise");
370 example.reduceNoise( 1.0 );
371 images.push_back( example );
373 cout <<
" resize ..." << endl;
375 MakeLabel(example,
"Resize");
376 example.zoom(
"50%" );
377 images.push_back( example );
379 cout <<
" roll ..." << endl;
381 MakeLabel(example,
"Roll");
382 example.roll(
"+20+10" );
383 images.push_back( example );
385 cout <<
" rotate ..." << endl;
387 MakeLabel(example,
"Rotate");
388 example.rotate( 45 );
389 example.transparent(
"black" );
390 images.push_back( example );
392 cout <<
" scale ..." << endl;
394 MakeLabel(example,
"Scale");
395 example.scale(
"60%" );
396 images.push_back( example );
398 cout <<
" segment ..." << endl;
400 MakeLabel(example,
"Segment");
401 example.segment( 0.5, 0.25 );
402 images.push_back( example );
404 cout <<
" shade ..." << endl;
406 MakeLabel(example,
"Shade");
407 example.shade( 30, 30,
false );
408 images.push_back( example );
410 cout <<
" sharpen ..." << endl;
412 MakeLabel(example,
"Sharpen");
413 example.sharpen( 0.0, 1.0 );
414 images.push_back( example );
416 cout <<
" shave ..." << endl;
418 MakeLabel(example,
"Shave");
420 images.push_back( example );
422 cout <<
" shear ..." << endl;
424 MakeLabel(example,
"Shear");
425 example.shear( 45, 45 );
426 example.transparent(
"black" );
427 images.push_back( example );
429 cout <<
" spread ..." << endl;
431 MakeLabel(example,
"Spread");
433 images.push_back( example );
435 cout <<
" solarize ..." << endl;
437 MakeLabel(example,
"Solarize");
439 images.push_back( example );
441 cout <<
" swirl ..." << endl;
443 example.backgroundColor(
"#000000FF" );
444 MakeLabel(example,
"Swirl");
446 images.push_back( example );
448 cout <<
" threshold ..." << endl;
450 MakeLabel(example,
"Threshold");
451 example.threshold( QuantumRange/2.0 );
452 images.push_back( example );
454 cout <<
" threshold random ..." << endl;
456 MakeLabel(example,
"Random\nThreshold");
457 example.randomThreshold( (0.3*QuantumRange),
458 (0.85*QuantumRange) );
459 images.push_back( example );
461 cout <<
" unsharp mask ..." << endl;
463 MakeLabel(example,
"Unsharp Mask");
465 example.unsharpmask( 0.0, 1.0, 1.0, 0.05);
466 images.push_back( example );
468 cout <<
" wave ..." << endl;
470 MakeLabel(example,
"Wave");
471 example.alpha(
true );
472 example.backgroundColor(
"#000000FF" );
473 example.wave( 25, 150 );
474 images.push_back( example );
479 cout <<
"Montage images..." << endl;
484 montageOpts.geometry(
"130x194+10+5>" );
485 montageOpts.gravity( CenterGravity );
486 montageOpts.borderColor(
"green" );
487 montageOpts.borderWidth( 1 );
488 montageOpts.tile(
"7x4" );
489 montageOpts.backgroundColor(
"#ffffff" );
490 montageOpts.pointSize( 18 );
491 montageOpts.font(MAGICK_FONT);
492 montageOpts.fillColor(
"#600" );
493 montageOpts.strokeColor(
Color() );
494 montageOpts.fileName(
"Magick++ Demo" );
495 montageImages( &montage, images.begin(), images.end(), montageOpts );
498 Image& montage_image = montage.front();
501 cout <<
"Adding logo image ..." << endl;
502 Image logo(
"logo:" );
506 Geometry placement(0,0,((ssize_t) montage_image.columns()/2)-
507 ((ssize_t) logo.columns()/2),0);
508 montage_image.composite( logo, placement, OverCompositeOp );
511 for_each( montage.begin(), montage.end(),
depthImage(8) );
512 for_each( montage.begin(), montage.end(),
alphaImage(
false ) );
515 cout <<
"Writing image \"demo_out.miff\" ..." << endl;
516 writeImages(montage.begin(),montage.end(),
"demo_out_%d.miff");
523 catch( exception &error_ )
525 cout <<
"Caught exception: " << error_.what() << endl;