Magick++  7.1.2-29
Convert, Edit, Or Compose Bitmap Images
readWriteImages.cpp
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  MagickPlusPlusGenesis genesis(*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