49 template <
typename TImageContainer>
56 BOOST_STATIC_ASSERT( (ImageContainer::Domain::dimension == 2));
59 infile.open (aFilename.c_str(), ifstream::in);
63 trace.
error() <<
"PNMReader : can't open " << aFilename << endl;
66 bool isASCIImode =
false;
68 getline( infile, str );
69 if ( ! infile.good() )
71 trace.
error() <<
"PNMReader : can't read " << aFilename << endl;
74 if ( str !=
"P5" && str !=
"P2")
76 trace.
error() <<
"PNMReader : No P5 or P2 format in " << aFilename << endl;
85 getline( infile, str );
86 if ( ! infile.good() )
88 trace.
error() <<
"PNMReader : Invalid format in " << aFilename << endl;
92 while ( str[ 0 ] ==
'#' || str==
"");
93 istringstream str_in( str );
98 typename TImageContainer::Point firstPoint;
99 typename TImageContainer::Point lastPoint;
101 firstPoint = TImageContainer::Point::zero;
105 typename TImageContainer::Domain domain(firstPoint,lastPoint);
106 TImageContainer image(domain);
108 getline( infile, str );
109 istringstream str2_in( str );
110 unsigned int max_value;
111 str2_in >> max_value;
113 if ( ! infile.good() )
115 trace.
error() <<
"PNMReader : Invalid format in " << aFilename << endl;
119 unsigned int nb_read = 0;
125 for(
unsigned int y=0; y <h; y++)
126 for(
unsigned int x=0; x <w; x++)
128 typename TImageContainer::Point pt;
130 pt[0]=x; pt[1]=h-1-y;
143 image.setValue( pt, c);
153 image.setValue( pt, c);
157 if ( infile.fail() || infile.bad() )
159 trace.
error() <<
"# nbread=" << nb_read << endl;
168 template <
typename TImageContainer>
175 BOOST_STATIC_ASSERT( (ImageContainer::Domain::dimension == 3));
178 infile.open (aFilename.c_str(), ifstream::in);
182 trace.
error() <<
"PNMReader : can't open " << aFilename << endl;
187 getline( infile, str );
188 if ( ! infile.good() ) {
189 trace.
error() <<
"PNMReader : can't read " << aFilename << endl;
192 if ( str !=
"P3d" && str !=
"P3D"){
193 trace.
error() <<
"PNMReader : No P3d format in " << aFilename << endl;
199 getline( infile, str );
200 if ( ! infile.good() ){
201 trace.
error() <<
"PNMReader : Invalid format in " << aFilename << endl;
205 while ( str[ 0 ] ==
'#' || str==
"");
206 istringstream str_in( str );
207 unsigned int w, h, e;
208 str_in >> w >> h >> e ;
211 typename TImageContainer::Point firstPoint;
212 typename TImageContainer::Point lastPoint;
214 firstPoint = TImageContainer::Point::zero;
219 typename TImageContainer::Domain domain(firstPoint,lastPoint);
220 TImageContainer image(domain);
222 getline( infile, str );
223 istringstream str2_in( str );
225 str2_in >> max_value;
227 if ( ! infile.good() ){
228 trace.
error() <<
"PNMReader : Invalid format in " << aFilename << endl;
231 unsigned int nb_read = 0;
234 for(
unsigned int z=0; z <e; z++){
235 for(
unsigned int y=0; y <h; y++){
236 for(
unsigned int x=0; x <w; x++){
237 typename TImageContainer::Point pt;
238 pt[0]=x; pt[1]=y; pt[2]=z;
241 if ( infile.good() ){
243 image.setValue( pt, c);
248 if ( infile.fail() || infile.bad() )
250 trace.
error() <<
"# nbread=" << nb_read << endl;