#include #include #include #include #include #include #include #include #include #include #include #include //#include #include "boost/filesystem/path.hpp" namespace creaImageIO { //===================================================================== ImageReader::ImageReader() : mUnreadableImage(0), mLastFilename("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"), mLastReader(0) { // std::cout << "#### ImageReader::ImageReader()"<SetDimensions ( dim ); mUnreadableImage->SetScalarTypeToUnsignedChar(); mUnreadableImage->AllocateScalars(); for (int i=0;iSetScalarComponentFromFloat(i,j,0,0,0); for (int i=0;iSetScalarComponentFromFloat(i,i,0,0,255); mUnreadableImage->SetScalarComponentFromFloat(dim[0]-1-i,i,0,0,255); } } //===================================================================== //===================================================================== ImageReader::~ImageReader() { std::vector::iterator i; for (i=mReader.begin(); i!=mReader.end(); i++) { delete (*i); } mReader.clear(); if (mUnreadableImage!=0) { mUnreadableImage->Delete(); mUnreadableImage = 0; } } //===================================================================== //===================================================================== void ImageReader::Register(AbstractImageReader* r) { mReader.push_back(r); } //===================================================================== //===================================================================== // Returns true iff the file is readable bool ImageReader::CanRead( const std::string& filename ) { bool ok = false; std::vector::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) { if (mLastFilename!=filename) { if (!CanRead(filename)) { vtkImageData* im = vtkImageData::New(); im->ShallowCopy(mUnreadableImage); return im; } } vtkImageData* i = mLastReader->ReadImage(mLastFilename); if (i==0) { i = vtkImageData::New(); i->ShallowCopy(mUnreadableImage); } return i; } //===================================================================== //===================================================================== void ImageReader::ReadAttributes(const std::string& filename, std::map& attr) { if (mLastFilename!=filename) { if (!CanRead(filename)) { return; } } mLastReader->ReadAttributes(mLastFilename,attr); } //===================================================================== //===================================================================== /// Pushes back all kwown extensions (without dot) in the vector given void ImageReader::PushBackExtensions(std::vector& v) { std::vector::iterator i; for (i=mReader.begin(); i!=mReader.end(); i++) { (*i)->PushBackExtensions(v); } } //===================================================================== } // namespace creaImageIO