blob: a6db18708621170edfb49bdbb4e348e689a210f4 [file] [log] [blame]
cristy3ed852e2009-09-05 21:47:34 +00001// This may look like C code, but it is really -*- C++ -*-
2//
3// Copyright Bob Friesenhahn, 1999, 2000, 2002, 2003
4//
5// GD/PerlMagick example using Magick++ methods.
6//
7// Concept and algorithms lifted from PerlMagick demo script
8//
9
10#include <Magick++.h>
11#include <string>
12#include <iostream>
13
14using namespace std;
15
16using namespace Magick;
17
18int main( int /*argc*/, char ** argv)
19{
20
21 // Initialize ImageMagick install location for Windows
22 InitializeMagick(*argv);
23
24 try {
25
26 string srcdir("");
27 if(getenv("SRCDIR") != 0)
28 srcdir = getenv("SRCDIR");
29
30 //
31 // Create a 300x300 white canvas.
32 //
33 Image image( "300x300", "white" );
34
35 //
36 // Draw texture-filled polygon
37 //
38 // Polygon list
dirk84f7dd52014-12-16 10:35:27 +000039 std::vector<Coordinate> poly_coord;
cristy3ed852e2009-09-05 21:47:34 +000040 poly_coord.push_back( Coordinate(30,30) );
41 poly_coord.push_back( Coordinate(100,10) );
42 poly_coord.push_back( Coordinate(190,290) );
43 poly_coord.push_back( Coordinate(30,290) );
44
45 Image texture( srcdir + "tile.miff" );
cristye86f2f32014-01-08 17:30:27 +000046 image.fillPattern( texture );
cristy3ed852e2009-09-05 21:47:34 +000047 image.draw( DrawablePolygon( poly_coord ) );
48 texture.isValid( false );
cristye86f2f32014-01-08 17:30:27 +000049 image.fillPattern( texture ); // Unset texture
cristy3ed852e2009-09-05 21:47:34 +000050
51 //
52 // Draw filled ellipse with black border, and red fill color
53 //
54 image.strokeColor( "black" );
55 image.fillColor( "red" );
56 image.strokeWidth( 5 );
57 image.draw( DrawableEllipse( 100,100, 50,75, 0,360 ) );
58 image.fillColor( Color() ); // Clear out fill color
59
60 //
61 // Draw ellipse, and polygon, with black stroke, strokeWidth of 5
62 //
63 image.strokeColor( "black" );
64 image.strokeWidth( 5 );
dirk84f7dd52014-12-16 10:35:27 +000065 vector<Drawable> drawlist;
cristy3ed852e2009-09-05 21:47:34 +000066
67 // Add polygon to list
68 poly_coord.clear();
69 poly_coord.push_back( Coordinate(30,30) );
70 poly_coord.push_back( Coordinate(100,10) );
71 poly_coord.push_back( Coordinate(190,290) );
72 poly_coord.push_back( Coordinate(30,290) );
73 drawlist.push_back( DrawablePolygon( poly_coord ) );
74 image.draw( drawlist );
75
76 //
77 // Floodfill object with blue
78 //
cristyf430c8b2011-02-03 02:08:56 +000079 image.colorFuzz( 0.5*QuantumRange );
cristy3ed852e2009-09-05 21:47:34 +000080 image.floodFillColor( "+132+62", "blue" );
81
82 //
83 // Draw text
84 //
85 image.strokeColor(Color());
86 image.fillColor( "red" );
87 image.fontPointsize( 18 );
88 image.annotate( "Hello world!", "+150+20" );
89
90 image.fillColor( "blue" );
91 image.fontPointsize( 14 );
92 image.annotate( "Goodbye cruel world!", "+150+38" );
93
94 image.fillColor( "black" );
95 image.fontPointsize( 14 );
96 image.annotate( "I'm climbing the wall!", "+280+120",
97 NorthWestGravity, 90.0 );
98 //image.display();
99 //
100 // Write image.
101 //
102
103 cout << "Writing image \"shapes_out.miff\" ..." << endl;
cristy4a16cd52010-01-05 14:04:01 +0000104 image.depth( 8 );
cristy3ed852e2009-09-05 21:47:34 +0000105 image.compressType( RLECompression );
106 image.write( "shapes_out.miff" );
107
108 // cout << "Display image..." << endl;
109 // image.display( );
110
111 }
112 catch( exception &error_ )
113 {
114 cout << "Caught exception: " << error_.what() << endl;
115 return 1;
116 }
117
118 return 0;
119}