13ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// This may look like C code, but it is really -*- C++ -*- 23ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// 33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// Copyright Bob Friesenhahn, 1999, 2000, 2003 439930a02337b58a07e01e4b3fc82fe966af25cfddirk// Copyright Dirk Lemstra 2014 53ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// 639930a02337b58a07e01e4b3fc82fe966af25cfddirk// Test STL readImages and writeImages functions and test 739930a02337b58a07e01e4b3fc82fe966af25cfddirk// image format when reading/writing. 83ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// 93ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include <Magick++.h> 113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include <string> 123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include <iostream> 133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include <list> 143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include <vector> 153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 163ed852eea50f9d4cd633efb8c2b054b8e33c253cristyusing namespace std; 173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 183ed852eea50f9d4cd633efb8c2b054b8e33c253cristyusing namespace Magick; 193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2039930a02337b58a07e01e4b3fc82fe966af25cfddirkint main(int,char ** argv) 213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 2239930a02337b58a07e01e4b3fc82fe966af25cfddirk int 2339930a02337b58a07e01e4b3fc82fe966af25cfddirk failures=0; 243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2539930a02337b58a07e01e4b3fc82fe966af25cfddirk string 2639930a02337b58a07e01e4b3fc82fe966af25cfddirk srcdir(""); 273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2939930a02337b58a07e01e4b3fc82fe966af25cfddirk // Initialize ImageMagick install location for Windows 3039930a02337b58a07e01e4b3fc82fe966af25cfddirk InitializeMagick(*argv); 313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3239930a02337b58a07e01e4b3fc82fe966af25cfddirk try 3339930a02337b58a07e01e4b3fc82fe966af25cfddirk { 3439930a02337b58a07e01e4b3fc82fe966af25cfddirk if (getenv("SRCDIR") != 0) 3539930a02337b58a07e01e4b3fc82fe966af25cfddirk srcdir=getenv("SRCDIR"); 363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // 383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Test readImages and writeImages 393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // 403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list<Image> first; 4139930a02337b58a07e01e4b3fc82fe966af25cfddirk readImages(&first,srcdir + "test_image_anim.miff"); 4239930a02337b58a07e01e4b3fc82fe966af25cfddirk 4339930a02337b58a07e01e4b3fc82fe966af25cfddirk if (first.size() != 6) 443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4539930a02337b58a07e01e4b3fc82fe966af25cfddirk ++failures; 4639930a02337b58a07e01e4b3fc82fe966af25cfddirk cout << "Line: " << __LINE__ 4739930a02337b58a07e01e4b3fc82fe966af25cfddirk << " Read images failed, number of frames is " 4839930a02337b58a07e01e4b3fc82fe966af25cfddirk << first.size() 4939930a02337b58a07e01e4b3fc82fe966af25cfddirk << " rather than 6 as expected." << endl; 503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5139930a02337b58a07e01e4b3fc82fe966af25cfddirk 5239930a02337b58a07e01e4b3fc82fe966af25cfddirk writeImages(first.begin(),first.end(),"testmagick_anim_out.miff"); 5339930a02337b58a07e01e4b3fc82fe966af25cfddirk 543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list<Image> second; 5539930a02337b58a07e01e4b3fc82fe966af25cfddirk readImages(&second,"testmagick_anim_out.miff"); 5639930a02337b58a07e01e4b3fc82fe966af25cfddirk 573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list<Image>::iterator firstIter = first.begin(); 583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list<Image>::iterator secondIter = second.begin(); 5939930a02337b58a07e01e4b3fc82fe966af25cfddirk while (firstIter != first.end() && secondIter != second.end()) 6039930a02337b58a07e01e4b3fc82fe966af25cfddirk { 6139930a02337b58a07e01e4b3fc82fe966af25cfddirk if (firstIter->scene() != secondIter->scene()) 6239930a02337b58a07e01e4b3fc82fe966af25cfddirk { 6339930a02337b58a07e01e4b3fc82fe966af25cfddirk ++failures; 6439930a02337b58a07e01e4b3fc82fe966af25cfddirk cout << "Line: " << __LINE__ 6539930a02337b58a07e01e4b3fc82fe966af25cfddirk << " Image scene: " << secondIter->scene() 6639930a02337b58a07e01e4b3fc82fe966af25cfddirk << " is not equal to original " 6739930a02337b58a07e01e4b3fc82fe966af25cfddirk << firstIter->scene() 6839930a02337b58a07e01e4b3fc82fe966af25cfddirk << endl; 6939930a02337b58a07e01e4b3fc82fe966af25cfddirk } 7039930a02337b58a07e01e4b3fc82fe966af25cfddirk 7139930a02337b58a07e01e4b3fc82fe966af25cfddirk if (firstIter->rows() != secondIter->rows()) 7239930a02337b58a07e01e4b3fc82fe966af25cfddirk { 7339930a02337b58a07e01e4b3fc82fe966af25cfddirk ++failures; 7439930a02337b58a07e01e4b3fc82fe966af25cfddirk cout << "Line: " << __LINE__ 7539930a02337b58a07e01e4b3fc82fe966af25cfddirk << " Image rows " << secondIter->rows() 7639930a02337b58a07e01e4b3fc82fe966af25cfddirk << " are not equal to original " 7739930a02337b58a07e01e4b3fc82fe966af25cfddirk << firstIter->rows() 7839930a02337b58a07e01e4b3fc82fe966af25cfddirk << endl; 7939930a02337b58a07e01e4b3fc82fe966af25cfddirk } 8039930a02337b58a07e01e4b3fc82fe966af25cfddirk 8139930a02337b58a07e01e4b3fc82fe966af25cfddirk if (firstIter->columns() != secondIter->columns()) 8239930a02337b58a07e01e4b3fc82fe966af25cfddirk { 8339930a02337b58a07e01e4b3fc82fe966af25cfddirk ++failures; 8439930a02337b58a07e01e4b3fc82fe966af25cfddirk cout << "Line: " << __LINE__ 8539930a02337b58a07e01e4b3fc82fe966af25cfddirk << " Image columns " << secondIter->columns() 8639930a02337b58a07e01e4b3fc82fe966af25cfddirk << " are not equal to original " 8739930a02337b58a07e01e4b3fc82fe966af25cfddirk << firstIter->rows() 8839930a02337b58a07e01e4b3fc82fe966af25cfddirk << endl; 8939930a02337b58a07e01e4b3fc82fe966af25cfddirk } 9039930a02337b58a07e01e4b3fc82fe966af25cfddirk 9139930a02337b58a07e01e4b3fc82fe966af25cfddirk firstIter++; 9239930a02337b58a07e01e4b3fc82fe966af25cfddirk secondIter++; 9339930a02337b58a07e01e4b3fc82fe966af25cfddirk } 9439930a02337b58a07e01e4b3fc82fe966af25cfddirk 9539930a02337b58a07e01e4b3fc82fe966af25cfddirk Image third(*first.begin()); 9639930a02337b58a07e01e4b3fc82fe966af25cfddirk third.write("testmagick_anim_out"); 9739930a02337b58a07e01e4b3fc82fe966af25cfddirk 9839930a02337b58a07e01e4b3fc82fe966af25cfddirk Image fourth; 9939930a02337b58a07e01e4b3fc82fe966af25cfddirk fourth.read("testmagick_anim_out"); 10039930a02337b58a07e01e4b3fc82fe966af25cfddirk 10139930a02337b58a07e01e4b3fc82fe966af25cfddirk if (fourth.magick() != "MIFF") 1023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10339930a02337b58a07e01e4b3fc82fe966af25cfddirk ++failures; 10439930a02337b58a07e01e4b3fc82fe966af25cfddirk cout << "Line: " << __LINE__ 10539930a02337b58a07e01e4b3fc82fe966af25cfddirk << " Image magick: " << fourth.magick() 10639930a02337b58a07e01e4b3fc82fe966af25cfddirk << " is not equal to MIFF" 10739930a02337b58a07e01e4b3fc82fe966af25cfddirk << endl; 10839930a02337b58a07e01e4b3fc82fe966af25cfddirk } 10939930a02337b58a07e01e4b3fc82fe966af25cfddirk 11039930a02337b58a07e01e4b3fc82fe966af25cfddirk third.write("testmagick_anim_out.ico"); 11139930a02337b58a07e01e4b3fc82fe966af25cfddirk fourth.read("testmagick_anim_out.ico"); 1123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11339930a02337b58a07e01e4b3fc82fe966af25cfddirk if (fourth.magick() != "ICO") 11439930a02337b58a07e01e4b3fc82fe966af25cfddirk { 11539930a02337b58a07e01e4b3fc82fe966af25cfddirk ++failures; 11639930a02337b58a07e01e4b3fc82fe966af25cfddirk cout << "Line: " << __LINE__ 11739930a02337b58a07e01e4b3fc82fe966af25cfddirk << " Image magick: " << fourth.magick() 11839930a02337b58a07e01e4b3fc82fe966af25cfddirk << " is not equal to ICO" 11939930a02337b58a07e01e4b3fc82fe966af25cfddirk << endl; 1203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12239930a02337b58a07e01e4b3fc82fe966af25cfddirk third.magick("BMP"); 12339930a02337b58a07e01e4b3fc82fe966af25cfddirk third.write("testmagick_anim_out.ico"); 12439930a02337b58a07e01e4b3fc82fe966af25cfddirk fourth.read("testmagick_anim_out.ico"); 12539930a02337b58a07e01e4b3fc82fe966af25cfddirk 12639930a02337b58a07e01e4b3fc82fe966af25cfddirk if (fourth.magick() != "BMP") 12739930a02337b58a07e01e4b3fc82fe966af25cfddirk { 12839930a02337b58a07e01e4b3fc82fe966af25cfddirk ++failures; 12939930a02337b58a07e01e4b3fc82fe966af25cfddirk cout << "Line: " << __LINE__ 13039930a02337b58a07e01e4b3fc82fe966af25cfddirk << " Image magick: " << fourth.magick() 13139930a02337b58a07e01e4b3fc82fe966af25cfddirk << " is not equal to BMP" 13239930a02337b58a07e01e4b3fc82fe966af25cfddirk << endl; 13339930a02337b58a07e01e4b3fc82fe966af25cfddirk } 13439930a02337b58a07e01e4b3fc82fe966af25cfddirk 13539930a02337b58a07e01e4b3fc82fe966af25cfddirk third.write("PDB:testmagick_anim_out.ico"); 13639930a02337b58a07e01e4b3fc82fe966af25cfddirk fourth.read("testmagick_anim_out.ico"); 13739930a02337b58a07e01e4b3fc82fe966af25cfddirk 13839930a02337b58a07e01e4b3fc82fe966af25cfddirk if (fourth.magick() != "PDB") 13939930a02337b58a07e01e4b3fc82fe966af25cfddirk { 14039930a02337b58a07e01e4b3fc82fe966af25cfddirk ++failures; 14139930a02337b58a07e01e4b3fc82fe966af25cfddirk cout << "Line: " << __LINE__ 14239930a02337b58a07e01e4b3fc82fe966af25cfddirk << " Image magick: " << fourth.magick() 14339930a02337b58a07e01e4b3fc82fe966af25cfddirk << " is not equal to PDB" 14439930a02337b58a07e01e4b3fc82fe966af25cfddirk << endl; 14539930a02337b58a07e01e4b3fc82fe966af25cfddirk } 14649ccbc806b20f4892e6c8588768617afdfcee3cddirk 14749ccbc806b20f4892e6c8588768617afdfcee3cddirk third.magick(""); 14849ccbc806b20f4892e6c8588768617afdfcee3cddirk third.write("testmagick_anim_out.ico"); 14949ccbc806b20f4892e6c8588768617afdfcee3cddirk fourth.read("testmagick_anim_out.ico"); 15049ccbc806b20f4892e6c8588768617afdfcee3cddirk 15149ccbc806b20f4892e6c8588768617afdfcee3cddirk if (fourth.magick() != "ICO") 15249ccbc806b20f4892e6c8588768617afdfcee3cddirk { 15349ccbc806b20f4892e6c8588768617afdfcee3cddirk ++failures; 15449ccbc806b20f4892e6c8588768617afdfcee3cddirk cout << "Line: " << __LINE__ 15549ccbc806b20f4892e6c8588768617afdfcee3cddirk << " Image magick: " << fourth.magick() 15649ccbc806b20f4892e6c8588768617afdfcee3cddirk << " is not equal to ICO" 15749ccbc806b20f4892e6c8588768617afdfcee3cddirk << endl; 15849ccbc806b20f4892e6c8588768617afdfcee3cddirk } 15939930a02337b58a07e01e4b3fc82fe966af25cfddirk } 16039930a02337b58a07e01e4b3fc82fe966af25cfddirk catch(Exception &error_) 1613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cout << "Caught exception: " << error_.what() << endl; 1633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return 1; 1643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 16539930a02337b58a07e01e4b3fc82fe966af25cfddirk catch(exception &error_) 1663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cout << "Caught exception: " << error_.what() << endl; 1683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return 1; 1693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17139930a02337b58a07e01e4b3fc82fe966af25cfddirk if (failures) 1723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cout << failures << " failures" << endl; 1743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return 1; 1753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 17639930a02337b58a07e01e4b3fc82fe966af25cfddirk 1773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return 0; 1783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 1793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 180