1 #include <cpPlugins/Plugins/ImageWriter.h>
3 // TODO: interesting... #define ITK_MANUAL_INSTANTIATION
5 #include <itkImageFileWriter.h>
6 #include <itkRGBPixel.h>
8 // -------------------------------------------------------------------------
9 #define cpPlugins_Plugins_ImageWriter_Dimension( ret, d, dobj, func ) \
10 if( dynamic_cast< itk::ImageBase< d >* >( dobj ) != NULL ) \
11 ret = this->func< d >( )
13 // -------------------------------------------------------------------------
14 #define cpPlugins_Plugins_ImageWriter_Pixel( ret, p, d, dobj, func ) \
15 if( dynamic_cast< itk::Image< p, d >* >( dobj ) != NULL ) \
16 ret = this->func< p, d >( )
18 // -------------------------------------------------------------------------
19 #define cpPlugins_Plugins_ImageWriter_RGB( ret, p, d, dobj, func ) \
20 if( dynamic_cast< itk::Image< itk::RGBPixel< p >, d >* >( dobj ) != NULL ) \
21 ret = this->func< itk::RGBPixel< p >, d >( )
23 // -------------------------------------------------------------------------
24 cpPlugins::Plugins::ImageWriter::
28 this->SetNumberOfInputs( 1 );
30 this->m_DefaultParameters[ "FileName" ] =
31 TParameter( "string", "no_file_name" );
34 // -------------------------------------------------------------------------
35 cpPlugins::Plugins::ImageWriter::
40 // -------------------------------------------------------------------------
41 std::string cpPlugins::Plugins::ImageWriter::
44 return( "cpPlugins::Plugins::ImageWriter" );
47 // -------------------------------------------------------------------------
48 std::string cpPlugins::Plugins::ImageWriter::
51 itk::DataObject* dobj = this->_GetInput( 0 );
53 std::string ret = "itk::Image dimension not supported.";
54 cpPlugins_Plugins_ImageWriter_Dimension( ret, 1, dobj, _GenerateData0 );
55 else cpPlugins_Plugins_ImageWriter_Dimension( ret, 2, dobj, _GenerateData0 );
56 else cpPlugins_Plugins_ImageWriter_Dimension( ret, 3, dobj, _GenerateData0 );
57 else cpPlugins_Plugins_ImageWriter_Dimension( ret, 4, dobj, _GenerateData0 );
62 // -------------------------------------------------------------------------
63 template< unsigned int D >
64 std::string cpPlugins::Plugins::ImageWriter::
67 itk::ImageBase< D >* img =
68 dynamic_cast< itk::ImageBase< D >* >( this->_GetInput( 0 ) );
70 std::string ret = "itk::Image pixel type not supported";
71 cpPlugins_Plugins_ImageWriter_Pixel( ret, char, D, img, _GenerateData1 );
72 else cpPlugins_Plugins_ImageWriter_Pixel( ret, short, D, img, _GenerateData1 );
73 else cpPlugins_Plugins_ImageWriter_Pixel( ret, int, D, img, _GenerateData1 );
74 else cpPlugins_Plugins_ImageWriter_Pixel( ret, long, D, img, _GenerateData1 );
75 else cpPlugins_Plugins_ImageWriter_Pixel( ret, unsigned char, D, img, _GenerateData1 );
76 else cpPlugins_Plugins_ImageWriter_Pixel( ret, unsigned short, D, img, _GenerateData1 );
77 else cpPlugins_Plugins_ImageWriter_Pixel( ret, unsigned int, D, img, _GenerateData1 );
78 else cpPlugins_Plugins_ImageWriter_Pixel( ret, unsigned long, D, img, _GenerateData1 );
79 else cpPlugins_Plugins_ImageWriter_Pixel( ret, float, D, img, _GenerateData1 );
80 else cpPlugins_Plugins_ImageWriter_Pixel( ret, double, D, img, _GenerateData1 );
81 else cpPlugins_Plugins_ImageWriter_RGB( ret, char, D, img, _GenerateData1 );
82 else cpPlugins_Plugins_ImageWriter_RGB( ret, short, D, img, _GenerateData1 );
83 else cpPlugins_Plugins_ImageWriter_RGB( ret, int, D, img, _GenerateData1 );
84 else cpPlugins_Plugins_ImageWriter_RGB( ret, long, D, img, _GenerateData1 );
85 else cpPlugins_Plugins_ImageWriter_RGB( ret, unsigned char, D, img, _GenerateData1 );
86 else cpPlugins_Plugins_ImageWriter_RGB( ret, unsigned short, D, img, _GenerateData1 );
87 else cpPlugins_Plugins_ImageWriter_RGB( ret, unsigned int, D, img, _GenerateData1 );
88 else cpPlugins_Plugins_ImageWriter_RGB( ret, unsigned long, D, img, _GenerateData1 );
89 else cpPlugins_Plugins_ImageWriter_RGB( ret, float, D, img, _GenerateData1 );
90 else cpPlugins_Plugins_ImageWriter_RGB( ret, double, D, img, _GenerateData1 );
95 // -------------------------------------------------------------------------
96 template< class P, unsigned int D >
97 std::string cpPlugins::Plugins::ImageWriter::
100 typedef itk::Image< P, D > _TImage;
101 typedef itk::ImageFileWriter< _TImage > _TImageWriter;
103 TParameters::const_iterator fIt;
105 // Get image pixelType
106 fIt = this->m_Parameters.find( "FileName" );
107 if( fIt == this->m_Parameters.end( ) )
108 fIt = this->m_DefaultParameters.find( "FileName" );
110 _TImageWriter* writer =
111 dynamic_cast< _TImageWriter* >( this->m_Writer.GetPointer( ) );
114 this->m_Writer = _TImageWriter::New( );
115 writer = dynamic_cast< _TImageWriter* >( this->m_Writer.GetPointer( ) );
118 writer->SetFileName( fIt->second.second );
119 writer->SetInput( dynamic_cast< _TImage* >( this->_GetInput( 0 ) ) );
124 catch( itk::ExceptionObject& err )
126 return( err.GetDescription( ) );