#include <cpPlugins/Plugins/ImageWriter.h>
+#include <itkImageFileWriter.h>
+
+#define ITK_MANUAL_INSTANTIATION
+#include <itkImage.h>
+#include <itkRGBPixel.h>
+
+// -------------------------------------------------------------------------
+#define cpPlugins_Plugins_ImageWriter_Dimension( ret, d, dobj, func ) \
+ if( dynamic_cast< itk::ImageBase< d >* >( dobj ) != NULL ) \
+ ret = this->func< d >( )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_Plugins_ImageWriter_Pixel( ret, p, d, dobj, func ) \
+ if( dynamic_cast< itk::Image< p, d >* >( dobj ) != NULL ) \
+ ret = this->func< p, d >( )
+
+// -------------------------------------------------------------------------
+#define cpPlugins_Plugins_ImageWriter_RGB( ret, p, d, dobj, func ) \
+ if( dynamic_cast< itk::Image< itk::RGBPixel< p >, d >* >( dobj ) != NULL ) \
+ ret = this->func< itk::RGBPixel< p >, d >( )
+
// -------------------------------------------------------------------------
cpPlugins::Plugins::ImageWriter::
ImageWriter( )
: Superclass( )
{
+ this->SetNumberOfInputs( 1 );
+
+ this->m_DefaultParameters[ "FileName" ] =
+ TParameter( "string", "no_file_name" );
}
// -------------------------------------------------------------------------
}
// -------------------------------------------------------------------------
-bool cpPlugins::Plugins::ImageWriter::
-Update( )
+std::string cpPlugins::Plugins::ImageWriter::
+_GenerateData( )
{
- return( false );
+ itk::DataObject* dobj = this->_GetInput( 0 );
+
+ std::string ret = "itk::Image dimension not supported.";
+ cpPlugins_Plugins_ImageWriter_Dimension( ret, 1, dobj, _GenerateData0 );
+ else cpPlugins_Plugins_ImageWriter_Dimension( ret, 2, dobj, _GenerateData0 );
+ else cpPlugins_Plugins_ImageWriter_Dimension( ret, 3, dobj, _GenerateData0 );
+ else cpPlugins_Plugins_ImageWriter_Dimension( ret, 4, dobj, _GenerateData0 );
+
+ return( ret );
+}
+
+// -------------------------------------------------------------------------
+template< unsigned int D >
+std::string cpPlugins::Plugins::ImageWriter::
+_GenerateData0( )
+{
+ itk::ImageBase< D >* img =
+ dynamic_cast< itk::ImageBase< D >* >( this->_GetInput( 0 ) );
+
+ std::string ret = "itk::Image pixel type not supported";
+ cpPlugins_Plugins_ImageWriter_Pixel( ret, char, D, img, _GenerateData1 );
+ else cpPlugins_Plugins_ImageWriter_Pixel( ret, short, D, img, _GenerateData1 );
+ else cpPlugins_Plugins_ImageWriter_Pixel( ret, int, D, img, _GenerateData1 );
+ else cpPlugins_Plugins_ImageWriter_Pixel( ret, long, D, img, _GenerateData1 );
+ else cpPlugins_Plugins_ImageWriter_Pixel( ret, unsigned char, D, img, _GenerateData1 );
+ else cpPlugins_Plugins_ImageWriter_Pixel( ret, unsigned short, D, img, _GenerateData1 );
+ else cpPlugins_Plugins_ImageWriter_Pixel( ret, unsigned int, D, img, _GenerateData1 );
+ else cpPlugins_Plugins_ImageWriter_Pixel( ret, unsigned long, D, img, _GenerateData1 );
+ else cpPlugins_Plugins_ImageWriter_Pixel( ret, float, D, img, _GenerateData1 );
+ else cpPlugins_Plugins_ImageWriter_Pixel( ret, double, D, img, _GenerateData1 );
+ else cpPlugins_Plugins_ImageWriter_RGB( ret, char, D, img, _GenerateData1 );
+ else cpPlugins_Plugins_ImageWriter_RGB( ret, short, D, img, _GenerateData1 );
+ else cpPlugins_Plugins_ImageWriter_RGB( ret, int, D, img, _GenerateData1 );
+ else cpPlugins_Plugins_ImageWriter_RGB( ret, long, D, img, _GenerateData1 );
+ else cpPlugins_Plugins_ImageWriter_RGB( ret, unsigned char, D, img, _GenerateData1 );
+ else cpPlugins_Plugins_ImageWriter_RGB( ret, unsigned short, D, img, _GenerateData1 );
+ else cpPlugins_Plugins_ImageWriter_RGB( ret, unsigned int, D, img, _GenerateData1 );
+ else cpPlugins_Plugins_ImageWriter_RGB( ret, unsigned long, D, img, _GenerateData1 );
+ else cpPlugins_Plugins_ImageWriter_RGB( ret, float, D, img, _GenerateData1 );
+ else cpPlugins_Plugins_ImageWriter_RGB( ret, double, D, img, _GenerateData1 );
+
+ return( ret );
+}
+
+// -------------------------------------------------------------------------
+template< class P, unsigned int D >
+std::string cpPlugins::Plugins::ImageWriter::
+_GenerateData1( )
+{
+ typedef itk::Image< P, D > _TImage;
+ typedef itk::ImageFileWriter< _TImage > _TImageWriter;
+
+ TParameters::const_iterator fIt;
+
+ // Get image pixelType
+ fIt = this->m_Parameters.find( "FileName" );
+ if( fIt == this->m_Parameters.end( ) )
+ fIt = this->m_DefaultParameters.find( "FileName" );
+
+ _TImageWriter* writer =
+ dynamic_cast< _TImageWriter* >( this->m_Writer.GetPointer( ) );
+ if( writer == NULL )
+ {
+ this->m_Writer = _TImageWriter::New( );
+ writer = dynamic_cast< _TImageWriter* >( this->m_Writer.GetPointer( ) );
+
+ } // fi
+ writer->SetFileName( fIt->second.second );
+ writer->SetInput( dynamic_cast< _TImage* >( this->_GetInput( 0 ) ) );
+ try
+ {
+ writer->Update( );
+ }
+ catch( itk::ExceptionObject& err )
+ {
+ return( err.GetDescription( ) );
+
+ } // yrt
+ return( "" );
}
// eof - $RCSfile$