]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Plugins/ImageWriter.cxx
d33825418a7d24c9c1041586c0c84d6d536de24a
[cpPlugins.git] / lib / cpPlugins / Plugins / ImageWriter.cxx
1 #include <cpPlugins/Plugins/ImageWriter.h>
2
3 #include <itkImageFileWriter.h>
4
5 #define ITK_MANUAL_INSTANTIATION
6 #include <itkImage.h>
7 #include <itkRGBPixel.h>
8
9 // -------------------------------------------------------------------------
10 #define cpPlugins_Plugins_ImageWriter_Dimension( ret, d, dobj, func )   \
11   if( dynamic_cast< itk::ImageBase< d >* >( dobj ) != NULL )            \
12     ret = this->func< d >( )
13
14 // -------------------------------------------------------------------------
15 #define cpPlugins_Plugins_ImageWriter_Pixel( ret, p, d, dobj, func )    \
16   if( dynamic_cast< itk::Image< p, d >* >( dobj ) != NULL )             \
17     ret = this->func< p, d >( )
18
19 // -------------------------------------------------------------------------
20 #define cpPlugins_Plugins_ImageWriter_RGB( ret, p, d, dobj, func )      \
21   if( dynamic_cast< itk::Image< itk::RGBPixel< p >, d >* >( dobj ) != NULL ) \
22     ret = this->func< itk::RGBPixel< p >, d >( )
23
24 // -------------------------------------------------------------------------
25 cpPlugins::Plugins::ImageWriter::
26 ImageWriter( )
27   : Superclass( )
28 {
29   this->SetNumberOfInputs( 1 );
30
31   this->m_DefaultParameters[ "FileName" ] =
32     TParameter( "string", "no_file_name" );
33 }
34
35 // -------------------------------------------------------------------------
36 cpPlugins::Plugins::ImageWriter::
37 ~ImageWriter( )
38 {
39 }
40
41 // -------------------------------------------------------------------------
42 std::string cpPlugins::Plugins::ImageWriter::
43 GetClassName( ) const
44 {
45   return( "cpPlugins::Plugins::ImageWriter" );
46 }
47
48 // -------------------------------------------------------------------------
49 std::string cpPlugins::Plugins::ImageWriter::
50 _GenerateData( )
51 {
52   itk::DataObject* dobj = this->_GetInput( 0 );
53
54   std::string ret = "itk::Image dimension not supported.";
55   cpPlugins_Plugins_ImageWriter_Dimension( ret, 1, dobj, _GenerateData0 );
56   else cpPlugins_Plugins_ImageWriter_Dimension( ret, 2, dobj, _GenerateData0 );
57   else cpPlugins_Plugins_ImageWriter_Dimension( ret, 3, dobj, _GenerateData0 );
58   else cpPlugins_Plugins_ImageWriter_Dimension( ret, 4, dobj, _GenerateData0 );
59
60   return( ret );
61 }
62
63 // -------------------------------------------------------------------------
64 template< unsigned int D >
65 std::string cpPlugins::Plugins::ImageWriter::
66 _GenerateData0( )
67 {
68   itk::ImageBase< D >* img =
69     dynamic_cast< itk::ImageBase< D >* >( this->_GetInput( 0 ) );
70
71   std::string ret = "itk::Image pixel type not supported";
72   cpPlugins_Plugins_ImageWriter_Pixel( ret, char, D, img, _GenerateData1 );
73   else cpPlugins_Plugins_ImageWriter_Pixel( ret, short, D, img, _GenerateData1 );
74   else cpPlugins_Plugins_ImageWriter_Pixel( ret, int, D, img, _GenerateData1 );
75   else cpPlugins_Plugins_ImageWriter_Pixel( ret, long, D, img, _GenerateData1 );
76   else cpPlugins_Plugins_ImageWriter_Pixel( ret, unsigned char, D, img, _GenerateData1 );
77   else cpPlugins_Plugins_ImageWriter_Pixel( ret, unsigned short, D, img, _GenerateData1 );
78   else cpPlugins_Plugins_ImageWriter_Pixel( ret, unsigned int, D, img, _GenerateData1 );
79   else cpPlugins_Plugins_ImageWriter_Pixel( ret, unsigned long, D, img, _GenerateData1 );
80   else cpPlugins_Plugins_ImageWriter_Pixel( ret, float, D, img, _GenerateData1 );
81   else cpPlugins_Plugins_ImageWriter_Pixel( ret, double, D, img, _GenerateData1 );
82   else cpPlugins_Plugins_ImageWriter_RGB( ret, char, D, img, _GenerateData1 );
83   else cpPlugins_Plugins_ImageWriter_RGB( ret, short, D, img, _GenerateData1 );
84   else cpPlugins_Plugins_ImageWriter_RGB( ret, int, D, img, _GenerateData1 );
85   else cpPlugins_Plugins_ImageWriter_RGB( ret, long, D, img, _GenerateData1 );
86   else cpPlugins_Plugins_ImageWriter_RGB( ret, unsigned char, D, img, _GenerateData1 );
87   else cpPlugins_Plugins_ImageWriter_RGB( ret, unsigned short, D, img, _GenerateData1 );
88   else cpPlugins_Plugins_ImageWriter_RGB( ret, unsigned int, D, img, _GenerateData1 );
89   else cpPlugins_Plugins_ImageWriter_RGB( ret, unsigned long, D, img, _GenerateData1 );
90   else cpPlugins_Plugins_ImageWriter_RGB( ret, float, D, img, _GenerateData1 );
91   else cpPlugins_Plugins_ImageWriter_RGB( ret, double, D, img, _GenerateData1 );
92
93   return( ret );
94 }
95
96 // -------------------------------------------------------------------------
97 template< class P, unsigned int D >
98 std::string cpPlugins::Plugins::ImageWriter::
99 _GenerateData1( )
100 {
101   typedef itk::Image< P, D > _TImage;
102   typedef itk::ImageFileWriter< _TImage > _TImageWriter;
103
104   TParameters::const_iterator fIt;
105
106   // Get image pixelType
107   fIt = this->m_Parameters.find( "FileName" );
108   if( fIt == this->m_Parameters.end( ) )
109     fIt = this->m_DefaultParameters.find( "FileName" );
110
111   _TImageWriter* writer =
112     dynamic_cast< _TImageWriter* >( this->m_Writer.GetPointer( ) );
113   if( writer == NULL )
114   {
115     this->m_Writer = _TImageWriter::New( );
116     writer = dynamic_cast< _TImageWriter* >( this->m_Writer.GetPointer( ) );
117
118   } // fi
119   writer->SetFileName( fIt->second.second );
120   writer->SetInput( dynamic_cast< _TImage* >( this->_GetInput( 0 ) ) );
121   try
122   {
123     writer->Update( );
124   }
125   catch( itk::ExceptionObject& err )
126   {
127     return( err.GetDescription( ) );
128
129   } // yrt
130   return( "" );
131 }
132
133 // eof - $RCSfile$