]> Creatis software - cpPlugins.git/blobdiff - lib/cpPlugins/Plugins/ImageReader.cxx
Merge ssh://git.creatis.insa-lyon.fr/cpPlugins
[cpPlugins.git] / lib / cpPlugins / Plugins / ImageReader.cxx
index d4ca0ba1471f500df0036b130cdb87b93e6e032e..73611cb4a7130c7ac13d309d3afc6e4485f1df5d 100644 (file)
@@ -1,21 +1,8 @@
 #include <cpPlugins/Plugins/ImageReader.h>
 #include <cpPlugins/Interface/Image.h>
 
-#include <complex>
 #include <set>
 
-#define ITK_MANUAL_INSTANTIATION
-#include <itkImage.h>
-
-#include <itkCovariantVector.h>
-#include <itkDiffusionTensor3D.h>
-#include <itkPoint.h>
-#include <itkRGBPixel.h>
-#include <itkRGBAPixel.h>
-#include <itkSymmetricSecondRankTensor.h>
-#include <itkVector.h>
-
-#undef ITK_MANUAL_INSTANTIATION
 #include <itkImageFileReader.h>
 #include <itkImageSeriesReader.h>
 
@@ -62,7 +49,7 @@ _GenerateData( )
     {
       io->SetFileName( names[ 0 ] );
       io->ReadImageInformation( );
-      if( names.size( ) == 1 )
+      if( names.size( ) >= 1 )
       {
         switch( io->GetNumberOfDimensions( ) )
         {
@@ -70,19 +57,7 @@ _GenerateData( )
         case 3: r = this->_GD0< 3 >( io, names ); break;
         case 4: r = this->_GD0< 4 >( io, names ); break;
         default:
-          r = "ImageReader: Single image dimension not supported.";
-          break;
-        } // hctiws
-      }
-      else if( names.size( ) > 1 )
-      {
-        switch( io->GetNumberOfDimensions( ) )
-        {
-        case 1: r = this->_GD0< 2 >( io, names ); break;
-        case 2: r = this->_GD0< 3 >( io, names ); break;
-        case 3: r = this->_GD0< 4 >( io, names ); break;
-        default:
-          r = "ImageReader: Multiple images dimension not supported.";
+          r = "ImageReader: Image dimension not supported.";
           break;
         } // hctiws
 
@@ -162,8 +137,26 @@ _GD0( itk::ImageIOBase* io, const TStringList& names )
       case itk::ImageIOBase::SHORT:
         r = this->_RealGD< itk::RGBPixel< short >, 2 >( names );
         break;
+      case itk::ImageIOBase::UINT:
+        r = this->_RealGD< itk::RGBPixel< unsigned int >, 2 >( names );
+        break;
+      case itk::ImageIOBase::INT:
+        r = this->_RealGD< itk::RGBPixel< int >, 2 >( names );
+        break;
+      case itk::ImageIOBase::ULONG:
+        r = this->_RealGD< itk::RGBPixel< unsigned long >, 2 >( names );
+        break;
+      case itk::ImageIOBase::LONG:
+        r = this->_RealGD< itk::RGBPixel< long >, 2 >( names );
+        break;
+      case itk::ImageIOBase::FLOAT:
+        r = this->_RealGD< itk::RGBPixel< float >, 2 >( names );
+        break;
+      case itk::ImageIOBase::DOUBLE:
+        r = this->_RealGD< itk::RGBPixel< double >, 2 >( names );
+        break;
       default:
-        r = "ImageReader: Scalar pixel type not supported.";
+        r = "ImageReader: RGB pixel type not supported.";
         break;
       } // hctiws
     }
@@ -183,8 +176,26 @@ _GD0( itk::ImageIOBase* io, const TStringList& names )
       case itk::ImageIOBase::SHORT:
         r = this->_RealGD< itk::RGBPixel< short >, 3 >( names );
         break;
+      case itk::ImageIOBase::UINT:
+        r = this->_RealGD< itk::RGBPixel< unsigned int >, 3 >( names );
+        break;
+      case itk::ImageIOBase::INT:
+        r = this->_RealGD< itk::RGBPixel< int >, 3 >( names );
+        break;
+      case itk::ImageIOBase::ULONG:
+        r = this->_RealGD< itk::RGBPixel< unsigned long >, 3 >( names );
+        break;
+      case itk::ImageIOBase::LONG:
+        r = this->_RealGD< itk::RGBPixel< long >, 3 >( names );
+        break;
+      case itk::ImageIOBase::FLOAT:
+        r = this->_RealGD< itk::RGBPixel< float >, 3 >( names );
+        break;
+      case itk::ImageIOBase::DOUBLE:
+        r = this->_RealGD< itk::RGBPixel< double >, 3 >( names );
+        break;
       default:
