X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcpPlugins%2FPlugins%2FImageReader.cxx;h=25bdc7ae43280419528a881e3e252ccc0b75b13c;hb=75740198fa0c55f8fdcd8b33ddff00071c893a94;hp=2d1ae0493887d5cc8976be55a595eea88b118420;hpb=9015cf98c60cf4ab304a639990004ee783a8bec0;p=cpPlugins.git diff --git a/lib/cpPlugins/Plugins/ImageReader.cxx b/lib/cpPlugins/Plugins/ImageReader.cxx index 2d1ae04..25bdc7a 100644 --- a/lib/cpPlugins/Plugins/ImageReader.cxx +++ b/lib/cpPlugins/Plugins/ImageReader.cxx @@ -3,9 +3,6 @@ #include -#undef ITK_MANUAL_INSTANTIATION -#include -#include #include #include @@ -56,11 +53,11 @@ _GenerateData( ) { switch( io->GetNumberOfDimensions( ) ) { - case 1: r = this->_GD0< 1 >( io, names ); break; case 2: r = this->_GD0< 2 >( io, names ); break; case 3: r = this->_GD0< 3 >( io, names ); break; + case 4: r = this->_GD0< 4 >( io, names ); break; default: - r = "ImageReader: Image dimension not supported."; + r = "ImageReader: Single image dimension not supported."; break; } // hctiws } @@ -70,8 +67,9 @@ _GenerateData( ) { 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: Image dimension not supported."; + r = "ImageReader: Multiple images dimension not supported."; break; } // hctiws @@ -90,105 +88,316 @@ template< unsigned int D > std::string cpPlugins::Plugins::ImageReader:: _GD0( itk::ImageIOBase* io, const TStringList& names ) { + itk::ImageIOBase::IOComponentType ct = io->GetComponentType( ); + itk::ImageIOBase::IOPixelType pt = io->GetPixelType( ); std::string r = ""; - switch( io->GetComponentType( ) ) + + if( pt == itk::ImageIOBase::SCALAR ) { - case itk::ImageIOBase::UCHAR: - r = this->_GD1< unsigned char, D >( io, names ); - break; - case itk::ImageIOBase::CHAR: - r = this->_GD1< char, D >( io, names ); - break; - case itk::ImageIOBase::USHORT: - r = this->_GD1< unsigned short, D >( io, names ); - break; - case itk::ImageIOBase::SHORT: - r = this->_GD1< short, D >( io, names ); - break; - case itk::ImageIOBase::UINT: - r = this->_GD1< unsigned int, D >( io, names ); - break; - case itk::ImageIOBase::INT: - r = this->_GD1< int, D >( io, names ); - break; - case itk::ImageIOBase::ULONG: - r = this->_GD1< unsigned long, D >( io, names ); - break; - case itk::ImageIOBase::LONG: - r = this->_GD1< long, D >( io, names ); - break; - case itk::ImageIOBase::FLOAT: - r = this->_GD1< float, D >( io, names ); - break; - case itk::ImageIOBase::DOUBLE: - r = this->_GD1< double, D >( io, names ); - break; - default: - r = "ImageReader: Atomic pixel type not supported."; - break; - } // hctiws - return( r ); -} + switch( ct ) + { + case itk::ImageIOBase::UCHAR: + r = this->_RealGD< unsigned char, D >( names ); + break; + case itk::ImageIOBase::CHAR: + r = this->_RealGD< char, D >( names ); + break; + case itk::ImageIOBase::USHORT: + r = this->_RealGD< unsigned short, D >( names ); + break; + case itk::ImageIOBase::SHORT: + r = this->_RealGD< short, D >( names ); + break; + case itk::ImageIOBase::UINT: + r = this->_RealGD< unsigned int, D >( names ); + break; + case itk::ImageIOBase::INT: + r = this->_RealGD< int, D >( names ); + break; + case itk::ImageIOBase::ULONG: + r = this->_RealGD< unsigned long, D >( names ); + break; + case itk::ImageIOBase::LONG: + r = this->_RealGD< long, D >( names ); + break; + case itk::ImageIOBase::FLOAT: + r = this->_RealGD< float, D >( names ); + break; + case itk::ImageIOBase::DOUBLE: + r = this->_RealGD< double, D >( names ); + break; + default: + r = "ImageReader: Scalar pixel type not supported."; + break; + } // hctiws + } + else if( pt == itk::ImageIOBase::RGB ) + { + if( D == 2 ) + { + switch( ct ) + { + case itk::ImageIOBase::UCHAR: + r = this->_RealGD< itk::RGBPixel< unsigned char >, 2 >( names ); + break; + case itk::ImageIOBase::CHAR: + r = this->_RealGD< itk::RGBPixel< char >, 2 >( names ); + break; + case itk::ImageIOBase::USHORT: + r = this->_RealGD< itk::RGBPixel< unsigned short >, 2 >( names ); + break; + case itk::ImageIOBase::SHORT: + r = this->_RealGD< itk::RGBPixel< short >, 2 >( names ); + break; + default: + r = "ImageReader: Scalar pixel type not supported."; + break; + } // hctiws + } + else if( D == 3 ) + { + switch( ct ) + { + case itk::ImageIOBase::UCHAR: + r = this->_RealGD< itk::RGBPixel< unsigned char >, 3 >( names ); + break; + case itk::ImageIOBase::CHAR: + r = this->_RealGD< itk::RGBPixel< char >, 3 >( names ); + break; + case itk::ImageIOBase::USHORT: + r = this->_RealGD< itk::RGBPixel< unsigned short >, 3 >( names ); + break; + case itk::ImageIOBase::SHORT: + r = this->_RealGD< itk::RGBPixel< short >, 3 >( names ); + break; + default: + r = "ImageReader: Scalar pixel type not supported."; + break; + } // hctiws + } + else if( D == 4 ) + { + switch( ct ) + { + case itk::ImageIOBase::UCHAR: + r = this->_RealGD< itk::RGBPixel< unsigned char >, 4 >( names ); + break; + case itk::ImageIOBase::CHAR: + r = this->_RealGD< itk::RGBPixel< char >, 4 >( names ); + break; + case itk::ImageIOBase::USHORT: + r = this->_RealGD< itk::RGBPixel< unsigned short >, 4 >( names ); + break; + case itk::ImageIOBase::SHORT: + r = this->_RealGD< itk::RGBPixel< short >, 4 >( names ); + break; + default: + r = "ImageReader: Scalar pixel type not supported."; + break; + } // hctiws -// ------------------------------------------------------------------------- -template< class P, unsigned int D > -std::string cpPlugins::Plugins::ImageReader:: -_GD1( itk::ImageIOBase* io, const TStringList& names ) -{ - std::string r = ""; - switch( io->GetPixelType( ) ) + } // fi + } + else if( pt == itk::ImageIOBase::RGBA ) + { + if( D == 2 ) + { + switch( ct ) + { + case itk::ImageIOBase::UCHAR: + r = this->_RealGD< itk::RGBAPixel< unsigned char >, 2 >( names ); + break; + case itk::ImageIOBase::CHAR: + r = this->_RealGD< itk::RGBAPixel< char >, 2 >( names ); + break; + case itk::ImageIOBase::USHORT: + r = this->_RealGD< itk::RGBAPixel< unsigned short >, 2 >( names ); + break; + case itk::ImageIOBase::SHORT: + r = this->_RealGD< itk::RGBAPixel< short >, 2 >( names ); + break; + default: + r = "ImageReader: Scalar pixel type not supported."; + break; + } // hctiws + } + else if( D == 3 ) + { + switch( ct ) + { + case itk::ImageIOBase::UCHAR: + r = this->_RealGD< itk::RGBAPixel< unsigned char >, 3 >( names ); + break; + case itk::ImageIOBase::CHAR: + r = this->_RealGD< itk::RGBAPixel< char >, 3 >( names ); + break; + case itk::ImageIOBase::USHORT: + r = this->_RealGD< itk::RGBAPixel< unsigned short >, 3 >( names ); + break; + case itk::ImageIOBase::SHORT: + r = this->_RealGD< itk::RGBAPixel< short >, 3 >( names ); + break; + default: + r = "ImageReader: Scalar pixel type not supported."; + break; + } // hctiws + } + else if( D == 4 ) + { + switch( ct ) + { + case itk::ImageIOBase::UCHAR: + r = this->_RealGD< itk::RGBAPixel< unsigned char >, 4 >( names ); + break; + case itk::ImageIOBase::CHAR: + r = this->_RealGD< itk::RGBAPixel< char >, 4 >( names ); + break; + case itk::ImageIOBase::USHORT: + r = this->_RealGD< itk::RGBAPixel< unsigned short >, 4 >( names ); + break; + case itk::ImageIOBase::SHORT: + r = this->_RealGD< itk::RGBAPixel< short >, 4 >( names ); + break; + default: + r = "ImageReader: Scalar pixel type not supported."; + break; + } // hctiws + + } // fi + } + else if( pt == itk::ImageIOBase::OFFSET ) { - case itk::ImageIOBase::SCALAR: - r = this->_GD2< P, D >( names ); - break; - case itk::ImageIOBase::RGB: - r = this->_GD2< itk::RGBPixel< P >, D >( names ); - break; - case itk::ImageIOBase::RGBA: - r = this->_GD2< itk::RGBAPixel< P >, D >( names ); - break; - /* TODO - case itk::ImageIOBase::OFFSET: - r = this->_GD2< itk::Offset< P >, D >( names ); - break; - case itk::ImageIOBase::VECTOR: - r = this->_GD2< P, D >( names ); - break; - case itk::ImageIOBase::POINT: - r = this->_GD2< P, D >( names ); - break; - case itk::ImageIOBase::COVARIANTVECTOR: - r = this->_GD2< P, D >( names ); - break; - case itk::ImageIOBase::SYMMETRICSECONDRANKTENSOR: - r = this->_GD2< P, D >( names ); - break; - case itk::ImageIOBase::DIFFUSIONTENSOR3D: - r = this->_GD2< P, D >( names ); - break; - */ - /* TODO - case itk::ImageIOBase::COMPLEX: - r = this->_GD2< std::complex< P >, D >( names ); - break; - case itk::ImageIOBase::FIXEDARRAY: - r = this->_GD2< P, D >( names ); - break; - case itk::ImageIOBase::MATRIX: - r = this->_GD2< P, D >( names ); - break; - */ - default: - r = "ImageReader: Pixel type not supported."; - break; - } // hctiws + switch( D ) + { + case 2: + r = this->_RealGD< itk::Offset< 2 >, 2 >( names ); + break; + case 3: + r = this->_RealGD< itk::Offset< 3 >, 3 >( names ); + break; + case 4: + r = this->_RealGD< itk::Offset< 4 >, 4 >( names ); + break; + default: + r = "ImageReader: Offset pixel dimension not supported."; + break; + } // hctiws + } + else if( pt == itk::ImageIOBase::VECTOR ) + { + switch( ct ) + { + case itk::ImageIOBase::FLOAT: + r = this->_RealGD< itk::Vector< float, D >, D >( names ); + break; + case itk::ImageIOBase::DOUBLE: + r = this->_RealGD< itk::Vector< double, D >, D >( names ); + break; + default: + r = "ImageReader: Vector type not supported."; + break; + } // hctiws + } + else if( pt == itk::ImageIOBase::POINT ) + { + switch( ct ) + { + case itk::ImageIOBase::FLOAT: + r = this->_RealGD< itk::Point< float, D >, D >( names ); + break; + case itk::ImageIOBase::DOUBLE: + r = this->_RealGD< itk::Point< double, D >, D >( names ); + break; + default: + r = "ImageReader: Point type not supported."; + break; + } // hctiws + } + else if( pt == itk::ImageIOBase::COVARIANTVECTOR ) + { + switch( ct ) + { + case itk::ImageIOBase::FLOAT: + r = this->_RealGD< itk::CovariantVector< float, D >, D >( names ); + break; + case itk::ImageIOBase::DOUBLE: + r = this->_RealGD< itk::CovariantVector< double, D >, D >( names ); + break; + default: + r = "ImageReader: Vector type not supported."; + break; + } // hctiws + } + else if( pt == itk::ImageIOBase::SYMMETRICSECONDRANKTENSOR ) + { + switch( ct ) + { + case itk::ImageIOBase::FLOAT: + r = + this->_RealGD< itk::SymmetricSecondRankTensor< float, D >, D >( + names + ); + break; + case itk::ImageIOBase::DOUBLE: + r = + this->_RealGD< itk::SymmetricSecondRankTensor< double, D >, D >( + names + ); + break; + default: + r = "ImageReader: Vector type not supported."; + break; + } // hctiws + } + else if( pt == itk::ImageIOBase::DIFFUSIONTENSOR3D ) + { + if( D == 3 ) + { + switch( ct ) + { + case itk::ImageIOBase::FLOAT: + r = this->_RealGD< itk::DiffusionTensor3D< float >, 3 >( names ); + break; + case itk::ImageIOBase::DOUBLE: + r = this->_RealGD< itk::DiffusionTensor3D< double >, 3 >( names ); + break; + default: + r = "ImageReader: Diffusion tensor type not supported."; + break; + } // hctiws + } + else + r = "ImageReader: Diffusion tensor dimension not supported."; + } + else if( pt == itk::ImageIOBase::COMPLEX ) + { + switch( ct ) + { + case itk::ImageIOBase::FLOAT: + r = this->_RealGD< std::complex< float >, D >( names ); + break; + case itk::ImageIOBase::DOUBLE: + r = this->_RealGD< std::complex< double >, D >( names ); + break; + default: + r = "ImageReader: Complex type not supported."; + break; + } // hctiws + } + else + r = "ImageReader: Image pixel type not yet supported."; + /* TODO + itk::ImageIOBase::FIXEDARRAY + itk::ImageIOBase::MATRIX + */ + return( r ); } // ------------------------------------------------------------------------- template< class P, unsigned int D > std::string cpPlugins::Plugins::ImageReader:: -_GD2( const TStringList& names ) +_RealGD( const TStringList& names ) { typedef itk::Image< P, D > _I; @@ -210,12 +419,22 @@ _GD2( const TStringList& names ) try { reader->Update( ); - this->m_Outputs[ 0 ]->SetITKDataObject( reader->GetOutput( ) ); + 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."; } catch( itk::ExceptionObject& err ) { r = "ImageReader: " + std::string( err.GetDescription( ) ); - this->m_Outputs[ 0 ]->SetITKDataObject( NULL ); + cpPlugins::Interface::Image* out = + this->_Output< cpPlugins::Interface::Image >( 0 ); + if( out != NULL ) + out->SetITKImage< _I >( NULL ); + else + r = "ImageReader: output not correctly created."; } // yrt } @@ -242,12 +461,22 @@ _GD2( const TStringList& names ) try { reader->Update( ); - this->m_Outputs[ 0 ]->SetITKDataObject( reader->GetOutput( ) ); + 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."; } catch( itk::ExceptionObject& err ) { r = "ImageReader: " + std::string( err.GetDescription( ) ); - this->m_Outputs[ 0 ]->SetITKDataObject( NULL ); + cpPlugins::Interface::Image* out = + this->_Output< cpPlugins::Interface::Image >( 0 ); + if( out != NULL ) + out->SetITKImage< _I >( NULL ); + else + r = "ImageReader: output not correctly created."; } // yrt }