//#include <vtkGESignalReader.h>
-
#include "boost/filesystem/path.hpp"
namespace creaImageIO
ImageReader::ImageReader()
:
mUnreadableImage(0),
- mLastFilename("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"),
- mLastReader(0)
-
+ mLastFilename("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&")
{
// std::cout << "#### ImageReader::ImageReader()"<<std::endl;
if (mUnreadableImage!=0) return;
-
- Register(new VtkImageReader(vtkPNGReader::New()));
- Register(new VtkImageReader(vtkTIFFReader::New()));
- Register(new VtkImageReader(vtkJPEGReader::New()));
- Register(new VtkImageReader(vtkBMPReader::New()));
- Register(new VtkImageReader(vtkSLCReader::New()));
- Register(new VtkImageReader(vtkMetaImageReader::New(),"MHD",".mhd"));
+
+ Register( boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkPNGReader::New(), "PNG", ".png")));
+ Register(boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkTIFFReader::New(), "JPEG", ".jpeg")));
+ Register(boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkJPEGReader::New())));
+ Register(boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkBMPReader::New())));
+ Register(boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkSLCReader::New())));
+ Register(boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkMetaImageReader::New(),"MHD",".mhd")));
// Register(new VtkImageReader(vtkGESignalReader::New()));
- Register(new DicomImageReader);
- Register(new UltrasonixImageReader);
-
- /*
- std::cout << "## Registered file extensions : "<<std::endl;
- std::vector<std::string>::const_iterator i;
- for (i=GetKnownExtensions().begin();
- i!=GetKnownExtensions().end();
- i++)
- {
- std::cout << "'"<<(*i)<<"'"<<std::endl;
- }
- */
- //
+ Register(boost::shared_ptr<AbstractImageReader>(new DicomImageReader));
+ Register(boost::shared_ptr<AbstractImageReader>(new UltrasonixImageReader));
+
+
mUnreadableImage = vtkImageData::New();
int dim[3];
dim[0] = dim[1] = 128;
//=====================================================================
ImageReader::~ImageReader()
{
- // std::cout << "#### ImageReader::~ImageReader()"<<std::endl;
- std::vector<AbstractImageReader*>::iterator i;
- for (i=mReader.begin(); i!=mReader.end(); i++)
- {
- // std::cout << "#### ImageReader::UnRegister("
- // << (*i)->GetName()<<")"<<std::endl;
- delete (*i);
- }
- mReader.clear();
+
+ // for (i=mReader.begin(); i!=mReader.end(); i++)
+ // {
+ //delete (*i);
+ // }
+// mReader.clear();
if (mUnreadableImage!=0)
{
mUnreadableImage->Delete();
//=====================================================================
//=====================================================================
- void ImageReader::Register(AbstractImageReader* r)
+ void ImageReader::Register(boost::shared_ptr<AbstractImageReader> r)
{
- // std::cout << "#### ImageReader::Register("<<r->GetName()<<")"<<std::endl;
mReader.push_back(r);
- // r->PushBackExtensions(mKnownExtensions);
+
}
//=====================================================================
//=====================================================================
// Returns true iff the file is readable
bool ImageReader::CanRead( const std::string& filename )
- // const std::string& exclude )
{
- // std::cout << "## ImageReader::CanRead("<<filename<<")"<<std::endl;
bool ok = false;
- std::vector<AbstractImageReader*>::iterator i;
- for (i=mReader.begin(); i!=mReader.end(); i++)
- {
- // if ((*i)->GetName()==exclude) continue;
- ok = (*i)->CanRead(filename);
- if (ok)
- {
- mLastFilename = filename;
- mLastReader = *i;
- break;
- }
- }
- return ok;
+ if(filename != "")
+ {
+ std::vector<boost::shared_ptr<AbstractImageReader> >::iterator i;
+ for (i=mReader.begin(); i!=mReader.end(); i++)
+ {
+ ok = (*i)->CanRead(filename);
+ if (ok)
+ {
+ mLastFilename = filename;
+ mLastReader = *i;
+ break;
+ }
+ }
+ }
+ return ok;
+
}
//=====================================================================
//=====================================================================
// Reads the file (CanRead must be called before : no test here)
vtkImageData* ImageReader::ReadImage( const std::string& filename)
- // const std::string& exclude )
{
- // std::cout << "## ImageReader::Read("<<filename<<")"<<std::endl;
if (mLastFilename!=filename)
{
- if (!CanRead(filename)) //,exclude))
+ if (!CanRead(filename))
{
- // std::cout << " -- Cannot read image "<<std::endl;
vtkImageData* im = vtkImageData::New();
im->ShallowCopy(mUnreadableImage);
return im;
}
}
vtkImageData* i = mLastReader->ReadImage(mLastFilename);
- // std::cout << "i="<<i<<std::endl;
if (i==0)
{
- // std::cout << "i=UNREAD"<<i<<std::endl;
i = vtkImageData::New();
i->ShallowCopy(mUnreadableImage);
}
- // std::cout << "i="<<i<<std::endl;
-std::cout<<"return: "<<i->GetScalarTypeAsString()<<", pointer="<<i<<std::endl;
return i;
}
//=====================================================================
void ImageReader::ReadAttributes(const std::string& filename,
std::map<std::string,std::string>& attr)
{
- // std::cout << "ImageReader::ReadDicomInfo '"<<filename<<"'"<<std::endl;
- // std::cout << "## ImageReader::Read("<<filename<<")"<<std::endl;
if (mLastFilename!=filename)
{
if (!CanRead(filename))
/// Pushes back all kwown extensions (without dot) in the vector given
void ImageReader::PushBackExtensions(std::vector<std::string>& v)
{
- std::vector<AbstractImageReader*>::iterator i;
+ std::vector<boost::shared_ptr<AbstractImageReader> >::iterator i;
for (i=mReader.begin(); i!=mReader.end(); i++)
{
(*i)->PushBackExtensions(v);