1 #include <creaImageIODicomImageReader.h>
3 #include <vtkGdcmReader.h>
4 #include <creaImageIOSystem.h>
5 #include "boost/filesystem/path.hpp"
7 #include <creaImageIOTreeAttributeDescriptor.h>
12 //=====================================================================
13 DicomImageReader::DicomImageReader()
15 mReader = vtkGdcmReader::New();
18 //=====================================================================
20 //=====================================================================
21 DicomImageReader::~DicomImageReader()
25 //=====================================================================
27 //=====================================================================
28 bool DicomImageReader::CanRead(const std::string& filename)
30 // std::cout << "## Reader "<<GetName()
31 //<<" ::CanRead("<<filename<<")"
37 // std::cout << "GDCM_NAME_SPACE = '" << STRINGIFY_SYMBOL(GDCM_NAME_SPACE)
41 GDCM_NAME_SPACE::File* file = GDCM_NAME_SPACE::File::New();
42 file->SetLoadMode( GDCM_NAME_SPACE::LD_ALL);
43 file->SetFileName(filename.c_str());
45 bool ok = file->IsReadable();
49 //=====================================================================
51 //=====================================================================
52 vtkImageData* DicomImageReader::ReadImage(const std::string& filename)
54 // std::cout << "## Reader "<<GetName()
55 //<<" ::Read("<<filename<<")"
61 mReader->SetFileName(filename.c_str());
63 im = vtkImageData::New();
64 im->ShallowCopy(mReader->GetOutput());
68 if (im!=0) im->Delete();
74 //=====================================================================
75 void DicomImageReader::PushBackExtensions(std::vector<std::string>& v)
80 //=====================================================================
82 //========================================================================
83 std::string irclean(const std::string& str)
85 if (str == "GDCM::Unfound")
89 if (str[str.size()-1]==' ')
91 return str.substr(0,str.size()-1);
93 if (str[str.size()-1]==0)
95 return str.substr(0,str.size()-1);
100 //========================================================================
102 //=====================================================================
103 void DicomImageReader::ReadAttributes(const std::string& filename,
104 std::map<std::string,std::string>& attr)
106 // std::cout << "DicomImageReader::ReadDicomInfo '"<<filename<<"'"<<std::endl;
107 GimmickMessage(2,"Reading attributes from DICOM file '"
108 <<filename<<"'"<<std::endl);
110 GDCM_NAME_SPACE::File* file = GDCM_NAME_SPACE::File::New();
111 file->SetLoadMode( GDCM_NAME_SPACE::LD_ALL);
112 file->SetFileName(filename.c_str());
114 if (file->IsReadable())
117 std::map<std::string,std::string>::iterator i;
118 for (i=attr.begin();i!=attr.end();++i)
120 if ( i->first == "D0004_1500" )
122 boost::filesystem::path full_path(filename);
123 std::string f = full_path.leaf();
126 else if ( i->first == "FullFileName" )
128 i->second = filename;
134 tree::AttributeDescriptor::GetDicomGroupElementFromKey(i->first,gr,el);
135 // GimmickMessage(2,"Key '"<<i->first<<"' : "<<gr<<"|"<<el
137 if ( ( gr!=0 ) && ( el!=0 ) )
139 std::string val = file->GetEntryString(gr,el);
140 i->second = irclean(val);
141 // GimmickMessage(2,"Key '"<<i->first<<"' : "<<gr<<"|"<<el
142 // <<"="<<i->second<<std::endl);
150 //=====================================================================
152 } // namespace creaImageIO