]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIODicomImageReader.cpp
clean-up
[creaImageIO.git] / src2 / creaImageIODicomImageReader.cpp
index b51bff21b46f555ce69512d72dee795158d9d9db..30c420914cc2a7ca00c96aa8ce979fd666be0ddd 100644 (file)
@@ -1,5 +1,5 @@
 #include <creaImageIODicomImageReader.h>
-#include <gdcmFile.h> 
+
 #include <vtkGdcmReader.h>
 #include <creaImageIOSystem.h>
 #include "boost/filesystem/path.hpp"
@@ -28,18 +28,7 @@ namespace creaImageIO
   //=====================================================================  
   bool DicomImageReader::CanRead(const std::string& filename)
   { 
-    //      std::cout << "## Reader "<<GetName()
-    //<<" ::CanRead("<<filename<<")"
-    //         <<std::endl;
-    //      return true;
-    
-    
-    //      GDCM_NAME_SPACE
-    //  std::cout << "GDCM_NAME_SPACE = '" << STRINGIFY_SYMBOL(GDCM_NAME_SPACE)
-    // << "'" 
-    // <<std::endl;
-    
-       GDCM_NAME_SPACE::Document*doc;
+    GDCM_NAME_SPACE::Document*doc;
     GDCM_NAME_SPACE::File* file = GDCM_NAME_SPACE::File::New();
     file->SetLoadMode( GDCM_NAME_SPACE::LD_ALL);
     file->SetFileName(filename.c_str());
@@ -58,10 +47,6 @@ namespace creaImageIO
   //=====================================================================
   vtkImageData* DicomImageReader::ReadImage(const std::string& filename)
   {
-    //      std::cout << "## Reader "<<GetName()
-    //<<" ::Read("<<filename<<")"
-    //         <<std::endl;
-    
     vtkImageData* im = 0;
     try
       {
@@ -77,7 +62,7 @@ namespace creaImageIO
       }
     return im;
   }
-  
+
   //=====================================================================
   void DicomImageReader::PushBackExtensions(std::vector<std::string>& v)
   {
@@ -89,43 +74,45 @@ namespace creaImageIO
   //========================================================================
   std::string irclean(const std::string& str)
   {
-    if (str == "GDCM::Unfound") 
-      {
-       return "";
-      }
-    if (str[str.size()-1]==' ')
-      {
-       return str.substr(0,str.size()-1);
-      }
-    if (str[str.size()-1]==0)
-      {
-       return str.substr(0,str.size()-1);
-      }
+         if(str.size() > 0)
+         {
+               if (str == "GDCM::Unfound") 
+                 {
+               return "";
+                 }
+               if (str[str.size()-1]==' ')
+                 {
+               return str.substr(0,str.size()-1);
+                 }
+               if (str[str.size()-1]==0)
+                 {
+               return str.substr(0,str.size()-1);
+                 }
+         }
     
     return str;
   }
   //========================================================================
-
   //=====================================================================
   void DicomImageReader::ReadAttributes(const std::string& filename, 
                      std::map<std::string,std::string>& attr)
   {
-    //    std::cout << "DicomImageReader::ReadDicomInfo '"<<filename<<"'"<<std::endl;
     GimmickMessage(2,"Reading attributes from DICOM file '"
                   <<filename<<"'"<<std::endl);
-    
-       GDCM_NAME_SPACE::File* file = GDCM_NAME_SPACE::File::New();
 
-       GDCM_NAME_SPACE::Document *doc= GDCM_NAME_SPACE::File::New();
-       doc->SetLoadMode( GDCM_NAME_SPACE::LD_ALL);
+    //GDCM_NAME_SPACE::File* file = GDCM_NAME_SPACE::File::New();
+       boost::shared_ptr<GDCM_NAME_SPACE::File> file(GDCM_NAME_SPACE::File::New(), DicomImageReader::deleter());
+
+    GDCM_NAME_SPACE::Document *doc= GDCM_NAME_SPACE::File::New();
+    doc->SetLoadMode( GDCM_NAME_SPACE::LD_ALL);
     doc->SetFileName(filename.c_str());
     doc->Load();
     file->SetLoadMode( GDCM_NAME_SPACE::LD_ALL);
     file->SetFileName(filename.c_str());
     file->Load();
-    if (file->IsReadable() ||((GDCM_NAME_SPACE::Document*) file)->IsReadable())
+    if (file->IsReadable())// ||((GDCM_NAME_SPACE::Document*) file)->IsReadable())
       {
-       
        std::map<std::string,std::string>::iterator i;
        for (i=attr.begin();i!=attr.end();++i)
          {
@@ -150,21 +137,17 @@ namespace creaImageIO
                uint16_t gr;
                uint16_t el;
                tree::AttributeDescriptor::GetDicomGroupElementFromKey(i->first,gr,el);
-               //                GimmickMessage(2,"Key '"<<i->first<<"' : "<<gr<<"|"<<el
-               //                               <<std::endl);
                if ( ( gr!=0 ) && ( el!=0 ) )
                  {
                    std::string val = file->GetEntryString(gr,el);
                    i->second = irclean(val);
-                   //                GimmickMessage(2,"Key '"<<i->first<<"' : "<<gr<<"|"<<el
-                   //                               <<"="<<i->second<<std::endl);
                  }
              }
          }
       }
-    file->Delete();
//   file->Delete();
   }
-  
+
   //=====================================================================
   
 } // namespace creaImageIO