Home | History | Annotate | Download | only in tests
      1 // This may look like C code, but it is really -*- C++ -*-
      2 //
      3 // Copyright Bob Friesenhahn, 1999, 2000, 2002, 2003
      4 //
      5 // Test STL montageImages function
      6 //
      7 
      8 #include <Magick++.h>
      9 #include <string>
     10 #include <iostream>
     11 #include <list>
     12 #include <vector>
     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   InitializeMagick("");
     24 
     25   int failures=0;
     26 
     27   try {
     28 
     29     string srcdir("");
     30     if(getenv("SRCDIR") != 0)
     31       srcdir = getenv("SRCDIR");
     32 
     33     //
     34     // Test montageImages
     35     //
     36 
     37     list<Image> imageList;
     38     readImages( &imageList, srcdir + "test_image_anim.miff" );
     39 
     40     vector<Image> montage;
     41     MontageFramed montageOpts;
     42 
     43     // Default montage
     44     montageImages( &montage, imageList.begin(), imageList.end(), montageOpts );
     45 
     46     {
     47       Geometry targetGeometry(128, 126 );
     48       if ( montage[0].montageGeometry() != targetGeometry )
     49         {
     50           ++failures;
     51           cout << "Line: " << __LINE__
     52                << "  Montage geometry ("
     53                << string(montage[0].montageGeometry())
     54                << ") is incorrect (expected "
     55                << string(targetGeometry)
     56                << ")"
     57                << endl;
     58         }
     59     }
     60 
     61     if ( montage[0].columns() != 768 || montage[0].rows() != 504 )
     62       {
     63 	++failures;
     64 	cout << "Line: " << __LINE__
     65 	     << "  Montage columns/rows ("
     66 	     << montage[0].columns() << "x"
     67 	     << montage[0].rows()
     68 	     << ") incorrect. (expected 768x504)" << endl;
     69       }
     70 
     71     // Montage with options set
     72     montage.clear();
     73     montageOpts.borderColor( "green" );
     74     montageOpts.borderWidth( 1 );
     75     montageOpts.fileName( "Montage" );
     76     montageOpts.frameGeometry( "6x6+3+3" );
     77     montageOpts.geometry("50x50+2+2>");
     78     montageOpts.gravity( CenterGravity );
     79     montageOpts.strokeColor( "yellow" );
     80     montageOpts.shadow( true );
     81     montageOpts.texture( "granite:" );
     82     montageOpts.tile("2x1");
     83     montageImages( &montage, imageList.begin(), imageList.end(), montageOpts );
     84 
     85     if ( montage.size() != 3 )
     86       {
     87 	++failures;
     88 	cout << "Line: " << __LINE__
     89 	     << "  Montage images failed, number of montage frames is "
     90 	     << montage.size()
     91 	     << " rather than 3 as expected." << endl;
     92       }
     93 
     94     {
     95       Geometry targetGeometry( 66, 70 );
     96       if ( montage[0].montageGeometry() != targetGeometry )
     97         {
     98           ++failures;
     99           cout << "Line: " << __LINE__
    100                << "  Montage geometry ("
    101                << string(montage[0].montageGeometry())
    102                << ") is incorrect (expected "
    103                << string(targetGeometry)
    104                << ")."
    105                << endl;
    106         }
    107     }
    108 
    109     if ( montage[0].columns() != 136 || montage[0].rows() != 70 )
    110       {
    111 	++failures;
    112 	cout << "Line: " << __LINE__
    113 	     << "  Montage columns/rows ("
    114 	     << montage[0].columns() << "x"
    115 	     << montage[0].rows()
    116 	     << ") incorrect. (expected 136x70)" << endl;
    117       }
    118   }
    119 
    120   catch( Exception &error_ )
    121     {
    122       cout << "Caught exception: " << error_.what() << endl;
    123       return 1;
    124     }
    125   catch( exception &error_ )
    126     {
    127       cout << "Caught exception: " << error_.what() << endl;
    128       return 1;
    129     }
    130 
    131   if ( failures )
    132     {
    133       cout << failures << " failures" << endl;
    134       return 1;
    135     }
    136 
    137   return 0;
    138 }
    139 
    140