-        r = "ImageReader: Scalar pixel type not supported.";
+        r = "ImageReader: RGB pixel type not supported.";
         break;
       } // hctiws
     }
@@ -204,8 +215,26 @@ _GD0( itk::ImageIOBase* io, const TStringList& names )
       case itk::ImageIOBase::SHORT:
         r = this->_RealGD< itk::RGBPixel< short >, 4 >( names );
         break;
+      case itk::ImageIOBase::UINT:
+        r = this->_RealGD< itk::RGBPixel< unsigned int >, 4 >( names );
+        break;
+      case itk::ImageIOBase::INT:
+        r = this->_RealGD< itk::RGBPixel< int >, 4 >( names );
+        break;
+      case itk::ImageIOBase::ULONG:
+        r = this->_RealGD< itk::RGBPixel< unsigned long >, 4 >( names );
+        break;
+      case itk::ImageIOBase::LONG:
+        r = this->_RealGD< itk::RGBPixel< long >, 4 >( names );
+        break;
+      case itk::ImageIOBase::FLOAT:
+        r = this->_RealGD< itk::RGBPixel< float >, 4 >( names );
+        break;
+      case itk::ImageIOBase::DOUBLE:
+        r = this->_RealGD< itk::RGBPixel< double >, 4 >( names );
+        break;
       default:
-        r = "ImageReader: Scalar pixel type not supported.";
+        r = "ImageReader: RGB pixel type not supported.";
         break;
       } // hctiws
 
@@ -229,8 +258,26 @@ _GD0( itk::ImageIOBase* io, const TStringList& names )
       case itk::ImageIOBase::SHORT:
         r = this->_RealGD< itk::RGBAPixel< short >, 2 >( names );
         break;
+      case itk::ImageIOBase::UINT:
+        r = this->_RealGD< itk::RGBAPixel< unsigned int >, 2 >( names );
+        break;
+      case itk::ImageIOBase::INT:
+        r = this->_RealGD< itk::RGBAPixel< int >, 2 >( names );
+        break;
+      case itk::ImageIOBase::ULONG:
+        r = this->_RealGD< itk::RGBAPixel< unsigned long >, 2 >( names );
+        break;
+      case itk::ImageIOBase::LONG:
+        r = this->_RealGD< itk::RGBAPixel< long >, 2 >( names );
+        break;
+      case itk::ImageIOBase::FLOAT:
+        r = this->_RealGD< itk::RGBAPixel< float >, 2 >( names );
+        break;
+      case itk::ImageIOBase::DOUBLE:
+        r = this->_RealGD< itk::RGBAPixel< double >, 2 >( names );
+        break;
       default:
-        r = "ImageReader: Scalar pixel type not supported.";
+        r = "ImageReader: RGBA pixel type not supported.";
         break;
       } // hctiws
     }
@@ -250,8 +297,26 @@ _GD0( itk::ImageIOBase* io, const TStringList& names )
       case itk::ImageIOBase::SHORT:
         r = this->_RealGD< itk::RGBAPixel< short >, 3 >( names );
         break;
+      case itk::ImageIOBase::UINT:
+        r = this->_RealGD< itk::RGBAPixel< unsigned int >, 3 >( names );
+        break;
+      case itk::ImageIOBase::INT:
+        r = this->_RealGD< itk::RGBAPixel< int >, 3 >( names );
+        break;
+      case itk::ImageIOBase::ULONG:
+        r = this->_RealGD< itk::RGBAPixel< unsigned long >, 3 >( names );
+        break;
+      case itk::ImageIOBase::LONG:
+        r = this->_RealGD< itk::RGBAPixel< long >, 3 >( names );
+        break;
+      case itk::ImageIOBase::FLOAT:
+        r = this->_RealGD< itk::RGBAPixel< float >, 3 >( names );
+        break;
+      case itk::ImageIOBase::DOUBLE:
+        r = this->_RealGD< itk::RGBAPixel< double >, 3 >( names );
+        break;
       default:
-        r = "ImageReader: Scalar pixel type not supported.";
+        r = "ImageReader: RGBA pixel type not supported.";
         break;
       } // hctiws
     }
@@ -271,8 +336,26 @@ _GD0( itk::ImageIOBase* io, const TStringList& names )
       case itk::ImageIOBase::SHORT:
         r = this->_RealGD< itk::RGBAPixel< short >, 4 >( names );
         break;
