montageImages.cpp revision 3ed852eea50f9d4cd633efb8c2b054b8e33c253
13ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// This may look like C code, but it is really -*- C++ -*- 23ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// 33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// Copyright Bob Friesenhahn, 1999, 2000, 2002, 2003 43ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// 53ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// Test STL montageImages function 63ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// 73ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 83ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include <Magick++.h> 93ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include <string> 103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include <iostream> 113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include <list> 123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include <vector> 133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 143ed852eea50f9d4cd633efb8c2b054b8e33c253cristyusing namespace std; 153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 163ed852eea50f9d4cd633efb8c2b054b8e33c253cristyusing namespace Magick; 173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 183ed852eea50f9d4cd633efb8c2b054b8e33c253cristyint main( int /*argc*/, char ** /*argv*/) 193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Initialize ImageMagick install location for Windows 223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // InitializeMagick(*argv); 233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy InitializeMagick(""); 243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int failures=0; 263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy try { 283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy string srcdir(""); 303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if(getenv("SRCDIR") != 0) 313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy srcdir = getenv("SRCDIR"); 323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // 343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Test montageImages 353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // 363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list<Image> imageList; 383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy readImages( &imageList, srcdir + "test_image_anim.miff" ); 393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy vector<Image> montage; 413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MontageFramed montageOpts; 423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Default montage 443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy montageImages( &montage, imageList.begin(), imageList.end(), montageOpts ); 453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Geometry targetGeometry(128, 126 ); 483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ( montage[0].montageGeometry() != targetGeometry ) 493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ++failures; 513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cout << "Line: " << __LINE__ 523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy << " Montage geometry (" 533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy << string(montage[0].montageGeometry()) 543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy << ") is incorrect (expected " 553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy << string(targetGeometry) 563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy << ")" 573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy << endl; 583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ( montage[0].columns() != 768 || montage[0].rows() != 504 ) 623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ++failures; 643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cout << "Line: " << __LINE__ 653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy << " Montage columns/rows (" 663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy << montage[0].columns() << "x" 673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy << montage[0].rows() 683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy << ") incorrect. (expected 768x504)" << endl; 693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Montage with options set 723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy montage.clear(); 733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy montageOpts.borderColor( "green" ); 743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy montageOpts.borderWidth( 1 ); 753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy montageOpts.compose( OverCompositeOp ); 763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy montageOpts.fileName( "Montage" ); 773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy montageOpts.frameGeometry( "6x6+3+3" ); 783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy montageOpts.geometry("50x50+2+2>"); 793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy montageOpts.gravity( CenterGravity ); 803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy montageOpts.penColor( "yellow" ); 813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy montageOpts.shadow( true ); 823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy montageOpts.texture( "granite:" ); 833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy montageOpts.tile("2x1"); 843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy montageImages( &montage, imageList.begin(), imageList.end(), montageOpts ); 853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ( montage.size() != 3 ) 873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ++failures; 893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cout << "Line: " << __LINE__ 903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy << " Montage images failed, number of montage frames is " 913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy << montage.size() 923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy << " rather than 3 as expected." << endl; 933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Geometry targetGeometry( 66, 70 ); 973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ( montage[0].montageGeometry() != targetGeometry ) 983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ++failures; 1003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cout << "Line: " << __LINE__ 1013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy << " Montage geometry (" 1023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy << string(montage[0].montageGeometry()) 1033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy << ") is incorrect (expected " 1043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy << string(targetGeometry) 1053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy << ")." 1063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy << endl; 1073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ( montage[0].columns() != 136 || montage[0].rows() != 70 ) 1113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ++failures; 1133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cout << "Line: " << __LINE__ 1143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy << " Montage columns/rows (" 1153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy << montage[0].columns() << "x" 1163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy << montage[0].rows() 1173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy << ") incorrect. (expected 136x70)" << endl; 1183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy catch( Exception &error_ ) 1223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cout << "Caught exception: " << error_.what() << endl; 1243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return 1; 1253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy catch( exception &error_ ) 1273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cout << "Caught exception: " << error_.what() << endl; 1293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return 1; 1303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ( failures ) 1333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cout << failures << " failures" << endl; 1353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return 1; 1363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return 0; 1393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 1403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 141