• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
main(int,char ** argv)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