X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=Example%2FReWriteExtended.cxx;h=a4aed09c3a252630688ba70e6113a332e214bdfd;hb=88a0e8d8c47070a680d71eb6a7ac349993e81a5f;hp=8681e4479440c3049235ded47e5d928a31100c09;hpb=d94e941f0ae036439588c12fc8d5f6d17c6ceaca;p=gdcm.git diff --git a/Example/ReWriteExtended.cxx b/Example/ReWriteExtended.cxx index 8681e447..a4aed09c 100755 --- a/Example/ReWriteExtended.cxx +++ b/Example/ReWriteExtended.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: ReWriteExtended.cxx,v $ Language: C++ - Date: $Date: 2006/03/17 14:56:29 $ - Version: $Revision: 1.2 $ + Date: $Date: 2007/07/13 08:17:20 $ + Version: $Revision: 1.6 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -42,11 +42,12 @@ int main(int argc, char *argv[]) " noshadow : user doesn't want to load Private groups (odd number)", " noseq : user doesn't want to load Sequences ", " rgb : user wants to transform LUT (if any) to RGB pixels ", - " debug : user wants to run the program in 'debug mode' ", + " warning : developper wants to run the program in 'warning mode'", + " debug : developper wants to run the program in 'debug mode' ", FINISH_USAGE // ----- Initialize Arguments Manager ------ - gdcm::ArgMgr *am = new gdcm::ArgMgr(argc, argv); + GDCM_NAME_SPACE::ArgMgr *am = new GDCM_NAME_SPACE::ArgMgr(argc, argv); if (argc == 1 || am->ArgMgrDefined("usage")) { @@ -72,24 +73,49 @@ int main(int argc, char *argv[]) const char *mode = am->ArgMgrGetString("mode","X"); - int filecontent = am->ArgMgrGetInt("filecontent", gdcm::UNMODIFIED_PIXELS_IMAGE); + int filecontent = am->ArgMgrGetInt("filecontent", GDCM_NAME_SPACE::UNMODIFIED_PIXELS_IMAGE); - int loadMode = gdcm::LD_ALL; + int loadMode = GDCM_NAME_SPACE::LD_ALL; if ( am->ArgMgrDefined("noshadowseq") ) - loadMode |= gdcm::LD_NOSHADOWSEQ; + loadMode |= GDCM_NAME_SPACE::LD_NOSHADOWSEQ; else { if ( am->ArgMgrDefined("noshadow") ) - loadMode |= gdcm::LD_NOSHADOW; + loadMode |= GDCM_NAME_SPACE::LD_NOSHADOW; if ( am->ArgMgrDefined("noseq") ) - loadMode |= gdcm::LD_NOSEQ; + loadMode |= GDCM_NAME_SPACE::LD_NOSEQ; } bool rgb = ( 0 != am->ArgMgrDefined("RGB") ); if (am->ArgMgrDefined("debug")) - gdcm::Debug::DebugOn(); + GDCM_NAME_SPACE::Debug::DebugOn(); + if (am->ArgMgrDefined("warning")) + GDCM_NAME_SPACE::Debug::WarningOn(); + + bool fail = false; + + int *boundRoiVal; + bool roi = false; + if (am->ArgMgrDefined("roi")) + { + int nbRoiBound; + boundRoiVal = am->ArgMgrGetListOfInt("roi", &nbRoiBound); + + if (nbRoiBound !=4) + { + std::cout << "Illegal number of 'ROI' boundary values (expected : 4, found:" + << nbRoiBound << "); 'ROI' ignored" << std::endl; + fail = true; + } + else + roi = true; + } + + int beg = am->ArgMgrGetInt("firstFrame",-1); + int end = am->ArgMgrGetInt("lastFrame",-1); + // if unused Params we give up if ( am->ArgMgrPrintUnusedLabels() ) { @@ -102,7 +128,7 @@ int main(int argc, char *argv[]) // ----------- End Arguments Manager --------- - gdcm::File *f = gdcm::File::New(); + GDCM_NAME_SPACE::File *f = GDCM_NAME_SPACE::File::New(); f->SetLoadMode( loadMode ); f->SetFileName( fileName ); bool res = f->Load(); @@ -119,28 +145,7 @@ int main(int argc, char *argv[]) return 0; } - gdcm::FileHelper *fh = gdcm::FileHelper::New(f); - void *imageData; - int dataSize; - - if (rgb) - { - dataSize = fh->GetImageDataSize(); - imageData = fh->GetImageData(); // somewhat important... can't remember - fh->SetWriteModeToRGB(); - } - else - { - dataSize = fh->GetImageDataRawSize(); - imageData = fh->GetImageDataRaw();// somewhat important... can't remember - fh->SetWriteModeToRaw(); - } - - if ( imageData == 0 ) // to avoid warning - { - std::cout << "Was unable to read pixels " << std::endl; - } - std::cout <GetXSize(); @@ -165,37 +170,111 @@ int main(int argc, char *argv[]) transferSyntaxName = f->GetTransferSyntaxName(); std::cout << " TransferSyntaxName= [" << transferSyntaxName << "]" << std::endl; + + GDCM_NAME_SPACE::FileHelper *fh = GDCM_NAME_SPACE::FileHelper::New(f); + void *imageData; + int dataSize; + + int subImDimX = nX; + int subImDimY = nY; + + if (roi) + { + std::cout << " " << boundRoiVal[0] << " " << boundRoiVal[1] << " " << boundRoiVal[2] << " " << + boundRoiVal[3] <=nX) + { + std::cout << "xBegin out of bounds; 'roi' ignored" << std::endl; + fail = true; + } + if (boundRoiVal[1]<0 || boundRoiVal[1]>=nX) + { + std::cout << "xEnd out of bounds; 'roi' ignored" << std::endl; + fail = true; + } + if (boundRoiVal[0] > boundRoiVal[1]) + { + std::cout << "xBegin greater than xEnd; 'roi' ignored" << std::endl; + fail = true; + } + + if (boundRoiVal[2]<0 || boundRoiVal[2]>=nY) + { + std::cout << "yBegin out of bounds; 'roi' ignored" << std::endl; + fail = true; + } + if (boundRoiVal[3]<0 || boundRoiVal[3]>=nY) + { + std::cout << "yEnd out of bounds; 'roi' ignored" << std::endl; + fail = true; + } + if (boundRoiVal[2] > boundRoiVal[3]) + { + std::cout << "yBegin greater than yEnd; 'roi' ignored" << std::endl; + fail = true; + } + } + else + { + + boundRoiVal = new int[4]; + boundRoiVal[0] = 0; + boundRoiVal[1] = nX-1; + boundRoiVal[2] = 0; + boundRoiVal[3] = nY-1; + } + + subImDimX = boundRoiVal[1]-boundRoiVal[0]+1; + subImDimY = boundRoiVal[3]-boundRoiVal[2]+1; + + // ======================================================================= + if (rgb) + { + dataSize = fh->GetImageDataSize(); + imageData = fh->GetImageData(); // somewhat important... can't remember + fh->SetWriteModeToRGB(); + } + else + { + dataSize = fh->GetImageDataRawSize(); + imageData = fh->GetImageDataRaw();// somewhat important... can't remember + fh->SetWriteModeToRaw(); + } + + if ( imageData == 0 ) // to avoid warning + { + std::cout << "Was unable to read pixels " << std::endl; + } // We trust user. (just an example; *never* trust an user !) - fh->SetContentType((gdcm::ImageContentType)filecontent); + fh->SetContentType((GDCM_NAME_SPACE::ImageContentType)filecontent); /// \todo Here, give the detail of operations a 'decent' user should perform, /// according to what *he* wants to do. - // an user shouldn't add images to a 'native' serie. // He is allowed to create his own Serie, within a 'native' Study : - // if he wants to do so, he has to call gdcm::Util::GetUniqueUID + // if he wants to do so, he has to call GDCM_NAME_SPACE::Util::GetUniqueUID // only once for a given image set, belonging to a single 'user Serie' std::string SerieInstanceUID; switch(filecontent) { - case gdcm::USER_OWN_IMAGE : - SerieInstanceUID = gdcm::Util::CreateUniqueUID(); + case GDCM_NAME_SPACE::USER_OWN_IMAGE : + SerieInstanceUID = GDCM_NAME_SPACE::Util::CreateUniqueUID(); f->SetEntryString(SerieInstanceUID,0x0020,0x000e); break; - case gdcm::FILTERED_IMAGE : + case GDCM_NAME_SPACE::FILTERED_IMAGE : /// \todo : to be finished! break; - case gdcm::CREATED_IMAGE : + case GDCM_NAME_SPACE::CREATED_IMAGE : /// \todo : to be finished! break; - case gdcm::UNMODIFIED_PIXELS_IMAGE : + case GDCM_NAME_SPACE::UNMODIFIED_PIXELS_IMAGE : /// \todo : to be finished! break; } @@ -266,4 +345,3 @@ int main(int argc, char *argv[]) fh->Delete(); return 0; } -