• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // 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 
14 using namespace std;
15 
16 using namespace Magick;
17 
main(int,char ** argv)18 int 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
39     std::vector<Coordinate> poly_coord;
40     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" );
46     image.fillPattern( texture );
47     image.draw( DrawablePolygon( poly_coord ) );
48     texture.isValid( false );
49     image.fillPattern( texture );  // Unset texture
50 
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 );
65     vector<Drawable> drawlist;
66 
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     //
79     image.colorFuzz( 0.5*QuantumRange );
80     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;
104     image.depth( 8 );
105     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 }
120