]> Creatis software - cpPlugins.git/blobdiff - plugins/cpPluginsIO/ImageReader.cxx
More bugs smashed
[cpPlugins.git] / plugins / cpPluginsIO / ImageReader.cxx
index c515c9e6fbc301da16ccaf39c4fdb0408be27f07..7215b1035ec53178fb327f11870bcdb9fb58e5c5 100644 (file)
@@ -73,10 +73,15 @@ _GenerateData( )
 }
 
 // -------------------------------------------------------------------------
-template< unsigned int D >
+template< unsigned int _Dim >
 std::string cpPluginsIO::ImageReader::
 _GD0( itk::ImageIOBase* io )
 {
+  typedef unsigned char  uchar;
+  typedef unsigned short ushort;
+  typedef unsigned int   uint;
+  typedef unsigned long  ulong;
+
   itk::ImageIOBase::IOComponentType ct = io->GetComponentType( );
   itk::ImageIOBase::IOPixelType pt = io->GetPixelType( );
 
@@ -85,16 +90,16 @@ _GD0( itk::ImageIOBase* io )
   {
     switch( ct )
     {
-    case itk::ImageIOBase::CHAR   : r = this->_GD1<           char, D >( io ); break;
-    case itk::ImageIOBase::SHORT  : r = this->_GD1<          short, D >( io ); break;
-    case itk::ImageIOBase::INT    : r = this->_GD1<            int, D >( io ); break;
-    case itk::ImageIOBase::LONG   : r = this->_GD1<           long, D >( io ); break;
-    case itk::ImageIOBase::FLOAT  : r = this->_GD1<          float, D >( io ); break;
-    case itk::ImageIOBase::DOUBLE : r = this->_GD1<         double, D >( io ); break;
-    case itk::ImageIOBase::UCHAR  : r = this->_GD1<  unsigned char, D >( io ); break;
-    case itk::ImageIOBase::USHORT : r = this->_GD1< unsigned short, D >( io ); break;
-    case itk::ImageIOBase::UINT   : r = this->_GD1<   unsigned int, D >( io ); break;
-    case itk::ImageIOBase::ULONG  : r = this->_GD1<  unsigned long, D >( io ); break;
+    case itk::ImageIOBase::CHAR   : r = this->_GD1<   char, _Dim >( io ); break;
+    case itk::ImageIOBase::SHORT  : r = this->_GD1<  short, _Dim >( io ); break;
+    case itk::ImageIOBase::INT    : r = this->_GD1<    int, _Dim >( io ); break;
+    case itk::ImageIOBase::LONG   : r = this->_GD1<   long, _Dim >( io ); break;
+    case itk::ImageIOBase::FLOAT  : r = this->_GD1<  float, _Dim >( io ); break;
+    case itk::ImageIOBase::DOUBLE : r = this->_GD1< double, _Dim >( io ); break;
+    case itk::ImageIOBase::UCHAR  : r = this->_GD1<  uchar, _Dim >( io ); break;
+    case itk::ImageIOBase::USHORT : r = this->_GD1< ushort, _Dim >( io ); break;
+    case itk::ImageIOBase::UINT   : r = this->_GD1<   uint, _Dim >( io ); break;
+    case itk::ImageIOBase::ULONG  : r = this->_GD1<  ulong, _Dim >( io ); break;
     default:
       r = "IO::ImageReader: Scalar pixel type not supported.";
       break;
@@ -104,16 +109,16 @@ _GD0( itk::ImageIOBase* io )
   {
     switch( ct )
     {
-    case itk::ImageIOBase::CHAR   : r = this->_GD1< itk::RGBPixel<           char >, D >( io ); break;
-    case itk::ImageIOBase::SHORT  : r = this->_GD1< itk::RGBPixel<          short >, D >( io ); break;
-    case itk::ImageIOBase::INT    : r = this->_GD1< itk::RGBPixel<            int >, D >( io ); break;
-    case itk::ImageIOBase::LONG   : r = this->_GD1< itk::RGBPixel<           long >, D >( io ); break;
-    case itk::ImageIOBase::FLOAT  : r = this->_GD1< itk::RGBPixel<          float >, D >( io ); break;
-    case itk::ImageIOBase::DOUBLE : r = this->_GD1< itk::RGBPixel<         double >, D >( io ); break;
-    case itk::ImageIOBase::UCHAR  : r = this->_GD1< itk::RGBPixel<  unsigned char >, D >( io ); break;
-    case itk::ImageIOBase::USHORT : r = this->_GD1< itk::RGBPixel< unsigned short >, D >( io ); break;
-    case itk::ImageIOBase::UINT   : r = this->_GD1< itk::RGBPixel<   unsigned int >, D >( io ); break;
-    case itk::ImageIOBase::ULONG  : r = this->_GD1< itk::RGBPixel<  unsigned long >, D >( io ); break;
+    case itk::ImageIOBase::CHAR   : r = this->_GD1< itk::RGBPixel<   char >, _Dim >( io ); break;
+    case itk::ImageIOBase::SHORT  : r = this->_GD1< itk::RGBPixel<  short >, _Dim >( io ); break;
+    case itk::ImageIOBase::INT    : r = this->_GD1< itk::RGBPixel<    int >, _Dim >( io ); break;
+    case itk::ImageIOBase::LONG   : r = this->_GD1< itk::RGBPixel<   long >, _Dim >( io ); break;
+    case itk::ImageIOBase::FLOAT  : r = this->_GD1< itk::RGBPixel<  float >, _Dim >( io ); break;
+    case itk::ImageIOBase::DOUBLE : r = this->_GD1< itk::RGBPixel< double >, _Dim >( io ); break;
+    case itk::ImageIOBase::UCHAR  : r = this->_GD1< itk::RGBPixel<  uchar >, _Dim >( io ); break;
+    case itk::ImageIOBase::USHORT : r = this->_GD1< itk::RGBPixel< ushort >, _Dim >( io ); break;
+    case itk::ImageIOBase::UINT   : r = this->_GD1< itk::RGBPixel<   uint >, _Dim >( io ); break;
+    case itk::ImageIOBase::ULONG  : r = this->_GD1< itk::RGBPixel<  ulong >, _Dim >( io ); break;
     default:
       r = "IO::ImageReader: RGB pixel type not supported.";
       break;
@@ -123,21 +128,32 @@ _GD0( itk::ImageIOBase* io )
   {
     switch( ct )
     {
-    case itk::ImageIOBase::CHAR   : r = this->_GD1< itk::RGBAPixel<           char >, D >( io ); break;
-    case itk::ImageIOBase::SHORT  : r = this->_GD1< itk::RGBAPixel<          short >, D >( io ); break;
-    case itk::ImageIOBase::INT    : r = this->_GD1< itk::RGBAPixel<            int >, D >( io ); break;
-    case itk::ImageIOBase::LONG   : r = this->_GD1< itk::RGBAPixel<           long >, D >( io ); break;
-    case itk::ImageIOBase::FLOAT  : r = this->_GD1< itk::RGBAPixel<          float >, D >( io ); break;
-    case itk::ImageIOBase::DOUBLE : r = this->_GD1< itk::RGBAPixel<         double >, D >( io ); break;
-    case itk::ImageIOBase::UCHAR  : r = this->_GD1< itk::RGBAPixel<  unsigned char >, D >( io ); break;
-    case itk::ImageIOBase::USHORT : r = this->_GD1< itk::RGBAPixel< unsigned short >, D >( io ); break;
-    case itk::ImageIOBase::UINT   : r = this->_GD1< itk::RGBAPixel<   unsigned int >, D >( io ); break;
-    case itk::ImageIOBase::ULONG  : r = this->_GD1< itk::RGBAPixel<  unsigned long >, D >( io ); break;
+    case itk::ImageIOBase::CHAR   : r = this->_GD1< itk::RGBAPixel<   char >, _Dim >( io ); break;
+    case itk::ImageIOBase::SHORT  : r = this->_GD1< itk::RGBAPixel<  short >, _Dim >( io ); break;
+    case itk::ImageIOBase::INT    : r = this->_GD1< itk::RGBAPixel<    int >, _Dim >( io ); break;
+    case itk::ImageIOBase::LONG   : r = this->_GD1< itk::RGBAPixel<   long >, _Dim >( io ); break;
+    case itk::ImageIOBase::FLOAT  : r = this->_GD1< itk::RGBAPixel<  float >, _Dim >( io ); break;
+    case itk::ImageIOBase::DOUBLE : r = this->_GD1< itk::RGBAPixel< double >, _Dim >( io ); break;
+    case itk::ImageIOBase::UCHAR  : r = this->_GD1< itk::RGBAPixel<  uchar >, _Dim >( io ); break;
+    case itk::ImageIOBase::USHORT : r = this->_GD1< itk::RGBAPixel< ushort >, _Dim >( io ); break;
+    case itk::ImageIOBase::UINT   : r = this->_GD1< itk::RGBAPixel<   uint >, _Dim >( io ); break;
+    case itk::ImageIOBase::ULONG  : r = this->_GD1< itk::RGBAPixel<  ulong >, _Dim >( io ); break;
     default:
       r = "IO::ImageReader: RGBA pixel type not supported.";
       break;
     } // hctiws
   }
+  else if( pt == itk::ImageIOBase::COMPLEX )
+  {
+    switch( ct )
+    {
+    case itk::ImageIOBase::FLOAT  : r = this->_GD1< std::complex<  float >, _Dim >( io ); break;
+    case itk::ImageIOBase::DOUBLE : r = this->_GD1< std::complex< double >, _Dim >( io ); break;
+    default:
+      r = "IO::ImageReader: complex pixel type not supported.";
+      break;
+    } // hctiws
+  }
   /* TODO
      else if( pt == itk::ImageIOBase::VECTOR )
      {
@@ -154,9 +170,6 @@ _GD0( itk::ImageIOBase* io )
      else if( pt == itk::ImageIOBase::DIFFUSIONTENSOR3D )
      {
      }
-     else if( pt == itk::ImageIOBase::COMPLEX )
-     {
-     }
      else if( pt == itk::ImageIOBase::OFFSET )
      {
      }
@@ -173,18 +186,18 @@ _GD0( itk::ImageIOBase* io )
 }
 
 // -------------------------------------------------------------------------
-template< class P, unsigned int D >
+template< class _TPixel, unsigned int _Dim >
 std::string cpPluginsIO::ImageReader::
 _GD1( itk::ImageIOBase* io )
 {
-  typedef itk::Image< P, D > _I;
+  typedef itk::Image< _TPixel, _Dim > _TImage;
 
   // Get filenames
   std::string r = "";
   auto fnames = this->m_Parameters.GetOpenFileNameList( "FileNames" );
   if( fnames.size( ) == 1 )
   {
-    auto f = this->_CreateITK< itk::ImageFileReader< _I > >( );
+    auto f = this->_CreateITK< itk::ImageFileReader< _TImage > >( );
     f->SetFileName( fnames[ 0 ] );
     f->SetImageIO( io );
     try
@@ -199,7 +212,7 @@ _GD1( itk::ImageIOBase* io )
   }
   else // if( fnames.size( ) > 1 )
   {
-    auto f = this->_CreateITK< itk::ImageSeriesReader< _I > >( );
+    auto f = this->_CreateITK< itk::ImageSeriesReader< _TImage > >( );
     for( auto i = fnames.begin( ); i != fnames.end( ); ++i )
       f->AddFileName( *i );
     f->SetImageIO( io );