Skip to content
Snippets Groups Projects
Commit a0b2a45d authored by Julien Malik's avatar Julien Malik
Browse files

ITK4: otb::ImageIOFactory does not derive from itk::ImageIOFactory anymore,...

ITK4: otb::ImageIOFactory does not derive from itk::ImageIOFactory anymore, and use otb::ImageIO everywhere relevant
parent a0d8dc03
Branches
Tags
No related merge requests found
......@@ -286,7 +286,7 @@ ImageFileReader<TOutputImage, ConvertPixelTraits>
if (this->m_UserSpecifiedImageIO == false) //try creating via factory
{
this->m_ImageIO = ImageIOFactory::CreateImageIO(this->m_FileName.c_str(), itk::ImageIOFactory::ReadMode);
this->m_ImageIO = ImageIOFactory::CreateImageIO(this->m_FileName.c_str(), otb::ImageIOFactory::ReadMode);
}
if (this->m_ImageIO.IsNull())
......
......@@ -526,7 +526,7 @@ ImageFileWriter<TInputImage>
itkDebugMacro(<< "Attempting factory creation of ImageIO for file: "
<< m_FileName);
this->SetImageIO(ImageIOFactory::CreateImageIO(m_FileName.c_str(),
itk::ImageIOFactory::WriteMode));
otb::ImageIOFactory::WriteMode));
m_FactorySpecifiedImageIO = true;
}
......@@ -542,7 +542,7 @@ ImageFileWriter<TInputImage>
itkDebugMacro(<< "Attempting creation of ImageIO with a factory for file:"
<< m_FileName);
m_ImageIO = ImageIOFactory::CreateImageIO(m_FileName.c_str(),
itk::ImageIOFactory::WriteMode);
otb::ImageIOFactory::WriteMode);
m_FactorySpecifiedImageIO = true;
}
}
......
......@@ -16,11 +16,13 @@
=========================================================================*/
#include "otbConfigure.h"
#include "otbCurlHelperInterface.h"
#include "otbImageIOFactory.h"
#include "itkMutexLock.h"
#include "itkMutexLockHolder.h"
#include "otbCurlHelperInterface.h"
#include "otbImageIOFactory.h"
#include "otbONERAImageIOFactory.h"
#include "otbMSTARImageIOFactory.h"
......@@ -29,11 +31,9 @@
#include "otbBSQImageIOFactory.h"
#include "otbRADImageIOFactory.h"
#include "otbMWImageIOFactory.h"
#ifdef OTB_USE_JPEG2000
#include "otbJPEG2000ImageIOFactory.h"
# include "otbJPEG2000ImageIOFactory.h"
#endif
#include "otbTileMapImageIOFactory.h"
namespace otb
......@@ -42,10 +42,46 @@ namespace otb
otb::ImageIOBase::Pointer
ImageIOFactory::CreateImageIO(const char* path, FileModeType mode)
{
RegisterBuiltInFactories();
return (Superclass::CreateImageIO(path, mode));
std::list<otb::ImageIOBase::Pointer> possibleImageIO;
std::list<itk::LightObject::Pointer> allobjects =
itk::ObjectFactoryBase::CreateAllInstance("otbImageIOBase");
for(std::list<itk::LightObject::Pointer>::iterator i = allobjects.begin();
i != allobjects.end(); ++i)
{
otb::ImageIOBase* io = dynamic_cast<otb::ImageIOBase*>(i->GetPointer());
if(io)
{
possibleImageIO.push_back(io);
}
else
{
std::cerr << "Error ImageIO factory did not return an ImageIOBase: "
<< (*i)->GetNameOfClass()
<< std::endl;
}
}
for(std::list<otb::ImageIOBase::Pointer>::iterator k = possibleImageIO.begin();
k != possibleImageIO.end(); ++k)
{
if( mode == ReadMode )
{
if((*k)->CanReadFile(path))
{
return *k;
}
}
else if( mode == WriteMode )
{
if((*k)->CanWriteFile(path))
{
return *k;
}
}
}
return 0;
}
void
......@@ -60,35 +96,19 @@ ImageIOFactory::RegisterBuiltInFactories()
itk::MutexLockHolder<itk::SimpleMutexLock> mutexHolder(mutex);
if (firstTime)
{
// RAD Format for OTB
itk::ObjectFactoryBase::RegisterFactory(RADImageIOFactory::New());
// BSQ format for OTB
itk::ObjectFactoryBase::RegisterFactory(BSQImageIOFactory::New());
// LUM format for OTB
itk::ObjectFactoryBase::RegisterFactory(LUMImageIOFactory::New());
#ifdef OTB_USE_JPEG2000
// JPEG2000 : New format for OTB
itk::ObjectFactoryBase::RegisterFactory(JPEG2000ImageIOFactory::New());
#endif
if (CurlHelperInterface::IsCurlAvailable())
{
// TileMap : New format for OTB
itk::ObjectFactoryBase::RegisterFactory(TileMapImageIOFactory::New());
}
// GDAL : New format for OTB
itk::ObjectFactoryBase::RegisterFactory(GDALImageIOFactory::New());
// MegaWave format for OTB
itk::ObjectFactoryBase::RegisterFactory(MWImageIOFactory::New());
// ONERA format for OTB
itk::ObjectFactoryBase::RegisterFactory(ONERAImageIOFactory::New());
// MSTAR Format for OTB
itk::ObjectFactoryBase::RegisterFactory(MSTARImageIOFactory::New());
firstTime = false;
......
......@@ -27,12 +27,12 @@ namespace otb
/** \class ImageIOFactory
* \brief Creation of object instance using object factory.
*/
class ITK_EXPORT ImageIOFactory : public itk::ImageIOFactory
class ITK_EXPORT ImageIOFactory : public itk::Object
{
public:
/** Standard class typedefs. */
typedef ImageIOFactory Self;
typedef itk::ImageIOFactory Superclass;
typedef itk::Object Superclass;
typedef itk::SmartPointer<Self> Pointer;
typedef itk::SmartPointer<const Self> ConstPointer;
......@@ -42,10 +42,10 @@ public:
itkTypeMacro(ImageIOFactory, itk::ImageIOFactory);
/** Convenient typedefs. */
typedef::otb::ImageIOBase::Pointer ImageIOBasePointer;
typedef ::otb::ImageIOBase::Pointer ImageIOBasePointer;
/** Mode in which the files is intended to be used */
// typedef enum { ReadMode, WriteMode } FileModeType;
typedef enum { ReadMode, WriteMode } FileModeType;
/** Create the appropriate ImageIO depending on the particulars of the file. */
static ImageIOBasePointer CreateImageIO(const char* path, FileModeType mode);
......
......@@ -48,7 +48,7 @@ int otbVectorImageComplexGenericTest(int argc, char* argv[])
reader->SetFileName(argv[1]);
reader->UpdateOutputInformation();
std::cout << reader->GetOutput()->GetNumberOfComponentsPerPixel() << std::endl;
itk::ImageIOBase::Pointer io = reader->GetImageIO();
otb::ImageIOBase::Pointer io = reader->GetImageIO();
std::cout << io << std::endl;
reader->Update();
typename ImageType::IndexType index;
......@@ -89,7 +89,7 @@ int otbImageComplexGenericTest(int argc, char* argv[])
reader->SetFileName(argv[1]);
reader->UpdateOutputInformation();
std::cout << reader->GetOutput()->GetNumberOfComponentsPerPixel() << std::endl;
itk::ImageIOBase::Pointer io = reader->GetImageIO();
otb::ImageIOBase::Pointer io = reader->GetImageIO();
std::cout << io << std::endl;
reader->Update();
typename ImageType::IndexType index;
......@@ -144,7 +144,7 @@ int otbVectorImageComplexIntoRealGenericTest(int argc, char* argv[])
reader->SetFileName(argv[1]);
reader->UpdateOutputInformation();
std::cout << reader->GetOutput()->GetNumberOfComponentsPerPixel() << std::endl;
itk::ImageIOBase::Pointer io = reader->GetImageIO();
otb::ImageIOBase::Pointer io = reader->GetImageIO();
std::cout << io << std::endl;
reader->Update();
typename ImageType::IndexType index;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment