Home | History | Annotate | Download | only in demo
      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