21using namespace Magick;
23int main(
int ,
char ** argv)
27 InitializeMagick(*argv);
29 const char *
const p = getenv(
"MAGICK_FONT");
30 const string MAGICK_FONT(p ? p :
"");
35 if(getenv(
"SRCDIR") != 0)
36 srcdir = getenv(
"SRCDIR");
44 cout <<
"Read images ..." << endl;
46 Image model( srcdir +
"model.miff" );
47 model.label(
"Magick++" );
48 model.borderColor(
"black" );
49 model.backgroundColor(
"black" );
51 Image smile( srcdir +
"smile.miff" );
52 smile.label(
"Smile" );
53 smile.borderColor(
"black" );
58 cout <<
"Creating thumbnails..." << endl;
63 null.read(
"NULL:black" );
64 list<Image> images( 7, null );
66 Image example = model;
74 cout <<
" add noise ..." << endl;
75 example.label(
"Add Noise" );
76 example.addNoise( LaplacianNoise );
77 images.push_back( example );
79 cout <<
" add noise (blue) ..." << endl;
80 example.label(
"Add Noise\n(Blue Channel)" );
81 example.addNoiseChannel( BlueChannel, PoissonNoise );
82 images.push_back( example );
84 cout <<
" annotate ..." << endl;
86 example.label(
"Annotate" );
87 example.density(
"72x72" );
88 example.fontPointsize( 18 );
89 example.font(MAGICK_FONT);
90 example.strokeColor(
Color() );
91 example.fillColor(
"gold" );
92 example.annotate(
"Magick++",
"+0+20", NorthGravity );
93 images.push_back( example );
95 cout <<
" blur ..." << endl;
97 example.label(
"Blur" );
98 example.blur( 0, 1.5 );
99 images.push_back( example );
101 cout <<
" blur red channel ..." << endl;
103 example.label(
"Blur Channel\n(Red Channel)" );
104 example.blurChannel( RedChannel, 0, 3.0 );
105 images.push_back( example );
107 cout <<
" border ..." << endl;
109 example.label(
"Border" );
110 example.borderColor(
"gold" );
112 images.push_back( example );
114 cout <<
" channel ..." << endl;
116 example.label(
"Channel\n(Red Channel)" );
117 example.channel( RedChannel );
118 images.push_back( example );
120 cout <<
" charcoal ..." << endl;
122 example.label(
"Charcoal" );
124 images.push_back( example );
126 cout <<
" composite ..." << endl;
128 example.label(
"Composite" );
129 example.composite( smile,
"+35+65", OverCompositeOp);
130 images.push_back( example );
132 cout <<
" contrast ..." << endl;
134 example.label(
"Contrast" );
135 example.contrast(
false );
136 images.push_back( example );
138 cout <<
" convolve ..." << endl;
140 example.label(
"Convolve" );
143 const double kernel[] = { 1, 1, 1, 1, 4, 1, 1, 1, 1 };
144 example.convolve( 3, kernel );
146 images.push_back( example );
148 cout <<
" crop ..." << endl;
150 example.label(
"Crop" );
151 example.crop(
"80x80+25+50" );
152 images.push_back( example );
154 cout <<
" despeckle ..." << endl;
156 example.label(
"Despeckle" );
157 example.despeckle( );
158 images.push_back( example );
160 cout <<
" draw ..." << endl;
162 example.label(
"Draw" );
163 example.fillColor(
Color());
164 example.strokeColor(
"gold" );
165 example.strokeWidth( 2 );
167 images.push_back( example );
169 cout <<
" edge ..." << endl;
171 example.label(
"Detect Edges" );
173 images.push_back( example );
175 cout <<
" emboss ..." << endl;
177 example.label(
"Emboss" );
179 images.push_back( example );
181 cout <<
" equalize ..." << endl;
183 example.label(
"Equalize" );
185 images.push_back( example );
187 cout <<
" explode ..." << endl;
189 example.label(
"Explode" );
190 example.backgroundColor(
"#000000FF" );
191 example.implode( -1 );
192 images.push_back( example );
194 cout <<
" flip ..." << endl;
196 example.label(
"Flip" );
198 images.push_back( example );
200 cout <<
" flop ..." << endl;
202 example.label(
"Flop" );
204 images.push_back( example );
206 cout <<
" frame ..." << endl;
208 example.label(
"Frame" );
210 images.push_back( example );
212 cout <<
" gamma ..." << endl;
214 example.label(
"Gamma" );
215 example.gamma( 1.6 );
216 images.push_back( example );
218 cout <<
" gaussian blur ..." << endl;
220 example.label(
"Gaussian Blur" );
221 example.gaussianBlur( 0.0, 1.5 );
222 images.push_back( example );
224 cout <<
" gaussian blur channel ..." << endl;
226 example.label(
"Gaussian Blur\n(Green Channel)" );
227 example.gaussianBlurChannel( GreenChannel, 0.0, 1.5 );
228 images.push_back( example );
230 cout <<
" gradient ..." << endl;
232 gradient.size(
"130x194" );
233 gradient.read(
"gradient:#20a0ff-#ffff00" );
234 gradient.label(
"Gradient" );
235 images.push_back( gradient );
237 cout <<
" grayscale ..." << endl;
239 example.label(
"Grayscale" );
240 example.quantizeColorSpace( GRAYColorspace );
242 images.push_back( example );
244 cout <<
" implode ..." << endl;
246 example.label(
"Implode" );
247 example.implode( 0.5 );
248 images.push_back( example );
250 cout <<
" level ..." << endl;
252 example.label(
"Level" );
253 example.level( 0.20*QuantumRange, 0.90*QuantumRange, 1.20 );
254 images.push_back( example );
256 cout <<
" level red channel ..." << endl;
258 example.label(
"Level Channel\n(Red Channel)" );
259 example.levelChannel( RedChannel, 0.20*QuantumRange, 0.90*QuantumRange, 1.20 );
260 images.push_back( example );
262 cout <<
" median filter ..." << endl;
264 example.label(
"Median Filter" );
265 example.medianFilter( );
266 images.push_back( example );
268 cout <<
" modulate ..." << endl;
270 example.label(
"Modulate" );
271 example.modulate( 110, 110, 110 );
272 images.push_back( example );
274 cout <<
" monochrome ..." << endl;
276 example.label(
"Monochrome" );
277 example.quantizeColorSpace( GRAYColorspace );
278 example.quantizeColors( 2 );
279 example.quantizeDither(
false );
281 images.push_back( example );
283 cout <<
" motion blur ..." << endl;
285 example.label(
"Motion Blur" );
286 example.motionBlur( 0.0, 7.0,45 );
287 images.push_back( example );
289 cout <<
" negate ..." << endl;
291 example.label(
"Negate" );
293 images.push_back( example );
295 cout <<
" normalize ..." << endl;
297 example.label(
"Normalize" );
298 example.normalize( );
299 images.push_back( example );
301 cout <<
" oil paint ..." << endl;
303 example.label(
"Oil Paint" );
305 images.push_back( example );
307 cout <<
" ordered dither 2x2 ..." << endl;
309 example.label(
"Ordered Dither\n(2x2)" );
310 example.randomThreshold(
Geometry(2,2) );
311 images.push_back( example );
313 cout <<
" ordered dither 3x3..." << endl;
315 example.label(
"Ordered Dither\n(3x3)" );
316 example.randomThreshold(
Geometry(3,3) );
317 images.push_back( example );
319 cout <<
" ordered dither 4x4..." << endl;
321 example.label(
"Ordered Dither\n(4x4)" );
322 example.randomThreshold(
Geometry(4,4) );
323 images.push_back( example );
325 cout <<
" ordered dither red 4x4..." << endl;
327 example.label(
"Ordered Dither\n(Red 4x4)" );
328 example.randomThresholdChannel(
Geometry(4,4), RedChannel);
329 images.push_back( example );
331 cout <<
" plasma ..." << endl;
333 plasma.size(
"130x194" );
334 plasma.read(
"plasma:fractal" );
335 plasma.label(
"Plasma" );
336 images.push_back( plasma );
338 cout <<
" quantize ..." << endl;
340 example.label(
"Quantize" );
342 images.push_back( example );
344 cout <<
" quantum operator ..." << endl;
346 example.label(
"Quantum Operator\nRed * 0.4" );
347 example.quantumOperator( RedChannel,MultiplyEvaluateOperator,0.40 );
348 images.push_back( example );
350 cout <<
" raise ..." << endl;
352 example.label(
"Raise" );
354 images.push_back( example );
356 cout <<
" reduce noise ..." << endl;
358 example.label(
"Reduce Noise" );
359 example.reduceNoise( 1.0 );
360 images.push_back( example );
362 cout <<
" resize ..." << endl;
364 example.label(
"Resize" );
365 example.zoom(
"50%" );
366 images.push_back( example );
368 cout <<
" roll ..." << endl;
370 example.label(
"Roll" );
371 example.roll(
"+20+10" );
372 images.push_back( example );
374 cout <<
" rotate ..." << endl;
376 example.label(
"Rotate" );
377 example.rotate( 45 );
378 example.transparent(
"black" );
379 images.push_back( example );
381 cout <<
" scale ..." << endl;
383 example.label(
"Scale" );
384 example.scale(
"60%" );
385 images.push_back( example );
387 cout <<
" segment ..." << endl;
389 example.label(
"Segment" );
390 example.segment( 0.5, 0.25 );
391 images.push_back( example );
393 cout <<
" shade ..." << endl;
395 example.label(
"Shade" );
396 example.shade( 30, 30,
false );
397 images.push_back( example );
399 cout <<
" sharpen ..." << endl;
401 example.label(
"Sharpen");
402 example.sharpen( 0.0, 1.0 );
403 images.push_back( example );
405 cout <<
" shave ..." << endl;
407 example.label(
"Shave");
409 images.push_back( example );
411 cout <<
" shear ..." << endl;
413 example.label(
"Shear" );
414 example.shear( 45, 45 );
415 example.transparent(
"black" );
416 images.push_back( example );
418 cout <<
" spread ..." << endl;
420 example.label(
"Spread" );
422 images.push_back( example );
424 cout <<
" solarize ..." << endl;
426 example.label(
"Solarize" );
428 images.push_back( example );
430 cout <<
" swirl ..." << endl;
432 example.backgroundColor(
"#000000FF" );
433 example.label(
"Swirl" );
435 images.push_back( example );
437 cout <<
" threshold ..." << endl;
439 example.label(
"Threshold" );
440 example.threshold( QuantumRange/2.0 );
441 images.push_back( example );
443 cout <<
" threshold random ..." << endl;
445 example.label(
"Random\nThreshold" );
446 example.randomThreshold(
Geometry((
size_t) (0.3*QuantumRange),
447 (
size_t) (0.85*QuantumRange)) );
448 images.push_back( example );
450 cout <<
" unsharp mask ..." << endl;
452 example.label(
"Unsharp Mask" );
454 example.unsharpmask( 0.0, 1.0, 1.0, 0.05);
455 images.push_back( example );
457 cout <<
" wave ..." << endl;
459 example.label(
"Wave" );
460 example.matte(
true );
461 example.backgroundColor(
"#000000FF" );
462 example.wave( 25, 150 );
463 images.push_back( example );
468 cout <<
"Montage images..." << endl;
473 montageOpts.geometry(
"130x194+10+5>" );
474 montageOpts.gravity( CenterGravity );
475 montageOpts.borderColor(
"green" );
476 montageOpts.borderWidth( 1 );
477 montageOpts.tile(
"7x4" );
478 montageOpts.compose( OverCompositeOp );
479 montageOpts.backgroundColor(
"#ffffff" );
480 montageOpts.pointSize( 18 );
481 montageOpts.fillColor(
"#600" );
482 montageOpts.strokeColor(
Color() );
483 montageOpts.compose(OverCompositeOp);
484 montageOpts.fileName(
"Magick++ Demo" );
485 montageImages( &montage, images.begin(), images.end(), montageOpts );
488 Image& montage_image = montage.front();
491 cout <<
"Adding logo image ..." << endl;
492 Image logo(
"logo:" );
496 Geometry placement(0,0,(montage_image.columns()/2)-(logo.columns()/2),0);
497 montage_image.composite( logo, placement, OverCompositeOp );
500 for_each( montage.begin(), montage.end(),
depthImage(8) );
501 for_each( montage.begin(), montage.end(),
matteImage(
false ) );
504 cout <<
"Writing image \"demo_out.miff\" ..." << endl;
505 writeImages(montage.begin(),montage.end(),
"demo_out_%d.miff");
512 catch( exception &error_ )
514 cout <<
"Caught exception: " << error_.what() << endl;