]> Creatis software - gdcm.git/blob - Example/ReWrite.cxx
Use Argument Manager in 'utilities'
[gdcm.git] / Example / ReWrite.cxx
1 /*=========================================================================
2                                                                                 
3   Program:   gdcm
4   Module:    $RCSfile: ReWrite.cxx,v $
5   Language:  C++
6   Date:      $Date: 2005/06/07 11:12:10 $
7   Version:   $Revision: 1.1 $
8                                                                                 
9   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10   l'Image). All rights reserved. See Doc/License.txt or
11   http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details.
12                                                                                 
13      This software is distributed WITHOUT ANY WARRANTY; without even
14      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15      PURPOSE.  See the above copyright notices for more information.
16                                                                                 
17 =========================================================================*/
18 #include "gdcmFile.h"
19 #include "gdcmFileHelper.h"
20 #include "gdcmDebug.h"
21
22 #include "gdcmArgMgr.h"
23
24 #include <iostream>
25
26 int main(int argc, char *argv[])
27 {
28    START_USAGE(usage)
29    " \n ReWrite :\n",
30    " Re write a full gdcm-readable Dicom image",
31    "     (usefull when the file header is not very straight).",
32    "                 ",
33    " usage: ReWrite filein=inputFileName fileout=anonymizedFileName ",
34    "       [mode=write mode] [noshadow] [noseq][debug] ", 
35    "        mode = a (ACR), x (Explicit VR Dicom), r (RAW : only pixels)",
36    "        noshadow : user doesn't want to load Private groups (odd number)",
37    "        noseq    : user doesn't want to load Sequences ",
38    "        debug    : user wants to run the program in 'debug mode' ",
39    FINISH_USAGE
40
41    // ----- Initialize Arguments Manager ------   
42    gdcm::ArgMgr *am = new gdcm::ArgMgr(argc, argv);
43   
44    if (am->ArgMgrDefined("usage")) 
45    {
46       am->ArgMgrUsage(usage); // Display 'usage'
47       delete am;
48       return 0;
49    }
50    char *fileName = am->ArgMgrWantString("filein",usage);
51    if ( fileName == NULL )
52    {
53       delete am;
54       return 0;
55    }
56
57    char *outputFileName = am->ArgMgrWantString("fileout",usage);
58    if ( outputFileName == NULL )
59    {
60       delete am;
61       return 0;
62    }
63
64    char *mode = am->ArgMgrGetString("filein","X");
65
66    int loadMode;
67    if ( am->ArgMgrDefined("noshadow") && am->ArgMgrDefined("noseq") )
68        loadMode = NO_SEQ | NO_SHADOW;  
69    else if ( am->ArgMgrDefined("noshadow") )
70       loadMode = NO_SHADOW;
71    else if ( am->ArgMgrDefined("noseq") )
72       loadMode = NO_SEQ;
73    else
74       loadMode = 0;
75
76    if (am->ArgMgrDefined("debug"))
77       gdcm::Debug::DebugOn();
78  
79    // if unused Param we give up
80    if ( am->ArgMgrPrintUnusedLabels() )
81    { 
82       am->ArgMgrUsage(usage);
83       delete am;
84       return 0;
85    }
86
87    delete am;  // we don't need Argument Manager any longer
88
89    void *imageData;
90    int dataSize;
91
92    gdcm::File *e1 = new gdcm::File();
93    e1->SetLoadMode(loadMode);
94
95    bool res = e1->Load( fileName );
96    if ( !res )
97    {
98       delete e1;
99       delete am;
100       return 0;
101    }
102    if (!e1->IsReadable())
103    {
104        std::cerr << "Sorry, not a Readable DICOM / ACR File"  <<std::endl;
105        delete e1;
106        delete am; 
107        return 0;
108    }
109    
110    gdcm::FileHelper *f1 = new gdcm::FileHelper(e1);
111
112 // ---     
113
114    dataSize = f1->GetImageDataSize();
115    std::cout <<std::endl <<" dataSize " << dataSize << std::endl;
116    int nX,nY,nZ,sPP,planarConfig;
117    std::string pixelType, transferSyntaxName;
118    nX=e1->GetXSize();
119    nY=e1->GetYSize();
120    nZ=e1->GetZSize();
121    std::cout << " DIMX=" << nX << " DIMY=" << nY << " DIMZ=" << nZ << std::endl;
122
123    pixelType    = e1->GetPixelType();
124    sPP          = e1->GetSamplesPerPixel();
125    planarConfig = e1->GetPlanarConfiguration();
126    
127    std::cout << " pixelType="           << pixelType 
128              << " SampleserPixel="      << sPP
129              << " PlanarConfiguration=" << planarConfig 
130              << " PhotometricInterpretation=" 
131                                 << e1->GetEntryValue(0x0028,0x0004) 
132              << std::endl;
133
134    int numberOfScalarComponents=e1->GetNumberOfScalarComponents();
135    std::cout << "NumberOfScalarComponents " << numberOfScalarComponents <<std::endl;
136    transferSyntaxName = e1->GetTransferSyntaxName();
137    std::cout << " TransferSyntaxName= [" << transferSyntaxName << "]" << std::endl;
138    
139    imageData= f1->GetImageData();
140
141    switch (mode[0])
142    {
143    case 'A' :
144             // Writting an ACR file
145             // from a full gdcm readable File
146
147       std::cout << "WriteACR" << std::endl;
148       f1->WriteAcr(outputFileName);
149       break;
150
151    case 'D' : // Not documented in the 'usage', because the method is known to be bugged. 
152
153            // Writting a DICOM Implicit VR file
154            // from a full gdcm readable File
155
156       std::cout << "WriteDCM Implicit VR" << std::endl;
157       f1->WriteDcmImplVR(outputFileName);
158       break;
159
160    case 'X' :
161               // writting a DICOM Explicit VR 
162               // from a full gdcm readable File
163
164       std::cout << "WriteDCM Explicit VR" << std::endl;
165       f1->WriteDcmExplVR(outputFileName);
166       break;
167
168    case 'R' :
169              //  Writting a Raw File, 
170
171       std::cout << "WriteRaw" << std::endl;
172       f1->WriteRawData(outputFileName);
173       break;
174
175    }
176    delete e1;
177    delete f1;
178    delete am;
179    return 0;
180 }
181