X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=Example%2FAnonymizeNoLoad.cxx;h=3d433d1e1a149e8a0d86b7369faf7324c43fcd6f;hb=f45f440f9ba41ad0a37c23a93c1c8f5705c511a6;hp=0da55c1c97dd5230e39fc18da31b8dc3f3399067;hpb=22c7fc88c016d8e7f67b15ca9acfa8cff8632e57;p=gdcm.git diff --git a/Example/AnonymizeNoLoad.cxx b/Example/AnonymizeNoLoad.cxx index 0da55c1c..3d433d1e 100644 --- a/Example/AnonymizeNoLoad.cxx +++ b/Example/AnonymizeNoLoad.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: AnonymizeNoLoad.cxx,v $ Language: C++ - Date: $Date: 2005/06/14 09:09:50 $ - Version: $Revision: 1.2 $ + Date: $Date: 2005/07/12 14:55:43 $ + Version: $Revision: 1.4 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -19,6 +19,7 @@ #include "gdcmFileHelper.h" #include "gdcmCommon.h" #include "gdcmDebug.h" +#include "gdcmDirList.h" #include "gdcmArgMgr.h" @@ -27,15 +28,23 @@ int main(int argc, char *argv[]) { START_USAGE(usage) - " \n AnonymizeNoLoad :\n", - " Anonymize a gdcm-readable Dicom image even if pixels aren't gdcm readable", - " Warning : Warning : the image is overwritten", - " to preserve image integrity, use a copy.", - " usage: AnonymizeNoLoad filein=inputFileName fileout=[debug] ", - " debug : user wants to run the program in 'debug mode' ", + "\n AnonymizeNoLoad :\n", + "Anonymize a gdcm-readable Dicom image even if pixels aren't gdcm readable", + " Warning : Warning : the image is overwritten", + " to preserve image integrity, use a copy.", + "usage: AnonymizeNoLoad {filein=inputFileName|dirin=inputDirectoryName}", + " [ { [noshadowseq] | [noshadow][noseq] } ] [debug]", + " inputFileName : Name of the (single) file user wants to anonymize", + " inputDirectoryName : user wants to anonymize *all* the files", + " within the (single Patient!) directory", + " noshadowseq: user doesn't want to load Private Sequences", + " noshadow : user doesn't want to load Private groups (odd number)", + " noseq : user doesn't want to load Sequences ", + " debug : user wants to run the program in 'debug mode' ", FINISH_USAGE - // ----- Initialize Arguments Manager ------ + // ----- Initialize Arguments Manager ------ + gdcm::ArgMgr *am = new gdcm::ArgMgr(argc, argv); if (am->ArgMgrDefined("usage")) @@ -48,92 +57,171 @@ int main(int argc, char *argv[]) if (am->ArgMgrDefined("debug")) gdcm::Debug::DebugOn(); - char *fileName = am->ArgMgrWantString("filein",usage); - - int loadMode; - if ( am->ArgMgrDefined("noshadow") && am->ArgMgrDefined("noseq") ) - loadMode = NO_SEQ | NO_SHADOW; - else if ( am->ArgMgrDefined("noshadow") ) - loadMode = NO_SHADOW; - else if ( am->ArgMgrDefined("noseq") ) - loadMode = NO_SEQ; - else - loadMode = 0; + char *fileName = am->ArgMgrGetString("filein",(char *)0); + char *dirName = am->ArgMgrGetString("dirin",(char *)0); - delete am; // we don't need Argument Manager any longer + if ( (fileName == 0 && dirName == 0) + || + (fileName != 0 && dirName != 0) ) + { + std::cout <ArgMgrDefined("noshadowseq") ) + loadMode |= NO_SHADOWSEQ; + else + { + if ( am->ArgMgrDefined("noshadow") ) + loadMode |= NO_SHADOW; + if ( am->ArgMgrDefined("noseq") ) + loadMode |= NO_SEQ; + } - // ============================================================ - // Parse the input file. - // ============================================================ + delete am; // ------ we don't need Arguments Manager any longer ------ - gdcm::File *f1; - f1 = new gdcm::File( ); - f1->SetLoadMode(loadMode); - int res = f1->Load(fileName); - // gdcm::File::IsReadable() is no usable here, because we deal with - // any kind of gdcm::Readable *document* - // not only gdcm::File (as opposed to gdcm::DicomDir) - if ( !res ) + if ( fileName != 0 ) // ====== Deal with a single file ====== { - std::cout <SetLoadMode(loadMode); + f->SetFileName( fileName ); + bool res = f->Load(); + + // gdcm::File::IsReadable() is no usable here, because we deal with + // any kind of gdcm::Readable *document* + // not only gdcm::File (as opposed to gdcm::DicomDir) + if ( !res ) + { + std::cout <AddAnonymizeElement( 0x0008, 0x0080, "Xanadoo" ); + // Patient's name + f->AddAnonymizeElement( 0x0010, 0x0010, "g^Fantomas" ); + // Patient's ID + f->AddAnonymizeElement( 0x0010, 0x0020,"1515" ); + // Patient's Birthdate + f->AddAnonymizeElement( 0x0010, 0x0030,"11.11.1111" ); + // Patient's Adress + f->AddAnonymizeElement( 0x0010, 0x1040,"Sing-sing" ); + // Patient's Mother's Birth Name + f->AddAnonymizeElement( 0x0010, 0x1060,"g^Vampirella" ); + // Study Instance UID + f->AddAnonymizeElement( 0x0020, 0x000d, "9.99.999.9999" ); + // Telephone + f->AddAnonymizeElement(0x0010, 0x2154, "3615" ); + + // Aware use will add new fields here + + // + // Overwrite the file + // + + std::cout <<"Let's AnonymizeNoLoad " << std::endl; + + // The gdcm::File remains untouched in memory + + f->AnonymizeNoLoad(); + + // No need to write the File : modif were done on disc ! + // File was overwritten ... + + std::cout <<"End AnonymizeNoLoad" << std::endl; + + // + // Remove the Anonymize list + // + f->ClearAnonymizeList(); + + delete f; + return 0; + } - std::cout << fileName << " is readable " << std::endl; - - // ============================================================ - // No need to load the pixels in memory. - // File will be overwritten - // ============================================================ - - - // ============================================================ - // Choose the fields to anonymize. - // ============================================================ - // Institution name - f1->AddAnonymizeElement( 0x0008, 0x0080, "Xanadoo" ); - // Patient's name - f1->AddAnonymizeElement( 0x0010, 0x0010, "Fantomas" ); - // Patient's ID - f1->AddAnonymizeElement( 0x0010, 0x0020,"1515" ); - // Patient's Birthdate - f1->AddAnonymizeElement( 0x0010, 0x0030,"11.11.1111" ); - // Patient's Adress - f1->AddAnonymizeElement( 0x0010, 0x1040,"Sing-sing" ); - // Patient's Mother's Birth Name - f1->AddAnonymizeElement( 0x0010, 0x1060,"Vampirella" ); - // Study Instance UID - f1->AddAnonymizeElement( 0x0020, 0x000d, "9.99.999.9999" ); - // Telephone - f1->AddAnonymizeElement(0x0010, 0x2154, "3615" ); - - // Aware use will add new fields here - - // ============================================================ - // Overwrite the file - // ============================================================ - - std::cout <<"Let's AnonymizeNoLoad " << std::endl;; - - // The gdcm::File remains untouched in memory - - f1->AnonymizeNoLoad(); - - // No need to write the File : modif were done on disc ! - // File was overwritten ... - - std::cout <<"End AnonymizeNoLoad" << std::endl; - - // ============================================================ - // Remove the Anonymize list - // ============================================================ - f1->ClearAnonymizeList(); + else // ====== Deal with a (single Patient) Directory ====== + { + std::cout << "dirName [" << dirName << "]" << std::endl; + gdcm::DirList dirList(dirName,1); // gets recursively the file list + gdcm::DirListType fileList = dirList.GetFilenames(); + for( gdcm::DirListType::iterator it = fileList.begin(); + it != fileList.end(); + ++it ) + { + + gdcm::File *f; + f = new gdcm::File( ); + f->SetLoadMode(loadMode); + f->SetFileName( it->c_str() ); + bool res = f->Load(); + + if ( !res ) + { + delete f; + continue; + } + // + // Choose the fields to anonymize. + // + + // Institution name + f->AddAnonymizeElement( 0x0008, 0x0080, "Xanadoo" ); + // Patient's name + f->AddAnonymizeElement( 0x0010, 0x0010, "g^Fantomas" ); + // Patient's ID + f->AddAnonymizeElement( 0x0010, 0x0020,"1515" ); + // Patient's Birthdate + f->AddAnonymizeElement( 0x0010, 0x0030,"11.11.1111" ); + // Patient's Adress + f->AddAnonymizeElement( 0x0010, 0x1040,"Sing-sing" ); + // Patient's Mother's Birth Name + f->AddAnonymizeElement( 0x0010, 0x1060,"g^Vampirella" ); + // Study Instance UID + // we may not brutaly overwrite it + //f->AddAnonymizeElement( 0x0020, 0x000d, "9.99.999.9999" ); + // Telephone + f->AddAnonymizeElement(0x0010, 0x2154, "3615" ); + + std::cout <<"Let's AnonymizeNoLoad " << it->c_str() << std::endl; + + // The gdcm::File remains untouched in memory + + f->AnonymizeNoLoad(); + + // + // Remove the Anonymize list + // + + f->ClearAnonymizeList(); - delete f1; - return 0; + delete f; + } + + } }