+      case itk::ImageIOBase::UINT:
+        r = this->_RealGD< itk::RGBAPixel< unsigned int >, 4 >( names );
+        break;
+      case itk::ImageIOBase::INT:
+        r = this->_RealGD< itk::RGBAPixel< int >, 4 >( names );
+        break;
+      case itk::ImageIOBase::ULONG:
+        r = this->_RealGD< itk::RGBAPixel< unsigned long >, 4 >( names );
+        break;
+      case itk::ImageIOBase::LONG:
+        r = this->_RealGD< itk::RGBAPixel< long >, 4 >( names );
+        break;
+      case itk::ImageIOBase::FLOAT:
+        r = this->_RealGD< itk::RGBAPixel< float >, 4 >( names );
+        break;
+      case itk::ImageIOBase::DOUBLE:
+        r = this->_RealGD< itk::RGBAPixel< double >, 4 >( names );
+        break;
       default:
-        r = "ImageReader: Scalar pixel type not supported.";
+        r = "ImageReader: RGBA pixel type not supported.";
         break;
       } // hctiws
 
@@ -337,7 +420,7 @@ _GD0( itk::ImageIOBase* io, const TStringList& names )
       r = this->_RealGD< itk::CovariantVector< double, D >, D >( names );
       break;
     default:
-      r = "ImageReader: Vector type not supported.";
+      r = "ImageReader: CovariantVector type not supported.";
       break;
     } // hctiws
   }
@@ -379,6 +462,21 @@ _GD0( itk::ImageIOBase* io, const TStringList& names )
         break;
       } // hctiws
     }
+    else if( D == 4 )
+    {
+      switch( ct )
+      {
+      case itk::ImageIOBase::FLOAT:
+        r = this->_RealGD< itk::DiffusionTensor3D< float >, 4 >( names );
+        break;
+      case itk::ImageIOBase::DOUBLE:
+        r = this->_RealGD< itk::DiffusionTensor3D< double >, 4 >( names );
+        break;
+      default:
+        r = "ImageReader: Diffusion tensor type not supported.";
+        break;
+      } // hctiws
+    }
     else
       r = "ImageReader: Diffusion tensor dimension not supported.";
   }
@@ -414,6 +512,11 @@ _RealGD( const TStringList& names )
 {
   typedef itk::Image< P, D > _I;
 
+  cpPlugins::Interface::Image* out =
+    this->GetOutput< cpPlugins::Interface::Image >( 0 );
+  if( out == NULL )
+    return( "ImageReader: No output object properly created." );
+
   std::string r = "";
   if( names.size( ) == 1 )
   {
@@ -432,22 +535,12 @@ _RealGD( const TStringList& names )
     try
     {
       reader->Update( );
-      cpPlugins::Interface::Image* out =
-        this->_Output< cpPlugins::Interface::Image >( 0 );
-      if( out != NULL )
-        out->SetITKImage< _I >( reader->GetOutput( ) );
-      else
-        r = "ImageReader: output not correctly created.";
+      out->SetITKImage< _I >( reader->GetOutput( ) );
     }
     catch( itk::ExceptionObject& err )
     {
       r = "ImageReader: " + std::string( err.GetDescription( ) );
-      cpPlugins::Interface::Image* out =
-        this->_Output< cpPlugins::Interface::Image >( 0 );
-      if( out != NULL )
-        out->SetITKImage< _I >( NULL );
-      else
-        r = "ImageReader: output not correctly created.";
+      out->SetITKImage< _I >( NULL );
 
     } // yrt
   }
@@ -470,26 +563,18 @@ _RealGD( const TStringList& names )
     } // fi
     std::set< std::string >::const_iterator fnIt = ordered_names.begin( );
     for( ; fnIt != ordered_names.end( ); ++fnIt )
+    {
       reader->AddFileName( *fnIt );
+    }
     try
     {
       reader->Update( );
-      cpPlugins::Interface::Image* out =
-        this->_Output< cpPlugins::Interface::Image >( 0 );
-      if( out != NULL )
-        out->SetITKImage< _I >( reader->GetOutput( ) );
-      else
-        r = "ImageReader: output not correctly created.";
+      out->SetITKImage< _I >( reader->GetOutput( ) );
     }
     catch( itk::ExceptionObject& err )
     {
       r = "ImageReader: " + std::string( err.GetDescription( ) );
-      cpPlugins::Interface::Image* out =
-        this->_Output< cpPlugins::Interface::Image >( 0 );
-      if( out != NULL )
-        out->SetITKImage< _I >( NULL );
-      else
-        r = "ImageReader: output not correctly created.";
+      out->SetITKImage< _I >( NULL );
 
     } // yrt
   }