2 * This program is free software: you can redistribute it and/or modify
3 * it under the terms of the GNU Lesser General Public License as
4 * published by the Free Software Foundation, either version 3 of the
5 * License, or (at your option) any later version.
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
12 * You should have received a copy of the GNU General Public License
13 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 * @file GenericWriter.ih
19 * @author Bertrand Kerautret (\c kerautre@loria.fr )
20 * LORIA (CNRS, UMR 7503), University of Nancy, France
24 * Implementation of inline methods defined in GenericWriter.h
26 * This file is part of the DGtal library.
30 //////////////////////////////////////////////////////////////////////////////
33 #include "DGtal/io/writers/HDF5Writer.h"
35 #include "DGtal/io/writers/VolWriter.h"
36 #include "DGtal/io/writers/PPMWriter.h"
37 #include "DGtal/io/writers/PGMWriter.h"
38 #include "DGtal/io/writers/RawWriter.h"
40 #include "DGtal/io/writers/MagickWriter.h"
43 #include "DGtal/io/writers/ITKWriter.h"
47 //////////////////////////////////////////////////////////////////////////////
50 ///////////////////////////////////////////////////////////////////////////////
51 // Implementation of inline functions //
54 template < typename TContainer, int TDim, typename TValue, typename TFunctor >
57 DGtal::GenericWriter<TContainer, TDim, TValue, TFunctor>::
58 exportFile( const std::string & filename,
59 const TContainer & anImage,
60 const TFunctor & aFunctor
63 DGtal::IOException dgtalio;
64 const std::string extension = filename.substr( filename.find_last_of(".") + 1 );
65 if(extension != "raw")
67 trace.error() << "Extension " << extension << " in " << TDim <<"D, not yet implemented in DGtal GenericWriter (only raw images are actually implemented in Nd using any value type)." << std::endl;
72 return RawWriter<TContainer>::template exportRaw<TValue>( filename, anImage, aFunctor );
78 template < typename TContainer, typename TValue, typename TFunctor >
81 DGtal::GenericWriter<TContainer, 3, TValue, TFunctor>::
82 exportFile( const std::string & filename,
83 const TContainer & anImage,
84 const std::string & datasetName,
85 const TFunctor & aFunctor
88 DGtal::IOException dgtalio;
89 const std::string extension = filename.substr( filename.find_last_of(".") + 1 );
91 // To remove compiler warnings
92 boost::ignore_unused_variable_warning( datasetName );
98 extension == "vol" || extension == "pgm3d" || extension == "pgm3D" || extension == "p3d" || extension == "pgm"
101 trace.error() << "Value type of " << extension << " file extension should be unsigned char."
105 else if ( extension == "raw" )
107 return RawWriter<TContainer>::template exportRaw<TValue>( filename, anImage, aFunctor );
110 else if ( extension == "nii" || extension == "mha" ||
111 extension == "mhd" || extension == "tiff" ||
114 return ITKWriter<TContainer, TFunctor>::exportITK( filename, anImage, aFunctor );
119 trace.error() << "Extension " << extension << " in 3D, not yet implemented in DGtal GenericWriter." << std::endl;
129 template <typename TContainer, typename TFunctor>
132 DGtal::GenericWriter<TContainer, 3, DGtal::uint64_t, TFunctor>::
133 exportFile( const std::string & filename,
134 const TContainer & anImage,
135 const TFunctor & aFunctor
138 DGtal::IOException dgtalio;
139 const std::string extension = filename.substr( filename.find_last_of(".") + 1 );
141 if ( extension == "longvol" )
143 return VolWriter<TContainer, TFunctor>::exportLongvol( filename, anImage , aFunctor );
145 else if ( extension == "raw" )
147 return RawWriter<TContainer>::template exportRaw<DGtal::uint64_t>( filename, anImage, aFunctor );
150 else if ( extension == "nii" || extension == "mha" ||
151 extension == "mhd" || extension == "tiff" ||
154 return ITKWriter<TContainer, TFunctor>::exportITK( filename, anImage, aFunctor );
159 trace.error() << "Extension " << extension<< " with DGtal::uint64_t in 3D, not yet implemented in DGtal GenericWriter." << std::endl;
168 template <typename TContainer, typename TFunctor>
171 DGtal::GenericWriter<TContainer, 3, unsigned char, TFunctor>::
172 exportFile( const std::string & filename,
173 const TContainer & anImage,
174 const std::string & datasetName,
175 const TFunctor & aFunctor
178 DGtal::IOException dgtalio;
179 const std::string extension = filename.substr( filename.find_last_of(".") + 1 );
182 if ( extension == "h5" )
184 return HDF5Writer<TContainer,TFunctor>::exportHDF5_3D( filename, anImage, datasetName, aFunctor );
187 boost::ignore_unused_variable_warning(datasetName);
189 if ( extension == "vol" )
191 return VolWriter<TContainer,TFunctor>::exportVol( filename, anImage, true, aFunctor );
193 else if ( extension == "pgm3d" || extension == "pgm3D" || extension == "p3d" || extension == "pgm" )
195 return PGMWriter<TContainer, TFunctor>::exportPGM3D( filename, anImage, aFunctor );
197 else if( extension == "raw" )
199 return RawWriter< TContainer, TFunctor >::exportRaw8( filename, anImage, aFunctor );
202 else if ( extension == "nii" || extension == "mha" ||
203 extension == "mhd" || extension == "tiff" ||
206 return ITKWriter<TContainer, TFunctor>::exportITK( filename, anImage, aFunctor );
211 trace.error() << "Extension " << extension<< " with unsigned char in 3D, not yet implemented in DGtal GenericWriter." << std::endl;
218 template <typename TContainer, typename TValue, typename TFunctor>
221 DGtal::GenericWriter<TContainer, 2, TValue, TFunctor>::
222 exportFile( const std::string & filename,
223 const TContainer & anImage,
224 const TFunctor & aFunctor
227 DGtal::IOException dgtalio;
228 const std::string extension = filename.substr( filename.find_last_of(".") + 1 );
229 if ( extension == "pgm" || extension == "pbm" )
231 trace.error() << "Value type of " << extension<< " file extension should be unsigned char." << std::endl;
234 else if ( extension == "raw" )
236 return RawWriter< TContainer, TFunctor >::template exportRaw<TValue>( filename, anImage, aFunctor );
240 trace.error() << "Extension " << extension<< " in 2D, not yet implemented in DGtal GenericWriter." << std::endl;
249 template <typename TContainer, typename TFunctor>
252 DGtal::GenericWriter<TContainer, 2, DGtal::Color, TFunctor>::
253 exportFile( const std::string & filename,
254 const TContainer & anImage,
255 const TFunctor & aFunctor
258 DGtal::IOException dgtalio;
259 const std::string extension = filename.substr( filename.find_last_of(".") + 1 );
260 if ( extension == "ppm" )
262 return PPMWriter< TContainer, TFunctor >::exportPPM( filename, anImage, aFunctor );
265 else if ( extension == "gif" || extension == "jpg" || extension == "bmp" || extension == "png" )
267 return MagickWriter< TContainer, TFunctor >::exportMagick( filename, anImage, aFunctor );
270 else if ( extension == "raw" )
272 return RawWriter< TContainer, TFunctor >::template exportRaw<DGtal::Color>( filename, anImage, aFunctor );
276 trace.error() << "Extension " << extension<< " in 2D, not yet implemented in DGtal GenericWriter." << std::endl;
286 template <typename TContainer, typename TFunctor >
289 DGtal::GenericWriter<TContainer, 2, unsigned char, TFunctor>::
290 exportFile( const std::string & filename,
291 const TContainer & anImage,
292 const TFunctor & aFunctor
295 DGtal::IOException dgtalio;
296 //Getting image extension
297 const std::string extension = filename.substr(filename.find_last_of(".") + 1);
298 if ( extension == "pgm" )
300 return PGMWriter<TContainer, TFunctor>::exportPGM( filename, anImage, aFunctor );
302 else if ( extension == "raw" )
304 return RawWriter<TContainer, TFunctor>::exportRaw8( filename, anImage, aFunctor );
308 trace.error() << "Extension " << extension<< " with unsigned char in 2D, not yet implemented in DGtal GenericWriter." << std::endl;
315 template <typename TImageContainer >
318 DGtal::operator >> ( const TImageContainer & aContainer,
319 const std::string & aFilename )
321 return DGtal::GenericWriter<TImageContainer>::exportFile(aFilename, aContainer);
328 ///////////////////////////////////////////////////////////////////////////////