diff --git a/Code/ApplicationEngine/otbWrapperInputImageParameter.cxx b/Code/ApplicationEngine/otbWrapperInputImageParameter.cxx index b8a1455e435432835a0a2bf2dee39266977dcc92..73a2d1ca4bcc37125f9f2b596b8a8ebcbac8dd1f 100644 --- a/Code/ApplicationEngine/otbWrapperInputImageParameter.cxx +++ b/Code/ApplicationEngine/otbWrapperInputImageParameter.cxx @@ -32,6 +32,7 @@ InputImageParameter::InputImageParameter() this->SetName("Input Image"); this->SetKey("in"); m_FileName=""; + m_PreviousFileName=""; this->ClearValue(); } @@ -110,113 +111,121 @@ template <class TOutputImage> TOutputImage * InputImageParameter::GetImage() { - // 2 cases : the user set a filename vs. the user set an image - //////////////////////// Filename case: - if (!m_FileName.empty()) + // Used m_PreviousFileName because if not, when the user call twice GetImage, + // it without changing the filename, it returns 2 different + // image pointers + // TODO : how do we deal with 2 GetImage with 2 defferent template??? + if( m_PreviousFileName!=m_FileName ) { - typedef otb::ImageFileReader<TOutputImage> ReaderType; - typename ReaderType::Pointer reader = ReaderType::New(); - reader->SetFileName(m_FileName); - try - { - reader->UpdateOutputInformation(); - } - catch (itk::ExceptionObject &) + //////////////////////// Filename case: + // 2 cases : the user set a filename vs. the user set an image + if ( !m_FileName.empty() ) { - this->ClearValue(); - } - - m_Image = reader->GetOutput(); - m_Reader = reader; - - // Pay attention, don't return m_Image because it is a ImageBase... - return reader->GetOutput(); - } - //////////////////////// Image case: - else - { - if (m_Image.IsNull()) - { - itkExceptionMacro("No input image or filename detected..."); - } - else - { - if (dynamic_cast<Int8ImageType*> (m_Image.GetPointer())) - { - return CastImage<Int8ImageType, TOutputImage> (); - } - else if (dynamic_cast<UInt8ImageType*> (m_Image.GetPointer())) - { - return CastImage<UInt8ImageType, TOutputImage> (); - } - else if (dynamic_cast<Int16ImageType*> (m_Image.GetPointer())) - { - return CastImage<Int16ImageType, TOutputImage> (); - } - else if (dynamic_cast<UInt16ImageType*> (m_Image.GetPointer())) - { - return CastImage<UInt16ImageType, TOutputImage> (); - } - else if (dynamic_cast<Int32ImageType*> (m_Image.GetPointer())) + m_PreviousFileName = m_FileName; + typedef otb::ImageFileReader<TOutputImage> ReaderType; + typename ReaderType::Pointer reader = ReaderType::New(); + reader->SetFileName(m_FileName); + try { - return CastImage<Int32ImageType, TOutputImage> (); + reader->UpdateOutputInformation(); } - else if (dynamic_cast<UInt32ImageType*> (m_Image.GetPointer())) + catch (itk::ExceptionObject &) { - return CastImage<UInt32ImageType, TOutputImage> (); - } - else if (dynamic_cast<FloatImageType*> (m_Image.GetPointer())) - { - return CastImage<FloatImageType, TOutputImage> (); - } - else if (dynamic_cast<DoubleImageType*> (m_Image.GetPointer())) - { - return CastImage<DoubleImageType, TOutputImage> (); - } - else if (dynamic_cast<Int8VectorImageType*> (m_Image.GetPointer())) - { - return CastImage<Int8VectorImageType, TOutputImage> (); - } - else if (dynamic_cast<UInt8VectorImageType*> (m_Image.GetPointer())) - { - return CastImage<UInt8VectorImageType, TOutputImage> (); - } - else if (dynamic_cast<Int16VectorImageType*> (m_Image.GetPointer())) - { - return CastImage<Int16VectorImageType, TOutputImage> (); - } - else if (dynamic_cast<UInt16VectorImageType*> (m_Image.GetPointer())) - { - return CastImage<UInt16VectorImageType, TOutputImage> (); - } - else if (dynamic_cast<Int32VectorImageType*> (m_Image.GetPointer())) - { - return CastImage<Int32VectorImageType, TOutputImage> (); - } - else if (dynamic_cast<UInt32VectorImageType*> (m_Image.GetPointer())) - { - return CastImage<UInt32VectorImageType, TOutputImage> (); - } - else if (dynamic_cast<FloatVectorImageType*> (m_Image.GetPointer())) - { - return CastImage<FloatVectorImageType, TOutputImage> (); - } - else if (dynamic_cast<DoubleVectorImageType*> (m_Image.GetPointer())) - { - return CastImage<DoubleVectorImageType, TOutputImage> (); + this->ClearValue(); } - else if (dynamic_cast<UInt8RGBAImageType*> (m_Image.GetPointer())) - { - return CastImage<UInt8RGBAImageType, TOutputImage> (); - } - else if (dynamic_cast<UInt8RGBImageType*> (m_Image.GetPointer())) + m_Image = reader->GetOutput(); + m_Reader = reader; + + // Pay attention, don't return m_Image because it is a ImageBase... + return reader->GetOutput(); + } + //////////////////////// Image case: + else + { + if (m_Image.IsNull()) { - return CastImage<UInt8RGBImageType, TOutputImage> (); + itkExceptionMacro("No input image or filename detected..."); } else { - itkExceptionMacro("Unknown image type"); + if (dynamic_cast<Int8ImageType*> (m_Image.GetPointer())) + { + return CastImage<Int8ImageType, TOutputImage> (); + } + else if (dynamic_cast<UInt8ImageType*> (m_Image.GetPointer())) + { + return CastImage<UInt8ImageType, TOutputImage> (); + } + else if (dynamic_cast<Int16ImageType*> (m_Image.GetPointer())) + { + return CastImage<Int16ImageType, TOutputImage> (); + } + else if (dynamic_cast<UInt16ImageType*> (m_Image.GetPointer())) + { + return CastImage<UInt16ImageType, TOutputImage> (); + } + else if (dynamic_cast<Int32ImageType*> (m_Image.GetPointer())) + { + return CastImage<Int32ImageType, TOutputImage> (); + } + else if (dynamic_cast<UInt32ImageType*> (m_Image.GetPointer())) + { + return CastImage<UInt32ImageType, TOutputImage> (); + } + else if (dynamic_cast<FloatImageType*> (m_Image.GetPointer())) + { + return CastImage<FloatImageType, TOutputImage> (); + } + else if (dynamic_cast<DoubleImageType*> (m_Image.GetPointer())) + { + return CastImage<DoubleImageType, TOutputImage> (); + } + else if (dynamic_cast<Int8VectorImageType*> (m_Image.GetPointer())) + { + return CastImage<Int8VectorImageType, TOutputImage> (); + } + else if (dynamic_cast<UInt8VectorImageType*> (m_Image.GetPointer())) + { + return CastImage<UInt8VectorImageType, TOutputImage> (); + } + else if (dynamic_cast<Int16VectorImageType*> (m_Image.GetPointer())) + { + return CastImage<Int16VectorImageType, TOutputImage> (); + } + else if (dynamic_cast<UInt16VectorImageType*> (m_Image.GetPointer())) + { + return CastImage<UInt16VectorImageType, TOutputImage> (); + } + else if (dynamic_cast<Int32VectorImageType*> (m_Image.GetPointer())) + { + return CastImage<Int32VectorImageType, TOutputImage> (); + } + else if (dynamic_cast<UInt32VectorImageType*> (m_Image.GetPointer())) + { + return CastImage<UInt32VectorImageType, TOutputImage> (); + } + else if (dynamic_cast<FloatVectorImageType*> (m_Image.GetPointer())) + { + return CastImage<FloatVectorImageType, TOutputImage> (); + } + else if (dynamic_cast<DoubleVectorImageType*> (m_Image.GetPointer())) + { + return CastImage<DoubleVectorImageType, TOutputImage> (); + } + + else if (dynamic_cast<UInt8RGBAImageType*> (m_Image.GetPointer())) + { + return CastImage<UInt8RGBAImageType, TOutputImage> (); + } + else if (dynamic_cast<UInt8RGBImageType*> (m_Image.GetPointer())) + { + return CastImage<UInt8RGBImageType, TOutputImage> (); + } + else + { + itkExceptionMacro("Unknown image type"); + } } } } @@ -350,6 +359,7 @@ InputImageParameter::ClearValue() m_Reader = NULL; m_Caster = NULL; m_FileName = ""; + m_PreviousFileName=""; } diff --git a/Code/ApplicationEngine/otbWrapperInputImageParameter.h b/Code/ApplicationEngine/otbWrapperInputImageParameter.h index 4430c41e4c5af242eb9db722d26cb3f0df7fd50c..647796bd4575af6f38c873fe4f680fcaa2052d2f 100644 --- a/Code/ApplicationEngine/otbWrapperInputImageParameter.h +++ b/Code/ApplicationEngine/otbWrapperInputImageParameter.h @@ -124,7 +124,6 @@ protected: ImageBaseType::Pointer m_Image; std::string m_FileName; - /** Readers typedefs */ typedef otb::ImageFileReader<Int8ImageType> Int8ReaderType; @@ -148,34 +147,7 @@ protected: typedef otb::ImageFileReader<UInt8RGBImageType> UInt8RGBReaderType; typedef otb::ImageFileReader<UInt8RGBAImageType> UInt8RGBAReaderType; -/* - Int8ReaderType::Pointer m_Int8Reader; - UInt8ReaderType::Pointer m_UInt8Reader; - Int16ReaderType::Pointer m_Int16Reader; - UInt16ReaderType::Pointer m_UInt16Reader; - Int32ReaderType::Pointer m_Int32Reader; - UInt32ReaderType::Pointer m_UInt32Reader; - FloatReaderType::Pointer m_FloatReader; - DoubleReaderType::Pointer m_DoubleReader; - - VectorInt8ReaderType::Pointer m_VectorInt8Reader; - VectorUInt8ReaderType::Pointer m_VectorUInt8Reader; - VectorInt16ReaderType::Pointer m_VectorInt16Reader; - VectorUInt16ReaderType::Pointer m_VectorUInt16Reader; - VectorInt32ReaderType::Pointer m_VectorInt32Reader; - VectorUInt32ReaderType::Pointer m_VectorUInt32Reader; - VectorFloatReaderType::Pointer m_VectorFloatReader; - VectorDoubleReaderType::Pointer m_VectorDoubleReader; - - RGBAInt8ReaderType::Pointer m_RGBAInt8Reader; - RGBAUInt8ReaderType::Pointer m_RGBAUInt8Reader; - RGBAInt16ReaderType::Pointer m_RGBAInt16Reader; - RGBAUInt16ReaderType::Pointer m_RGBAUInt16Reader; - RGBAInt32ReaderType::Pointer m_RGBAInt32Reader; - RGBAUInt32ReaderType::Pointer m_RGBAUInt32Reader; - RGBAFloatReaderType::Pointer m_RGBAFloatReader; - RGBADoubleReaderType::Pointer m_RGBADoubleReader; -*/ + itk::ProcessObject::Pointer m_Reader; itk::ProcessObject::Pointer m_Caster; @@ -183,6 +155,9 @@ private: InputImageParameter(const Parameter &); //purposely not implemented void operator =(const Parameter&); //purposely not implemented + /** Store the loaded image filename */ + std::string m_PreviousFileName; + }; // End class InputImage Parameter } // End namespace Wrapper