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 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