]> Creatis software - gdcm.git/blob - Example/ReWrite.cxx
COMP: Removing warning
[gdcm.git] / Example / ReWrite.cxx
1 /*=========================================================================
2                                                                                 
3   Program:   gdcm
4   Module:    $RCSfile: ReWrite.cxx,v $
5   Language:  C++
6   Date:      $Date: 2005/06/09 21:32:14 $
7   Version:   $Revision: 1.2 $
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    int dataSize;
90
91    gdcm::File *e1 = new gdcm::File();
92    e1->SetLoadMode(loadMode);
93
94    bool res = e1->Load( fileName );
95    if ( !res )
96    {
97       delete e1;
98       delete am;
99       return 0;
100    }
101    if (!e1->IsReadable())
102    {
103        std::cerr << "Sorry, not a Readable DICOM / ACR File"  <<std::endl;
104        delete e1;
105        delete am; 
106        return 0;
107    }
108    
109    gdcm::FileHelper *f1 = new gdcm::FileHelper(e1);
110
111 // ---     
112
113    dataSize = f1->GetImageDataSize();
114    std::cout <<std::endl <<" dataSize " << dataSize << std::endl;
115    int nX,nY,nZ,sPP,planarConfig;
116    std::string pixelType, transferSyntaxName;
117    nX=e1->GetXSize();
118    nY=e1->GetYSize();
119    nZ=e1->GetZSize();
120    std::cout << " DIMX=" << nX << " DIMY=" << nY << " DIMZ=" << nZ << std::endl;
121
122    pixelType    = e1->GetPixelType();
123    sPP          = e1->GetSamplesPerPixel();
124    planarConfig = e1->GetPlanarConfiguration();
125    
126    std::cout << " pixelType="           << pixelType 
127              << " SampleserPixel="      << sPP
128              << " PlanarConfiguration=" << planarConfig 
129              << " PhotometricInterpretation=" 
130                                 << e1->GetEntryValue(0x0028,0x0004) 
131              << std::endl;
132
133    int numberOfScalarComponents=e1->GetNumberOfScalarComponents();
134    std::cout << "NumberOfScalarComponents " << numberOfScalarComponents <<std::endl;
135    transferSyntaxName = e1->GetTransferSyntaxName();
136    std::cout << " TransferSyntaxName= [" << transferSyntaxName << "]" << std::endl;
137    
138    f1->GetImageData(); // somewhat important... can't remember
139
140    switch (mode[0])
141    {
142    case 'A' :
143             // Writting an ACR file
144             // from a full gdcm readable File
145
146       std::cout << "WriteACR" << std::endl;
147       f1->WriteAcr(outputFileName);
148       break;
149
150    case 'D' : // Not documented in the 'usage', because the method is known to be bugged. 
151
152            // Writting a DICOM Implicit VR file
153            // from a full gdcm readable File
154
155       std::cout << "WriteDCM Implicit VR" << std::endl;
156       f1->WriteDcmImplVR(outputFileName);
157       break;
158
159    case 'X' :
160               // writting a DICOM Explicit VR 
161               // from a full gdcm readable File
162
163       std::cout << "WriteDCM Explicit VR" << std::endl;
164       f1->WriteDcmExplVR(outputFileName);
165       break;
166
167    case 'R' :
168              //  Writting a Raw File, 
169
170       std::cout << "WriteRaw" << std::endl;
171       f1->WriteRawData(outputFileName);
172       break;
173
174    }
175    delete e1;
176    delete f1;
177    delete am;
178    return 0;
179 }
180