]> Creatis software - cpPlugins.git/blobdiff - plugins/cpPluginsIO/ImageWriter.cxx
First dump for version 0.1.0
[cpPlugins.git] / plugins / cpPluginsIO / ImageWriter.cxx
diff --git a/plugins/cpPluginsIO/ImageWriter.cxx b/plugins/cpPluginsIO/ImageWriter.cxx
new file mode 100644 (file)
index 0000000..4418c66
--- /dev/null
@@ -0,0 +1,75 @@
+#include <cpPluginsIO/ImageWriter.h>
+#include <cpPlugins/Image.h>
+
+#include <itkImageFileWriter.h>
+#include <itkImageFileWriter.hxx>
+#include <itkImageAlgorithm.hxx>
+
+// -------------------------------------------------------------------------
+cpPluginsIO::ImageWriter::
+ImageWriter( )
+  : Superclass( )
+{
+  this->_AddInput( "Input" );
+  this->m_Parameters.Clear( );
+  this->m_Parameters.ConfigureAsSaveFileName( "FileName" );
+  this->m_Parameters.SetAcceptedFileExtensions(
+    "FileName",
+    "Image files (*.bmp *.png *.jpg *.jpeg *.dcm *.mhd *.nhdr *.nrrd *.tiff)"
+    );
+}
+
+// -------------------------------------------------------------------------
+cpPluginsIO::ImageWriter::
+~ImageWriter( )
+{
+}
+
+// -------------------------------------------------------------------------
+std::string cpPluginsIO::ImageWriter::
+_GenerateData( )
+{
+  auto input = this->GetInputData( "Input" );
+  try
+  {
+    std::string   r = cpPlugin_Image_Demangle_Dim( _GD0, input, 3 );
+    if( r != "" ) r = cpPlugin_Image_Demangle_Dim( _GD0, input, 2 );
+    if( r != "" ) r = cpPlugin_Image_Demangle_Dim( _GD0, input, 4 );
+    if( r != "" ) r = cpPlugin_Image_Demangle_Dim( _GD0, input, 1 );
+    return( r );
+  }
+  catch( itk::ExceptionObject& err )
+  {
+    return( "IO::ImageWriter: " + std::string( err.GetDescription( ) ) );
+  }
+}
+
+// -------------------------------------------------------------------------
+template< class I >
+std::string cpPluginsIO::ImageWriter::
+_GD0( I* image )
+{
+  static const unsigned int D = I::ImageDimension;
+  if( image == NULL )
+    return( "IO::ImageWriter: Invalid image dimension." );
+
+  std::string   cpPlugin_Image_Demangle_Pixel_AllScalars( r, _GD1, image, D );
+  if( r != "" ) cpPlugin_Image_Demangle_Pixel_AllColor( r, _GD1, image, D );
+  return( r );
+}
+
+// -------------------------------------------------------------------------
+template< class I >
+std::string cpPluginsIO::ImageWriter::
+_GD1( I* image )
+{
+  if( image == NULL )
+    return( "IO::ImageWriter: Invalid pixel type." );
+  auto f = this->_CreateITK< itk::ImageFileWriter< I > >( );
+  f->SetFileName( this->m_Parameters.GetOpenFileName( "FileName" ) );
+  f->SetInput( image );
+  f->Update( );
+  return( "" );
+}
+
+// eof - $RCSfile$