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, 2003
      4 // Copyright Dirk Lemstra 2014
      5 //
      6 // Test STL readImages and writeImages functions and test
      7 // image format when reading/writing.
      8 //
      9 
     10 #include <Magick++.h>
     11 #include <string>
     12 #include <iostream>
     13 #include <list>
     14 #include <vector>
     15 
     16 using namespace std;
     17 
     18 using namespace Magick;
     19 
     20 int main(int,char ** argv)
     21 {
     22   int
     23     failures=0;
     24 
     25   string
     26     srcdir("");
     27 
     28 
     29   // Initialize ImageMagick install location for Windows
     30   InitializeMagick(*argv);
     31 
     32   try
     33   {
     34     if (getenv("SRCDIR") != 0)
     35       srcdir=getenv("SRCDIR");
     36 
     37     //
     38     // Test readImages and writeImages
     39     //
     40     list<Image> first;
     41     readImages(&first,srcdir + "test_image_anim.miff");
     42 
     43     if (first.size() != 6)
     44       {
     45         ++failures;
     46         cout << "Line: " << __LINE__
     47           << "  Read images failed, number of frames is "
     48           << first.size()
     49           << " rather than 6 as expected." << endl;
     50       }
     51 
     52     writeImages(first.begin(),first.end(),"testmagick_anim_out.miff");
     53 
     54     list<Image> second;
     55     readImages(&second,"testmagick_anim_out.miff");
     56 
     57     list<Image>::iterator firstIter = first.begin();
     58     list<Image>::iterator secondIter = second.begin();
     59     while (firstIter != first.end() && secondIter != second.end())
     60     {
     61       if (firstIter->scene() != secondIter->scene())
     62         {
     63           ++failures;
     64           cout << "Line: " << __LINE__
     65             << "  Image scene: " << secondIter->scene()
     66             << " is not equal to original "
     67             << firstIter->scene()
     68             << endl;
     69         }
     70 
     71       if (firstIter->rows() != secondIter->rows())
     72         {
     73           ++failures;
     74           cout << "Line: " << __LINE__
     75             << "  Image rows " << secondIter->rows()
     76             << " are not equal to original "
     77             << firstIter->rows()
     78             << endl;
     79         }
     80 
     81       if (firstIter->columns() != secondIter->columns())
     82         {
     83           ++failures;
     84           cout << "Line: " << __LINE__
     85             << "  Image columns " << secondIter->columns()
     86             << " are not equal to original "
     87             << firstIter->rows()
     88             << endl;
     89         }
     90 
     91       firstIter++;
     92       secondIter++;
     93     }
     94 
     95     Image third(*first.begin());
     96     third.write("testmagick_anim_out");
     97 
     98     Image fourth;
     99     fourth.read("testmagick_anim_out");
    100 
    101     if (fourth.magick() != "MIFF")
    102       {
    103         ++failures;
    104         cout << "Line: " << __LINE__
    105           << "  Image magick: " << fourth.magick()
    106           << " is not equal to MIFF"
    107           << endl;
    108       }
    109 
    110     third.write("testmagick_anim_out.ico");
    111     fourth.read("testmagick_anim_out.ico");
    112 
    113     if (fourth.magick() != "ICO")
    114       {
    115         ++failures;
    116         cout << "Line: " << __LINE__
    117           << "  Image magick: " << fourth.magick()
    118           << " is not equal to ICO"
    119           << endl;
    120       }
    121 
    122     third.magick("BMP");
    123     third.write("testmagick_anim_out.ico");
    124     fourth.read("testmagick_anim_out.ico");
    125 
    126     if (fourth.magick() != "BMP")
    127       {
    128         ++failures;
    129         cout << "Line: " << __LINE__
    130           << "  Image magick: " << fourth.magick()
    131           << " is not equal to BMP"
    132           << endl;
    133       }
    134 
    135     third.write("PDB:testmagick_anim_out.ico");
    136     fourth.read("testmagick_anim_out.ico");
    137 
    138     if (fourth.magick() != "PDB")
    139       {
    140         ++failures;
    141         cout << "Line: " << __LINE__
    142           << "  Image magick: " << fourth.magick()
    143           << " is not equal to PDB"
    144           << endl;
    145       }
    146 
    147     third.magick("");
    148     third.write("testmagick_anim_out.ico");
    149     fourth.read("testmagick_anim_out.ico");
    150 
    151     if (fourth.magick() != "ICO")
    152       {
    153         ++failures;
    154         cout << "Line: " << __LINE__
    155           << "  Image magick: " << fourth.magick()
    156           << " is not equal to ICO"
    157           << endl;
    158       }
    159   }
    160   catch(Exception &error_)
    161     {
    162       cout << "Caught exception: " << error_.what() << endl;
    163       return 1;
    164     }
    165   catch(exception &error_)
    166     {
    167       cout << "Caught exception: " << error_.what() << endl;
    168       return 1;
    169     }
    170 
    171   if (failures)
    172     {
    173       cout << failures << " failures" << endl;
    174       return 1;
    175     }
    176 
    177   return 0;
    178 }
    179 
    180