]> Creatis software - creaImageIO.git/blobdiff - src/creaImageIODicomImageReader2.cpp
improvement in use of gdcm2 and speed database
[creaImageIO.git] / src / creaImageIODicomImageReader2.cpp
index 713655ba46ea1fda179f5681b4b2e0b9bcb98dbe..7ae643b89696b20da733a34c3c9d59337343031c 100644 (file)
@@ -1,5 +1,5 @@
 #include <creaImageIODicomImageReader2.h>
-
+#include "gdcmStringFilter.h"
 
 
 #include <creaImageIOSystem.h>
@@ -126,40 +126,45 @@ namespace creaImageIO
       reader.SetFileName( filename.c_str() );
       if (reader.Read())
       {
-       std::map<std::string,std::string>::iterator i;
-       for (i=attr.begin();i!=attr.end();++i)
-         {
-           if ( i->first == "D0004_1500" )
-             {
-               boost::filesystem::path full_path(filename);
-               std::string f = full_path.leaf();
-               i->second = f;
-             }
-           else if ( i->first == "FullFileName" )
-             {
-               i->second = filename;
-             }
-                 else if ( i->first == "FullFileDirectory" )
-             {
-                         std::string::size_type last_pos = filename.find_last_of("//");
-                         //find first separator
-                         i->second = filename.substr(0, last_pos);
-             }
-           else
+                 gdcm::StringFilter sf;
+                 sf.SetFile(reader.GetFile());
+                 std::map<std::string,std::string>::iterator i;
+                 for (i=attr.begin();i!=attr.end();++i)
              {
-               uint16_t el;
-               uint16_t gr;
-
-               tree::AttributeDescriptor::GetDicomGroupElementFromKey(i->first,gr,el);
-               if ( ( gr!=0 ) && ( el!=0 ) )
-                 {
-                        
-                          std::string val = GetStringValueFromTag(reader.GetFile().GetDataSet().GetDataElement(gdcm::Tag(gr,el)));
-                   i->second = irclean(val);
+                         if ( i->first == "D0004_1500" )
+                         {
+                                 boost::filesystem::path full_path(filename);
+                                 std::string f = full_path.leaf();
+                                 i->second = f;
+                         }
+                         else if ( i->first == "FullFileName" )
+                         {
+                               i->second = filename;
+                         }
+                         else if ( i->first == "FullFileDirectory" )
+                         {
+                                std::string::size_type last_pos = filename.find_last_of("//");
+                                //find first separator
+                                i->second = filename.substr(0, last_pos);
+                         }
+                         else
+                         {
+                                 uint16_t el;
+                                 uint16_t gr;
+                                 tree::AttributeDescriptor::GetDicomGroupElementFromKey(i->first,gr,el);
+                                 //if ( ( gr!=0 ) && ( el!=0 ) )
+                                 const gdcm::Tag tag(gr, el);
+                                 if( reader.GetFile().GetDataSet().FindDataElement( tag ) )
+                                 {
+                                         i->second = irclean(sf.ToString(tag));
+                                 }
+                                 else
+                                 {
+                                         i->second = "";
+                                 }
+                         }
                  }
-             }
          }
-      }
   }
 
 void DicomImageReader::ReadAttributes2(const std::string& filename,