Milena (Olena)  User documentation 2.0a Id
 All Classes Namespaces Functions Variables Typedefs Enumerator Groups Pages
save.cc
1 // Copyright (C) 2009, 2010 EPITA Research and Development Laboratory
2 // (LRDE)
3 //
4 // This file is part of Olena.
5 //
6 // Olena is free software: you can redistribute it and/or modify it under
7 // the terms of the GNU General Public License as published by the Free
8 // Software Foundation, version 2 of the License.
9 //
10 // Olena is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 // General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with Olena. If not, see <http://www.gnu.org/licenses/>.
17 //
18 // As a special exception, you may use this file as part of a free
19 // software project without restriction. Specifically, if other files
20 // instantiate templates or use macros or inline functions from this
21 // file, or you compile this file and link it with other files to produce
22 // an executable, this file does not by itself cause the resulting
23 // executable to be covered by the GNU General Public License. This
24 // exception does not however invalidate any other reasons why the
25 // executable file might be covered by the GNU General Public License.
26 
27 #include <mln/core/image/image2d.hh>
28 
29 #include <mln/data/compare.hh>
30 
31 #include <mln/io/magick/load.hh>
32 #include <mln/io/magick/save.hh>
33 
34 #include <mln/io/pbm/load.hh>
35 #include <mln/io/pbm/save.hh>
36 
37 #include <mln/io/pgm/load.hh>
38 #include <mln/io/pgm/save.hh>
39 
40 #include <mln/io/ppm/load.hh>
41 #include <mln/io/ppm/save.hh>
42 
43 #include "tests/data.hh"
44 
45 
46 using namespace mln;
47 
48 
49 template <typename T>
51 test(const image2d<T>& lena_mln, const std::string& temp_filename)
52 {
53  point2d p(0,0);
54 
55  T c = lena_mln(p);
56 
57  io::magick::save(lena_mln, temp_filename);
58  image2d<T> lena_im;
59  io::magick::load(lena_im, temp_filename);
60 
61  mln_assertion(lena_im(p) == c);
62  mln_assertion(lena_im.domain() == lena_mln.domain());
63  mln_assertion(lena_im == lena_mln);
64 
65  return lena_im;
66 }
67 
68 
69 int main(int /* argc */, char* argv[])
70 {
71  using namespace mln;
72 
73  /* From http://www.graphicsmagick.org/Magick++/Image.html:
74 
75  The InitializeMagick() function MUST be invoked before
76  constructing any Magick++ objects. This used to be optional,
77  but now it is absolutely required. This function initalizes
78  semaphores and configuration information necessary for the
79  software to work correctly. Failing to invoke
80  InitializeMagick() is likely to lead to a program crash or
81  thrown assertion. If the program resides in the same directory
82  as the GraphicsMagick files, then argv[0] may be passed as an
83  argument so that GraphicsMagick knows where its files reside,
84  otherwise NULL may be passed and GraphicsMagick will try to use
85  other means (if necessary). */
86  Magick::InitializeMagick(*argv);
87 
88  point2d p(0,0);
89 
90  // Grayscale values (PBM -> PBM -> PBM).
91  {
92  typedef image2d<bool> I;
93  I lena_mln;
94  io::pbm::load(lena_mln, MLN_IMG_DIR "/tiny.pbm");
95  I lena_im = ::test(lena_mln, "save-tiny-temp.pbm");
96  io::pbm::save(lena_im, "save-tiny.pbm");
97  }
98 
99  // Grayscale values (PGM -> PGM -> PGM).
100  {
101  typedef image2d<value::int_u8> I;
102  I lena_mln;
103  io::pgm::load(lena_mln, MLN_IMG_DIR "/tiny.pgm");
104  I lena_im = ::test(lena_mln, "save-tiny-temp.pgm");
105  io::pgm::save(lena_im, "save-tiny.pgm");
106  }
107 
108  // Color values (PPM -> PNG -> PPM).
109  {
110  typedef image2d<value::rgb8> I;
111  I lena_mln;
112  io::ppm::load(lena_mln, MLN_IMG_DIR "/tiny.ppm");
113  I lena_im = ::test(lena_mln, "save-tiny-temp.png");
114  io::ppm::save(lena_im, "save-tiny.ppm");
115  }
116 }