X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=tools%2FclitkImageConvertGenericFilter.cxx;h=e8d8efb79d9f8c6a54d9cc1b5f37e0401d613c75;hb=5bea196497686f70796822951af654373cba9f97;hp=b36ba044b30353c660300c1660d02df3276c7c15;hpb=0fe907bc305f611ba8bc2ab95e287658efaefede;p=clitk.git diff --git a/tools/clitkImageConvertGenericFilter.cxx b/tools/clitkImageConvertGenericFilter.cxx index b36ba04..e8d8efb 100644 --- a/tools/clitkImageConvertGenericFilter.cxx +++ b/tools/clitkImageConvertGenericFilter.cxx @@ -19,18 +19,16 @@ #define CLITKIMAGECONVERTGENERICFILTER_CXX #include "clitkImageConvertGenericFilter.h" -// itk include -#include "itkCastImageFilter.h" -#include "itkVectorCastImageFilter.h" //-------------------------------------------------------------------- clitk::ImageConvertGenericFilter::ImageConvertGenericFilter(): clitk::ImageToImageGenericFilter("ImageConvert") { mOutputPixelTypeName = "NotSpecified"; - mWarningOccur = false; - mWarning = ""; mDisplayWarning = true; + mWarning = ""; + mWarningOccur = false; + InitializeImageType<2>(); InitializeImageType<3>(); InitializeImageType<4>(); @@ -43,20 +41,10 @@ template void clitk::ImageConvertGenericFilter::InitializeImageType() { ADD_DEFAULT_IMAGE_TYPES(Dim); - ADD_VEC_IMAGE_TYPE(Dim, 2, char) - ADD_VEC_IMAGE_TYPE(Dim, 3, char) - ADD_VEC_IMAGE_TYPE(Dim, 2, unsigned char) - ADD_VEC_IMAGE_TYPE(Dim, 3, unsigned char) - ADD_VEC_IMAGE_TYPE(Dim, 2, short) - ADD_VEC_IMAGE_TYPE(Dim, 3, short) - ADD_VEC_IMAGE_TYPE(Dim, 2, unsigned short) - ADD_VEC_IMAGE_TYPE(Dim, 3, unsigned short) - ADD_VEC_IMAGE_TYPE(Dim, 2, int) - ADD_VEC_IMAGE_TYPE(Dim, 3, int) - ADD_VEC_IMAGE_TYPE(Dim, 2, float) - ADD_VEC_IMAGE_TYPE(Dim, 3, float) - ADD_VEC_IMAGE_TYPE(Dim, 2, double) - ADD_VEC_IMAGE_TYPE(Dim, 3, double) + ADD_VEC_IMAGE_TYPE(Dim, 2, float); + ADD_VEC_IMAGE_TYPE(Dim, 3, float); + ADD_VEC_IMAGE_TYPE(Dim, 2, double); + ADD_VEC_IMAGE_TYPE(Dim, 3, double); } //-------------------------------------------------------------------- @@ -65,7 +53,6 @@ void clitk::ImageConvertGenericFilter::InitializeImageType() template void clitk::ImageConvertGenericFilter::UpdateWithInputImageType() { - // Verbose stuff if (m_IOVerbose) { if (m_InputFilenames.size() == 1) { @@ -83,471 +70,58 @@ void clitk::ImageConvertGenericFilter::UpdateWithInputImageType() } } - if ((m_PixelTypeName == mOutputPixelTypeName) || (mOutputPixelTypeName == "NotSpecified")) { - // typename InputImageType::Pointer input = clitk::readImage(m_InputFilenames); typename InputImageType::Pointer input = this->template GetInput(0); - //clitk::writeImage(input, mOutputFilename, m_IOVerbose); this->SetNextOutput(input); } else { -#define TRY_TYPE(TYPE) \ - if (IsSameType(mOutputPixelTypeName)) { UpdateWithOutputType(); return; } - TRY_TYPE(char); - // TRY_TYPE(signed char); - TRY_TYPE(uchar); - TRY_TYPE(short); - TRY_TYPE(ushort); - TRY_TYPE(int); // no uint ... - TRY_TYPE(float); - TRY_TYPE(double); -#undef TRY_TYPE - - IsSameType("char"); - - std::string list = CreateListOfTypes(); - std::cerr << "Error, I don't know the output type '" << mOutputPixelTypeName << " (input = " << m_PixelTypeName << ")" - << "'. " << std::endl << "Known types are " << list << "." << std::endl; - exit(0); - } -} -//==================================================================== - -//==================================================================== -template -void clitk::ImageConvertGenericFilter::UpdateWithOutputType() -{ - // Read - typename InputImageType::Pointer input =this->template GetInput(0); - - // Typedef - typedef typename InputImageType::PixelType PixelType; - - // Warning - std::ostringstream osstream; - if (std::numeric_limits::is_signed) { - if (!std::numeric_limits::is_signed) { - osstream << "Warning, input type is signed (" << m_PixelTypeName << ") while output type is not (" - << mOutputPixelTypeName << "), use at your own responsability." << std::endl; - mWarningOccur = true; - } - } - if (!std::numeric_limits::is_integer) { - if (std::numeric_limits::is_integer) { - osstream << "Warning, input type is not integer (" << m_PixelTypeName << ") while output type is (" - << mOutputPixelTypeName << "), use at your own responsability." << std::endl; - mWarningOccur = true; - } - } - // DD(std::numeric_limits::digits10); - // DD(std::numeric_limits::digits10); - if (!std::numeric_limits::is_integer) { - if (std::numeric_limits::is_integer) { - osstream << "Warning, input type is not integer (" << m_PixelTypeName << ") while output type is (" - << mOutputPixelTypeName << "), use at your own responsability." << std::endl; - mWarningOccur = true; - } - } - if (std::numeric_limits::digits10 > std::numeric_limits::digits10) { - osstream << "Warning, possible loss of precision : input type is (" << m_PixelTypeName << ") while output type is (" - << mOutputPixelTypeName << "), use at your own responsability." << std::endl; - mWarningOccur = true; - } - - mWarning = osstream.str(); - if (mDisplayWarning) { - std::cerr << mWarning; + // "trick" to call independent versions of update according to the + // pixel type (vector or scalar), using partial specializations + if (!UpdateWithSelectiveOutputType::IS_VECTOR>::Run(*this, mOutputPixelTypeName)) + exit(-1); } - - // Cast - typedef itk::Image OutputImageType; - typedef itk::CastImageFilter FilterType; - typename FilterType::Pointer filter = FilterType::New(); - filter->SetInput(input); - filter->Update(); - - // Write - SetNextOutput(filter->GetOutput()); - //clitk::writeImage(filter->GetOutput(), mOutputFilename, m_IOVerbose); } //==================================================================== -// Vector specializations (RP: do we need so many?) - -#define VEC_UPDATE_IMPL(TYPE_IN, COMP, DIM, TYPE_OUT) \ - template<> \ - void clitk::ImageConvertGenericFilter::UpdateWithOutputType, DIM>, TYPE_OUT>() \ - { \ - UpdateWithOutputVectorType, DIM>, TYPE_OUT>(); \ - } - -VEC_UPDATE_IMPL(char, 2, 2, unsigned char); -VEC_UPDATE_IMPL(char, 2, 3, unsigned char); -VEC_UPDATE_IMPL(char, 2, 4, unsigned char); -VEC_UPDATE_IMPL(char, 2, 2, char); -VEC_UPDATE_IMPL(char, 2, 3, char); -VEC_UPDATE_IMPL(char, 2, 4, char); -VEC_UPDATE_IMPL(char, 2, 2, unsigned short); -VEC_UPDATE_IMPL(char, 2, 3, unsigned short); -VEC_UPDATE_IMPL(char, 2, 4, unsigned short); -VEC_UPDATE_IMPL(char, 2, 2, short); -VEC_UPDATE_IMPL(char, 2, 3, short); -VEC_UPDATE_IMPL(char, 2, 4, short); -VEC_UPDATE_IMPL(char, 2, 2, int); -VEC_UPDATE_IMPL(char, 2, 3, int); -VEC_UPDATE_IMPL(char, 2, 4, int); -VEC_UPDATE_IMPL(char, 2, 2, float); -VEC_UPDATE_IMPL(char, 2, 3, float); -VEC_UPDATE_IMPL(char, 2, 4, float); -VEC_UPDATE_IMPL(char, 2, 2, double); -VEC_UPDATE_IMPL(char, 2, 3, double); -VEC_UPDATE_IMPL(char, 2, 4, double); - -VEC_UPDATE_IMPL(char, 3, 2, unsigned char); -VEC_UPDATE_IMPL(char, 3, 3, unsigned char); -VEC_UPDATE_IMPL(char, 3, 4, unsigned char); -VEC_UPDATE_IMPL(char, 3, 2, char); -VEC_UPDATE_IMPL(char, 3, 3, char); -VEC_UPDATE_IMPL(char, 3, 4, char); -VEC_UPDATE_IMPL(char, 3, 2, unsigned short); -VEC_UPDATE_IMPL(char, 3, 3, unsigned short); -VEC_UPDATE_IMPL(char, 3, 4, unsigned short); -VEC_UPDATE_IMPL(char, 3, 2, short); -VEC_UPDATE_IMPL(char, 3, 3, short); -VEC_UPDATE_IMPL(char, 3, 4, short); -VEC_UPDATE_IMPL(char, 3, 2, int); -VEC_UPDATE_IMPL(char, 3, 3, int); -VEC_UPDATE_IMPL(char, 3, 4, int); -VEC_UPDATE_IMPL(char, 3, 2, float); -VEC_UPDATE_IMPL(char, 3, 3, float); -VEC_UPDATE_IMPL(char, 3, 4, float); -VEC_UPDATE_IMPL(char, 3, 2, double); -VEC_UPDATE_IMPL(char, 3, 3, double); -VEC_UPDATE_IMPL(char, 3, 4, double); - -VEC_UPDATE_IMPL(unsigned char, 2, 2, unsigned char); -VEC_UPDATE_IMPL(unsigned char, 2, 3, unsigned char); -VEC_UPDATE_IMPL(unsigned char, 2, 4, unsigned char); -VEC_UPDATE_IMPL(unsigned char, 2, 2, char); -VEC_UPDATE_IMPL(unsigned char, 2, 3, char); -VEC_UPDATE_IMPL(unsigned char, 2, 4, char); -VEC_UPDATE_IMPL(unsigned char, 2, 2, unsigned short); -VEC_UPDATE_IMPL(unsigned char, 2, 3, unsigned short); -VEC_UPDATE_IMPL(unsigned char, 2, 4, unsigned short); -VEC_UPDATE_IMPL(unsigned char, 2, 2, short); -VEC_UPDATE_IMPL(unsigned char, 2, 3, short); -VEC_UPDATE_IMPL(unsigned char, 2, 4, short); -VEC_UPDATE_IMPL(unsigned char, 2, 2, int); -VEC_UPDATE_IMPL(unsigned char, 2, 3, int); -VEC_UPDATE_IMPL(unsigned char, 2, 4, int); -VEC_UPDATE_IMPL(unsigned char, 2, 2, float); -VEC_UPDATE_IMPL(unsigned char, 2, 3, float); -VEC_UPDATE_IMPL(unsigned char, 2, 4, float); -VEC_UPDATE_IMPL(unsigned char, 2, 2, double); -VEC_UPDATE_IMPL(unsigned char, 2, 3, double); -VEC_UPDATE_IMPL(unsigned char, 2, 4, double); - -VEC_UPDATE_IMPL(unsigned char, 3, 2, unsigned char); -VEC_UPDATE_IMPL(unsigned char, 3, 3, unsigned char); -VEC_UPDATE_IMPL(unsigned char, 3, 4, unsigned char); -VEC_UPDATE_IMPL(unsigned char, 3, 2, char); -VEC_UPDATE_IMPL(unsigned char, 3, 3, char); -VEC_UPDATE_IMPL(unsigned char, 3, 4, char); -VEC_UPDATE_IMPL(unsigned char, 3, 2, unsigned short); -VEC_UPDATE_IMPL(unsigned char, 3, 3, unsigned short); -VEC_UPDATE_IMPL(unsigned char, 3, 4, unsigned short); -VEC_UPDATE_IMPL(unsigned char, 3, 2, short); -VEC_UPDATE_IMPL(unsigned char, 3, 3, short); -VEC_UPDATE_IMPL(unsigned char, 3, 4, short); -VEC_UPDATE_IMPL(unsigned char, 3, 2, int); -VEC_UPDATE_IMPL(unsigned char, 3, 3, int); -VEC_UPDATE_IMPL(unsigned char, 3, 4, int); -VEC_UPDATE_IMPL(unsigned char, 3, 2, float); -VEC_UPDATE_IMPL(unsigned char, 3, 3, float); -VEC_UPDATE_IMPL(unsigned char, 3, 4, float); -VEC_UPDATE_IMPL(unsigned char, 3, 2, double); -VEC_UPDATE_IMPL(unsigned char, 3, 3, double); -VEC_UPDATE_IMPL(unsigned char, 3, 4, double); - -VEC_UPDATE_IMPL(short, 2, 2, unsigned char); -VEC_UPDATE_IMPL(short, 2, 3, unsigned char); -VEC_UPDATE_IMPL(short, 2, 4, unsigned char); -VEC_UPDATE_IMPL(short, 2, 2, char); -VEC_UPDATE_IMPL(short, 2, 3, char); -VEC_UPDATE_IMPL(short, 2, 4, char); -VEC_UPDATE_IMPL(short, 2, 2, unsigned short); -VEC_UPDATE_IMPL(short, 2, 3, unsigned short); -VEC_UPDATE_IMPL(short, 2, 4, unsigned short); -VEC_UPDATE_IMPL(short, 2, 2, short); -VEC_UPDATE_IMPL(short, 2, 3, short); -VEC_UPDATE_IMPL(short, 2, 4, short); -VEC_UPDATE_IMPL(short, 2, 2, int); -VEC_UPDATE_IMPL(short, 2, 3, int); -VEC_UPDATE_IMPL(short, 2, 4, int); -VEC_UPDATE_IMPL(short, 2, 2, float); -VEC_UPDATE_IMPL(short, 2, 3, float); -VEC_UPDATE_IMPL(short, 2, 4, float); -VEC_UPDATE_IMPL(short, 2, 2, double); -VEC_UPDATE_IMPL(short, 2, 3, double); -VEC_UPDATE_IMPL(short, 2, 4, double); - -VEC_UPDATE_IMPL(short, 3, 2, unsigned char); -VEC_UPDATE_IMPL(short, 3, 3, unsigned char); -VEC_UPDATE_IMPL(short, 3, 4, unsigned char); -VEC_UPDATE_IMPL(short, 3, 2, char); -VEC_UPDATE_IMPL(short, 3, 3, char); -VEC_UPDATE_IMPL(short, 3, 4, char); -VEC_UPDATE_IMPL(short, 3, 2, unsigned short); -VEC_UPDATE_IMPL(short, 3, 3, unsigned short); -VEC_UPDATE_IMPL(short, 3, 4, unsigned short); -VEC_UPDATE_IMPL(short, 3, 2, short); -VEC_UPDATE_IMPL(short, 3, 3, short); -VEC_UPDATE_IMPL(short, 3, 4, short); -VEC_UPDATE_IMPL(short, 3, 2, int); -VEC_UPDATE_IMPL(short, 3, 3, int); -VEC_UPDATE_IMPL(short, 3, 4, int); -VEC_UPDATE_IMPL(short, 3, 2, float); -VEC_UPDATE_IMPL(short, 3, 3, float); -VEC_UPDATE_IMPL(short, 3, 4, float); -VEC_UPDATE_IMPL(short, 3, 2, double); -VEC_UPDATE_IMPL(short, 3, 3, double); -VEC_UPDATE_IMPL(short, 3, 4, double); - -VEC_UPDATE_IMPL(unsigned short, 2, 2, unsigned char); -VEC_UPDATE_IMPL(unsigned short, 2, 3, unsigned char); -VEC_UPDATE_IMPL(unsigned short, 2, 4, unsigned char); -VEC_UPDATE_IMPL(unsigned short, 2, 2, char); -VEC_UPDATE_IMPL(unsigned short, 2, 3, char); -VEC_UPDATE_IMPL(unsigned short, 2, 4, char); -VEC_UPDATE_IMPL(unsigned short, 2, 2, unsigned short); -VEC_UPDATE_IMPL(unsigned short, 2, 3, unsigned short); -VEC_UPDATE_IMPL(unsigned short, 2, 4, unsigned short); -VEC_UPDATE_IMPL(unsigned short, 2, 2, short); -VEC_UPDATE_IMPL(unsigned short, 2, 3, short); -VEC_UPDATE_IMPL(unsigned short, 2, 4, short); -VEC_UPDATE_IMPL(unsigned short, 2, 2, int); -VEC_UPDATE_IMPL(unsigned short, 2, 3, int); -VEC_UPDATE_IMPL(unsigned short, 2, 4, int); -VEC_UPDATE_IMPL(unsigned short, 2, 2, float); -VEC_UPDATE_IMPL(unsigned short, 2, 3, float); -VEC_UPDATE_IMPL(unsigned short, 2, 4, float); -VEC_UPDATE_IMPL(unsigned short, 2, 2, double); -VEC_UPDATE_IMPL(unsigned short, 2, 3, double); -VEC_UPDATE_IMPL(unsigned short, 2, 4, double); - -VEC_UPDATE_IMPL(unsigned short, 3, 2, unsigned char); -VEC_UPDATE_IMPL(unsigned short, 3, 3, unsigned char); -VEC_UPDATE_IMPL(unsigned short, 3, 4, unsigned char); -VEC_UPDATE_IMPL(unsigned short, 3, 2, char); -VEC_UPDATE_IMPL(unsigned short, 3, 3, char); -VEC_UPDATE_IMPL(unsigned short, 3, 4, char); -VEC_UPDATE_IMPL(unsigned short, 3, 2, unsigned short); -VEC_UPDATE_IMPL(unsigned short, 3, 3, unsigned short); -VEC_UPDATE_IMPL(unsigned short, 3, 4, unsigned short); -VEC_UPDATE_IMPL(unsigned short, 3, 2, short); -VEC_UPDATE_IMPL(unsigned short, 3, 3, short); -VEC_UPDATE_IMPL(unsigned short, 3, 4, short); -VEC_UPDATE_IMPL(unsigned short, 3, 2, int); -VEC_UPDATE_IMPL(unsigned short, 3, 3, int); -VEC_UPDATE_IMPL(unsigned short, 3, 4, int); -VEC_UPDATE_IMPL(unsigned short, 3, 2, float); -VEC_UPDATE_IMPL(unsigned short, 3, 3, float); -VEC_UPDATE_IMPL(unsigned short, 3, 4, float); -VEC_UPDATE_IMPL(unsigned short, 3, 2, double); -VEC_UPDATE_IMPL(unsigned short, 3, 3, double); -VEC_UPDATE_IMPL(unsigned short, 3, 4, double); - -VEC_UPDATE_IMPL(int, 2, 2, unsigned char); -VEC_UPDATE_IMPL(int, 2, 3, unsigned char); -VEC_UPDATE_IMPL(int, 2, 4, unsigned char); -VEC_UPDATE_IMPL(int, 2, 2, char); -VEC_UPDATE_IMPL(int, 2, 3, char); -VEC_UPDATE_IMPL(int, 2, 4, char); -VEC_UPDATE_IMPL(int, 2, 2, unsigned short); -VEC_UPDATE_IMPL(int, 2, 3, unsigned short); -VEC_UPDATE_IMPL(int, 2, 4, unsigned short); -VEC_UPDATE_IMPL(int, 2, 2, short); -VEC_UPDATE_IMPL(int, 2, 3, short); -VEC_UPDATE_IMPL(int, 2, 4, short); -VEC_UPDATE_IMPL(int, 2, 2, int); -VEC_UPDATE_IMPL(int, 2, 3, int); -VEC_UPDATE_IMPL(int, 2, 4, int); -VEC_UPDATE_IMPL(int, 2, 2, float); -VEC_UPDATE_IMPL(int, 2, 3, float); -VEC_UPDATE_IMPL(int, 2, 4, float); -VEC_UPDATE_IMPL(int, 2, 2, double); -VEC_UPDATE_IMPL(int, 2, 3, double); -VEC_UPDATE_IMPL(int, 2, 4, double); - -VEC_UPDATE_IMPL(int, 3, 2, unsigned char); -VEC_UPDATE_IMPL(int, 3, 3, unsigned char); -VEC_UPDATE_IMPL(int, 3, 4, unsigned char); -VEC_UPDATE_IMPL(int, 3, 2, char); -VEC_UPDATE_IMPL(int, 3, 3, char); -VEC_UPDATE_IMPL(int, 3, 4, char); -VEC_UPDATE_IMPL(int, 3, 2, unsigned short); -VEC_UPDATE_IMPL(int, 3, 3, unsigned short); -VEC_UPDATE_IMPL(int, 3, 4, unsigned short); -VEC_UPDATE_IMPL(int, 3, 2, short); -VEC_UPDATE_IMPL(int, 3, 3, short); -VEC_UPDATE_IMPL(int, 3, 4, short); -VEC_UPDATE_IMPL(int, 3, 2, int); -VEC_UPDATE_IMPL(int, 3, 3, int); -VEC_UPDATE_IMPL(int, 3, 4, int); -VEC_UPDATE_IMPL(int, 3, 2, float); -VEC_UPDATE_IMPL(int, 3, 3, float); -VEC_UPDATE_IMPL(int, 3, 4, float); -VEC_UPDATE_IMPL(int, 3, 2, double); -VEC_UPDATE_IMPL(int, 3, 3, double); -VEC_UPDATE_IMPL(int, 3, 4, double); - -VEC_UPDATE_IMPL(float, 2, 2, unsigned char); -VEC_UPDATE_IMPL(float, 2, 3, unsigned char); -VEC_UPDATE_IMPL(float, 2, 4, unsigned char); -VEC_UPDATE_IMPL(float, 2, 2, char); -VEC_UPDATE_IMPL(float, 2, 3, char); -VEC_UPDATE_IMPL(float, 2, 4, char); -VEC_UPDATE_IMPL(float, 2, 2, unsigned short); -VEC_UPDATE_IMPL(float, 2, 3, unsigned short); -VEC_UPDATE_IMPL(float, 2, 4, unsigned short); -VEC_UPDATE_IMPL(float, 2, 2, short); -VEC_UPDATE_IMPL(float, 2, 3, short); -VEC_UPDATE_IMPL(float, 2, 4, short); -VEC_UPDATE_IMPL(float, 2, 2, int); -VEC_UPDATE_IMPL(float, 2, 3, int); -VEC_UPDATE_IMPL(float, 2, 4, int); -VEC_UPDATE_IMPL(float, 2, 2, float); -VEC_UPDATE_IMPL(float, 2, 3, float); -VEC_UPDATE_IMPL(float, 2, 4, float); -VEC_UPDATE_IMPL(float, 2, 2, double); -VEC_UPDATE_IMPL(float, 2, 3, double); -VEC_UPDATE_IMPL(float, 2, 4, double); - -VEC_UPDATE_IMPL(float, 3, 2, unsigned char); -VEC_UPDATE_IMPL(float, 3, 3, unsigned char); -VEC_UPDATE_IMPL(float, 3, 4, unsigned char); -VEC_UPDATE_IMPL(float, 3, 2, char); -VEC_UPDATE_IMPL(float, 3, 3, char); -VEC_UPDATE_IMPL(float, 3, 4, char); -VEC_UPDATE_IMPL(float, 3, 2, unsigned short); -VEC_UPDATE_IMPL(float, 3, 3, unsigned short); -VEC_UPDATE_IMPL(float, 3, 4, unsigned short); -VEC_UPDATE_IMPL(float, 3, 2, short); -VEC_UPDATE_IMPL(float, 3, 3, short); -VEC_UPDATE_IMPL(float, 3, 4, short); -VEC_UPDATE_IMPL(float, 3, 2, int); -VEC_UPDATE_IMPL(float, 3, 3, int); -VEC_UPDATE_IMPL(float, 3, 4, int); -VEC_UPDATE_IMPL(float, 3, 2, float); -VEC_UPDATE_IMPL(float, 3, 3, float); -VEC_UPDATE_IMPL(float, 3, 4, float); -VEC_UPDATE_IMPL(float, 3, 2, double); -VEC_UPDATE_IMPL(float, 3, 3, double); -VEC_UPDATE_IMPL(float, 3, 4, double); - - -VEC_UPDATE_IMPL(double, 2, 2, unsigned char); -VEC_UPDATE_IMPL(double, 2, 3, unsigned char); -VEC_UPDATE_IMPL(double, 2, 4, unsigned char); -VEC_UPDATE_IMPL(double, 2, 2, char); -VEC_UPDATE_IMPL(double, 2, 3, char); -VEC_UPDATE_IMPL(double, 2, 4, char); -VEC_UPDATE_IMPL(double, 2, 2, unsigned short); -VEC_UPDATE_IMPL(double, 2, 3, unsigned short); -VEC_UPDATE_IMPL(double, 2, 4, unsigned short); -VEC_UPDATE_IMPL(double, 2, 2, short); -VEC_UPDATE_IMPL(double, 2, 3, short); -VEC_UPDATE_IMPL(double, 2, 4, short); -VEC_UPDATE_IMPL(double, 2, 2, int); -VEC_UPDATE_IMPL(double, 2, 3, int); -VEC_UPDATE_IMPL(double, 2, 4, int); -VEC_UPDATE_IMPL(double, 2, 2, float); -VEC_UPDATE_IMPL(double, 2, 3, float); -VEC_UPDATE_IMPL(double, 2, 4, float); -VEC_UPDATE_IMPL(double, 2, 2, double); -VEC_UPDATE_IMPL(double, 2, 3, double); -VEC_UPDATE_IMPL(double, 2, 4, double); - -VEC_UPDATE_IMPL(double, 3, 2, unsigned char); -VEC_UPDATE_IMPL(double, 3, 3, unsigned char); -VEC_UPDATE_IMPL(double, 3, 4, unsigned char); -VEC_UPDATE_IMPL(double, 3, 2, char); -VEC_UPDATE_IMPL(double, 3, 3, char); -VEC_UPDATE_IMPL(double, 3, 4, char); -VEC_UPDATE_IMPL(double, 3, 2, unsigned short); -VEC_UPDATE_IMPL(double, 3, 3, unsigned short); -VEC_UPDATE_IMPL(double, 3, 4, unsigned short); -VEC_UPDATE_IMPL(double, 3, 2, short); -VEC_UPDATE_IMPL(double, 3, 3, short); -VEC_UPDATE_IMPL(double, 3, 4, short); -VEC_UPDATE_IMPL(double, 3, 2, int); -VEC_UPDATE_IMPL(double, 3, 3, int); -VEC_UPDATE_IMPL(double, 3, 4, int); -VEC_UPDATE_IMPL(double, 3, 2, float); -VEC_UPDATE_IMPL(double, 3, 3, float); -VEC_UPDATE_IMPL(double, 3, 4, float); -VEC_UPDATE_IMPL(double, 3, 2, double); -VEC_UPDATE_IMPL(double, 3, 3, double); -VEC_UPDATE_IMPL(double, 3, 4, double); //==================================================================== -//==================================================================== -template -void clitk::ImageConvertGenericFilter::UpdateWithOutputVectorType() +template +void clitk::ImageConvertGenericFilter::CheckTypes( + std::string inType, std::string outType +) { - // Read - typename InputImageType::Pointer input =this->template GetInput(0); - - // Typedef - typedef typename InputImageType::PixelType::ValueType PixelType; - - // Warning std::ostringstream osstream; if (std::numeric_limits::is_signed) { if (!std::numeric_limits::is_signed) { - osstream << "Warning, input type is signed (" << m_PixelTypeName << ") while output type is not (" - << mOutputPixelTypeName << "), use at your own responsability." << std::endl; - mWarningOccur = true; + osstream << "Warning, input type is signed ("; } } if (!std::numeric_limits::is_integer) { if (std::numeric_limits::is_integer) { - osstream << "Warning, input type is not integer (" << m_PixelTypeName << ") while output type is (" - << mOutputPixelTypeName << "), use at your own responsability." << std::endl; - mWarningOccur = true; + osstream << "Warning, input type is not integer ("; } } // DD(std::numeric_limits::digits10); // DD(std::numeric_limits::digits10); if (!std::numeric_limits::is_integer) { if (std::numeric_limits::is_integer) { - osstream << "Warning, input type is not integer (" << m_PixelTypeName << ") while output type is (" - << mOutputPixelTypeName << "), use at your own responsability." << std::endl; - mWarningOccur = true; + osstream << "Warning, input type is not integer ("; } } if (std::numeric_limits::digits10 > std::numeric_limits::digits10) { - osstream << "Warning, possible loss of precision : input type is (" << m_PixelTypeName << ") while output type is (" - << mOutputPixelTypeName << "), use at your own responsability." << std::endl; - mWarningOccur = true; + osstream << "Warning, possible loss of precision : input type is (" ; } - mWarning = osstream.str(); - if (mDisplayWarning) { - std::cerr << mWarning; + if (!osstream.str().empty()) + { + mWarningOccur = true; + osstream << inType << ") while output type is (" << outType << "), use at your own responsability." << std::endl; + mWarning = osstream.str(); + if (mDisplayWarning) { + std::cerr << mWarning; + } } - - // Cast - typedef itk::Image, InputImageType::ImageDimension> OutputImageType; - typedef itk::VectorCastImageFilter FilterType; - typename FilterType::Pointer filter = FilterType::New(); - filter->SetInput(input); - filter->Update(); - - // Write - SetNextOutput(filter->GetOutput()); - //clitk::writeImage(filter->GetOutput(), mOutputFilename, m_IOVerbose); } -//==================================================================== + #endif /* end #define CLITKIMAGECONVERTGENERICFILTER_CXX */