]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOImageReader.cpp
move directory
[creaImageIO.git] / src2 / creaImageIOImageReader.cpp
index 54257c1abc7fa45ea2fe87807f48ee28c5d6ddc5..4b67e04c005f2c37ae91a1dc7fefdc588ef82741 100644 (file)
@@ -3,9 +3,13 @@
 #include <creaImageIOSystem.h>
 
 #include <creaImageIOVtkImageReader.h>
-#include <creaImageIODicomImageReader.h>
+#if defined (USE_GDCM)
+       #include <creaImageIODicomImageReader.h>
+#endif
+#if defined(USE_GDCM2)
+       #include <creaImageIODicomImageReader2.h>
+#endif
 #include <creaImageIOUltrasonixImageReader.h>
-
 #include <vtkPNGReader.h>
 #include <vtkTIFFReader.h>
 #include <vtkJPEGReader.h>
@@ -15,7 +19,6 @@
 //#include <vtkGESignalReader.h>
 
 
-
 #include "boost/filesystem/path.hpp"
 
 namespace creaImageIO
@@ -29,24 +32,22 @@ 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(), "PNG", ".png"));
-    Register(new VtkImageReader(vtkTIFFReader::New(), "JPEG", ".jpeg"));
-    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);
+    Register(boost::shared_ptr<AbstractImageReader>(new DicomImageReader));
+    Register(boost::shared_ptr<AbstractImageReader>(new UltrasonixImageReader));
 
+       UnRegister(".txt");
  
     mUnreadableImage = vtkImageData::New();
     int dim[3];
@@ -72,12 +73,12 @@ namespace creaImageIO
   //=====================================================================
   ImageReader::~ImageReader()
   {
-      std::vector<AbstractImageReader*>::iterator i;
-    for (i=mReader.begin(); i!=mReader.end(); i++)
-      {
-       delete (*i);
-      }
-    mReader.clear();
+
//   for (i=mReader.begin(); i!=mReader.end(); i++)
//     {
+       //delete (*i);
//     }
+//    mReader.clear();
     if (mUnreadableImage!=0) 
       {
        mUnreadableImage->Delete();
@@ -87,21 +88,55 @@ namespace creaImageIO
   //=====================================================================
 
   //=====================================================================
-  void ImageReader::Register(AbstractImageReader* r)
+  void ImageReader::Register(boost::shared_ptr<AbstractImageReader> r)
   {
     mReader.push_back(r);
 
+  }
+
+  void ImageReader::UnRegister(const std::string i_val)
+  {
+    mUnReader.push_back(i_val);
+
   }
   //=====================================================================
 
+   //=====================================================================
+  // Returns true iff the file is readable
+  bool ImageReader::ShallNotRead( const std::string& filename ) 
+  {
+    bool ok = true;
+       if(filename != "")
+       {
+               std::vector<std::string >::iterator i ;
+               for (i=mUnReader.begin(); i!=mUnReader.end(); i++)
+               {
+                       
+                       if ( (*i).c_str() == filename) 
+                       {
+                               ok = false;
+                               break;
+                       }
+               }
+       }
+       return ok;
+       
+  }
+
+
   //=====================================================================
   // Returns true iff the file is readable
   bool ImageReader::CanRead( const std::string& filename ) 
   {
     bool ok = false;
+
+       if( !ShallNotRead(filename))
+       {
+               return ok;
+       }
        if(filename != "")
        {
-           std::vector<AbstractImageReader*>::iterator i;
+               std::vector<boost::shared_ptr<AbstractImageReader> >::iterator i;
                for (i=mReader.begin(); i!=mReader.end(); i++)
                {
                        ok = (*i)->CanRead(filename);
@@ -122,7 +157,7 @@ namespace creaImageIO
   // Reads the file (CanRead must be called before : no test here)
   vtkImageData*  ImageReader::ReadImage( const std::string& filename)
   {
-    if (mLastFilename!=filename)
+         if (mLastFilename!=filename)
       {
        if (!CanRead(filename))  
          { 
@@ -162,7 +197,7 @@ namespace creaImageIO
   /// 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);