creaImageIOTreeComparators
# Image readers
- creaImageIOSpecificImageReader
+ creaImageIOAbstractImageReader
creaImageIOVtkImageReader
creaImageIODicomImageReader
creaImageIOImageReader
-#ifndef __creaImageIOSpecificImageReader_h_INCLUDED__
-#define __creaImageIOSpecificImageReader_h_INCLUDED__
+#ifndef __creaImageIOAbstractImageReader_h_INCLUDED__
+#define __creaImageIOAbstractImageReader_h_INCLUDED__
#include <vtkImageData.h>
*/
//=====================================================================
- /// Abstract specific image reader
- class SpecificImageReader
+ /// Abstract image reader
+ class AbstractImageReader
{
public:
- SpecificImageReader() {}
- virtual ~SpecificImageReader() {}
+ AbstractImageReader() {}
+ virtual ~AbstractImageReader() {}
const std::string& GetName() const { return mName; }
-
virtual void PushBackExtensions(std::vector<std::string>&) {}
virtual bool CanRead(const std::string& filename) { return false; }
virtual vtkImageData* ReadImage(const std::string& filename) { return 0; }
-#endif // #ifndef __creaImageIOSpecificImageReader_h_INCLUDED__
+#endif // #ifndef __creaImageIOAbstractImageReader_h_INCLUDED__
#define __creaImageIODicomImageReader_h_INCLUDED__
-#include <creaImageIOSpecificImageReader.h>
+#include <creaImageIOAbstractImageReader.h>
// forward decl
class vtkGdcmReader;
*/
//=====================================================================
- /// Specific image reader for DICOM images
- class DicomImageReader : virtual public SpecificImageReader
+ /// Concrete image reader for DICOM images
+ class DicomImageReader : virtual public AbstractImageReader
{
public:
DicomImageReader();
- //=====================================================================
- /*
- void IRFillFields(DicomNode* node,
- GDCM_NAME_SPACE::File* gdcmFile)
- {
- const DicomNodeTypeDescription::FieldDescriptionMapType& dm
- = node->GetTypeDescription().GetFieldDescriptionMap();
- DicomNodeTypeDescription::FieldDescriptionMapType::const_iterator i;
-
-
- DicomNode::FieldValueMapType& vm = node->GetFieldValueMap();
- for (i=dm.begin(); i!=dm.end(); ++i)
- {
- if ( (i->second.flags==0) &&
- (i->second.group!=0) &&
- (i->second.element!=0) )
- {
- uint16_t gr = i->second.group;
- uint16_t el = i->second.element;
-
- std::string val = gdcmFile->GetEntryString(gr,el);
-
- vm[i->first] = irclean(val);
- }
- else
- {
- vm[i->first] = "";
- }
- }
- }
- */
- //=====================================================================
-
-
//=====================================================================
ImageReader::~ImageReader()
{
// std::cout << "#### ImageReader::~ImageReader()"<<std::endl;
- std::vector<SpecificImageReader*>::iterator i;
+ std::vector<AbstractImageReader*>::iterator i;
for (i=mReader.begin(); i!=mReader.end(); i++)
{
// std::cout << "#### ImageReader::UnRegister("
//=====================================================================
//=====================================================================
- void ImageReader::Register(SpecificImageReader* r)
+ void ImageReader::Register(AbstractImageReader* r)
{
// std::cout << "#### ImageReader::Register("<<r->GetName()<<")"<<std::endl;
mReader.push_back(r);
- r->PushBackExtensions(mKnownExtensions);
+ // r->PushBackExtensions(mKnownExtensions);
}
//=====================================================================
//=====================================================================
// Returns true iff the file is readable
- bool ImageReader::CanRead( const std::string& filename,
- const std::string& exclude )
+ bool ImageReader::CanRead( const std::string& filename )
+ // const std::string& exclude )
{
// std::cout << "## ImageReader::CanRead("<<filename<<")"<<std::endl;
bool ok = false;
- std::vector<SpecificImageReader*>::iterator i;
+ std::vector<AbstractImageReader*>::iterator i;
for (i=mReader.begin(); i!=mReader.end(); i++)
{
- if ((*i)->GetName()==exclude) continue;
+ // if ((*i)->GetName()==exclude) continue;
ok = (*i)->CanRead(filename);
if (ok)
{
//=====================================================================
// Reads the file (CanRead must be called before : no test here)
- vtkImageData* ImageReader::ReadImage( const std::string& filename,
- const std::string& exclude )
+ 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)) //,exclude))
{
// std::cout << " -- Cannot read image "<<std::endl;
vtkImageData* im = vtkImageData::New();
//=====================================================================
-
+ //=====================================================================
+ /// Pushes back all kwown extensions (without dot) in the vector given
+ void ImageReader::PushBackExtensions(std::vector<std::string>& v)
+ {
+ std::vector<AbstractImageReader*>::iterator i;
+ for (i=mReader.begin(); i!=mReader.end(); i++)
+ {
+ (*i)->PushBackExtensions(v);
+ }
+ }
+ //=====================================================================
+
} // namespace creaImageIO
#ifndef __creaImageIOImageReader_h_INCLUDED__
#define __creaImageIOImageReader_h_INCLUDED__
-
-#include <vtkImageData.h>
-#include <string>
-#include <vector>
-#include <map>
-#include <creaImageIOTreeAttributeMapType.h>
+#include <creaImageIOAbstractImageReader.h>
namespace creaImageIO
{
- /**
- * \ingroup Model
- */
- //=====================================================================
- /// Image reader of a specific image format
- class SpecificImageReader;
- //=====================================================================
-
+ /**
+ * \ingroup ReadWrite
+ */
//=====================================================================
- /// Generic image reader which stores a vector of SpecificImageReader
- class ImageReader
+ /// Generic image reader which uses all the specific concrete image reader
+/// of the lib (tif, jpg, dicom, ...)
+class ImageReader : virtual public AbstractImageReader
{
public:
ImageReader();
~ImageReader();
-
+ /// Pushes back all kwown extensions (without dot) in the vector given
+ void PushBackExtensions(std::vector<std::string>&);
+
/// Returns true iff the file is readable
- bool CanRead( const std::string& filename,
- const std::string& exclude = "");
+ bool CanRead( const std::string& filename);
/// Reads and returns the image data.
/// Returns an "Unreadable image" picture if fails
- vtkImageData* ReadImage( const std::string& filename,
- const std::string& exclude = "");
+ vtkImageData* ReadImage( const std::string& filename);
/// Reads the attributes of the image.
/// Requested attributes names are provided as keys
void ReadAttributes(const std::string& filename,
tree::AttributeMapType& attr);
- /// Returns the known extensions
- const std::vector<std::string>& GetKnownExtensions()
- { return mKnownExtensions; }
+ /// Exclude specific readers
+ /// TO DO...
+
protected:
- void Register(SpecificImageReader*);
+ void Register(AbstractImageReader*);
- std::vector<SpecificImageReader*> mReader;
- std::vector<std::string> mKnownExtensions;
+ std::vector<AbstractImageReader*> mReader;
vtkImageData* mUnreadableImage;
std::string mLastFilename;
- SpecificImageReader* mLastReader;
+ AbstractImageReader* mLastReader;
private:
//=====================================================================
bool TreeHandlerImageAdder::IsHandledFile( const std::string& filename)
{
- return (mReader.CanRead(filename,""));
+ return (mReader.CanRead(filename));
}
//=====================================================================
#define __creaImageIOVtkImageReader_h_INCLUDED__
-#include <creaImageIOSpecificImageReader.h>
+#include <creaImageIOAbstractImageReader.h>
// forward decl
class vtkImageReader2;
*/
//=====================================================================
- /// Specific image reader based on a vtkImageReader2
- class VtkImageReader : virtual public SpecificImageReader
+ /// Concrete image reader based on a vtkImageReader2
+ class VtkImageReader : virtual public AbstractImageReader
{
public:
VtkImageReader(vtkImageReader2* reader,