]> Creatis software - gdcm.git/blobdiff - Example/ReWriteExtended.cxx
Fix mistypings
[gdcm.git] / Example / ReWriteExtended.cxx
index 256a349194f995228ffede72bcd46524f90dbafd..a4aed09c3a252630688ba70e6113a332e214bdfd 100755 (executable)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: ReWriteExtended.cxx,v $
   Language:  C++
-  Date:      $Date: 2006/03/17 14:40:47 $
-  Version:   $Revision: 1.1 $
+  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
@@ -27,8 +27,8 @@ int main(int argc, char *argv[])
 {
    START_USAGE(usage)
    " \n ReWriteExtended :\n",
-   " Re write a full gdcm-readable Dicom image                              ",
-   "     (usefull when the file header is not very straight).               ",
+   " Re write a full gdcm-readable Dicom image using new features           ",
+   "     (DO NOT use right now; checking no achieved !).                    ",
    "                                                                        ",
    " usage: ReWriteExtended filein=inputFileName fileout=outputFileName     ",
    "      filecontent = 1 : USER_OWN_IMAGE                                  ",
@@ -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 <<std::endl <<" dataSize " << dataSize << std::endl;
+   //std::cout <<std::endl <<" dataSize " << dataSize << std::endl;
    int nX,nY,nZ,sPP,planarConfig;
    std::string pixelType, transferSyntaxName;
    nX=f->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] <<std::endl;
+      if (boundRoiVal[0]<0 || boundRoiVal[0]>=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;
 }
-