#include <creaImageIODicomImageReader2.h>
-
+#include "gdcmStringFilter.h"
#include <creaImageIOSystem.h>
#include <vtkStringArray.h>
#include <creaImageIOGimmick.h>
-
+#include "gdcmUIDs.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
im = 0;
}
return im;
+ //gdcm::Tag grouplength(0x0000,0x0000);
+ //gdcm::DataElement de(gdcm::Tag(0x0000, 0x0000));
+ //de.SetByteValue("0",gdcm::VR::UL);
+ //
+ //
+ //gdcm::UIDs::GetUIDString(gdcm::UIDS::uid_1_2_840_10008_1_1),gdcm::VR::UI);
+
+ //std::ostream os;
+ //de.Write(&os);
+
}
//=====================================================================
v.push_back("dcm");
v.push_back("");
}
- //=====================================================================
-
+
//========================================================================
std::string irclean(const std::string& str)
{
return str;
}
//========================================================================
-
+ //=====================================================================
+
+
+ void DicomImageReader::getAttributes(const std::string filename,
+ std::map <std::string , std::string> &infos, std::vector<std::string> i_attr)
+ {
+ gdcm::Reader reader;
+ reader.SetFileName( filename.c_str() );
+ if (reader.Read())
+ {
+ std::vector<std::string>::iterator it = i_attr.begin();
+ for(;it != i_attr.end(); it++)
+ {
+ unsigned short el;
+ unsigned short gr;
+ sscanf((*it).c_str(),"D%04hx_%04hx",&gr,&el);
+ if ( ( gr!=0 ) && ( el!=0 ) )
+ {
+ infos[(*it)] = ( GetStringValueFromTag(reader.GetFile().GetDataSet().GetDataElement(gdcm::Tag(gr,el))) );
+ }
+ }
+ }
+ }
+
//=====================================================================
void DicomImageReader::ReadAttributes(const std::string& filename,
std::map<std::string,std::string>& attr)
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" )
+ gdcm::StringFilter sf;
+ sf.SetFile(reader.GetFile());
+ std::map<std::string,std::string>::iterator i;
+ for (i=attr.begin();i!=attr.end();++i)
{
- 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 ) )
- {
- gdcm::DataElement de( gdcm::Tag(gr,el) );
- 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;
+ {
+ gdcm::Attribute< 0x0008,0x103e> at;
+ std::string sr;
+ at.SetValue(sr);
+
+ }
+ 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,