DGtal  0.6.devel
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
testPNMRawWriter.cpp
1 
30 
31 #include <iostream>
32 #include "DGtal/base/Common.h"
33 #include "DGtal/kernel/SpaceND.h"
34 #include "DGtal/kernel/domains/HyperRectDomain.h"
35 #include "DGtal/images/ImageSelector.h"
36 #include "DGtal/io/colormaps/GrayscaleColorMap.h"
37 #include "DGtal/io/colormaps/HueShadeColorMap.h"
38 #include "DGtal/io/colormaps/GradientColorMap.h"
39 #include "DGtal/io/colormaps/ColorBrightnessColorMap.h"
40 #include "DGtal/io/colormaps/RandomColorMap.h"
41 #include "DGtal/io/colormaps/BasicColorToScalarFunctors.h"
42 #include "DGtal/base/BasicFunctors.h"
43 
44 #include "DGtal/io/writers/PGMWriter.h"
45 #include "DGtal/io/writers/PPMWriter.h"
46 #include "DGtal/io/readers/PNMReader.h"
47 #include "DGtal/io/writers/RawWriter.h"
48 #include "DGtal/io/boards/Board2D.h"
50 
51 using namespace std;
52 using namespace DGtal;
53 
55 // Functions for testing class PNMWriter.
57 
61 bool testPNMWriter()
62 {
63 
64  trace.beginBlock ( "Testing block ..." );
65 
66  typedef SpaceND<2> TSpace;
67  typedef TSpace::Point Point;
70  typedef RandomColorMap Rand;
71  typedef HueShadeColorMap<unsigned char,2> HueTwice;
73  // Gradient using the "Jet" preset.
75  // Gradient from black to red.
76  const int BlackColor = DGTAL_RGB2INT(0,0,0);
77  const int RedColor = DGTAL_RGB2INT(255,0,0);
79  // Gradient from black to red, using a ColorBrightnessColorMap.
81 
82  Point a ( 1, 1);
83  Point b ( 16, 16);
85  Image image(Domain(a,b));
86  for(unsigned int i=0 ; i < 256; i++)
87  image[i] = i;
88 
89  PPMWriter<Image,Hue>::exportPPM("export-hue.ppm",image, Hue(0,255) );
90  PPMWriter<Image,HueTwice>::exportPPM("export-hue-twice.ppm",image,HueTwice(0,255));
91  PGMWriter<Image>::exportPGM("export-hue-twice.pgm",image);
92  PPMWriter<Image,Gray>::exportPPM("export-gray.ppm",image, Gray(0,255));
93  PPMWriter<Image,Jet>::exportPPM("export-jet.ppm",image,Jet(0,255));
94  PPMWriter<Image,RedShade1>::exportPPM("export-red1.ppm",image,RedShade1(0,255));
95  PPMWriter<Image,RedShade2>::exportPPM("export-red2.ppm",image,RedShade2(0,255));
96 
97  //TestingFunctor
99  RedFunctor redFunctor( Jet(0,255), BasicColorToScalarFunctors::RedChannel() ) ;
100  PGMWriter<Image, RedFunctor>::exportPGM("export-jet-red.pgm",image, redFunctor);
101 
102 
103  //test Raw export
104  RawWriter<Image>::exportRaw8("export-hue-twice.raw",image);
105 
106  //test Image export with libboard
107  Board2D board;
109  Display2DFactory::drawImage<HueTwice>(board, image, (unsigned char)0, (unsigned char)255);
110  board.saveSVG("export-hue-twice.svg");
111 
112  trace.endBlock();
113 
114  return true;
115 }
116 
117 
118 bool testRWIssue254()
119 {
120  trace.beginBlock ( "Testing R/W on PPM Writer (issue 254) ..." );
121 
122  typedef SpaceND<2> TSpace;
123  typedef TSpace::Point Point;
124  typedef HyperRectDomain<TSpace> Domain;
126 
127  Point a ( 0, 0);
128  Point b ( 15, 15);
130  Domain domain(a,b);
131  Image image(domain);
132  for(unsigned int i=0 ; i < 256; i++)
133  image[i] = i;
134 
135  PGMWriter<Image>::exportPGM("export-gray-first.pgm",image);
136 
137  Image imageRead = PNMReader<Image>::importPGM("export-gray-first.pgm");
138 
139  PGMWriter<Image>::exportPGM("export-gray-second.pgm",imageRead);
140 
141  trace.info() << image<<std::endl;
142  trace.info() << imageRead<<std::endl;
143 
144 
145  bool ok = true;
146  for(Image::Domain::ConstIterator it = image.domain().begin(),
147  itend = image.domain().end();
148  it != itend;
149  ++it)
150  ok = (image(*it) == imageRead(*it));
151 
152  trace.endBlock();
153  return ok;
154 }
155 
157 // Standard services - public :
158 
159 int main( int argc, char** argv )
160 {
161  trace.beginBlock ( "Testing class PNMWriter" );
162  trace.info() << "Args:";
163  for ( int i = 0; i < argc; ++i )
164  trace.info() << " " << argv[ i ];
165  trace.info() << endl;
166 
167  bool res = testPNMWriter() && testRWIssue254(); // && ... other tests
168  trace.emphase() << ( res ? "Passed." : "Error." ) << endl;
169  trace.endBlock();
170  return res ? 0 : 1;
171 }
172 
173 // //