X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIODicomImageReader.cpp;h=0dde6ca0638979dab31be9f925054098d1a3a0f1;hb=37692ca5ea7fb8414cb70bcae0ce16e51da57568;hp=b95f27ffb72ef4597f8fd494738c60c709ccd302;hpb=9ae1b3a039da8e28aa41c6963744bfa86c382a35;p=creaImageIO.git diff --git a/src2/creaImageIODicomImageReader.cpp b/src2/creaImageIODicomImageReader.cpp index b95f27f..0dde6ca 100644 --- a/src2/creaImageIODicomImageReader.cpp +++ b/src2/creaImageIODicomImageReader.cpp @@ -6,7 +6,9 @@ #include #include - +#ifdef _DEBUG +#define new DEBUG_NEW +#endif namespace creaImageIO { @@ -28,22 +30,17 @@ namespace creaImageIO //===================================================================== bool DicomImageReader::CanRead(const std::string& filename) { - // std::cout << "## Reader "<SetLoadMode( GDCM_NAME_SPACE::LD_ALL); file->SetFileName(filename.c_str()); file->Load(); bool ok = file->IsReadable(); + if(!ok) + { + doc = (GDCM_NAME_SPACE::Document*)file; + ok = doc->IsReadable(); + } file->Delete(); return ok; } @@ -52,10 +49,6 @@ namespace creaImageIO //===================================================================== vtkImageData* DicomImageReader::ReadImage(const std::string& filename) { - // std::cout << "## Reader "<& v) { @@ -83,18 +76,21 @@ 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; } @@ -104,17 +100,20 @@ namespace creaImageIO void DicomImageReader::ReadAttributes(const std::string& filename, std::map& attr) { - // std::cout << "DicomImageReader::ReadDicomInfo '"<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()) + if (file->IsReadable() ||((GDCM_NAME_SPACE::Document*) file)->IsReadable()) { - std::map::iterator i; for (i=attr.begin();i!=attr.end();++i) { @@ -127,27 +126,29 @@ namespace creaImageIO 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 gr; uint16_t el; tree::AttributeDescriptor::GetDicomGroupElementFromKey(i->first,gr,el); - // GimmickMessage(2,"Key '"<first<<"' : "<GetEntryString(gr,el); i->second = irclean(val); - // GimmickMessage(2,"Key '"<first<<"' : "<