]> Creatis software - gdcm.git/blob - Example/ReWrite.cxx
To avoid 'unused' 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/14 09:21:00 $
7   Version:   $Revision: 1.6 $
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    "        rgb      : user wants to tranform LUT (if any) to RGB pixels    ",
39    "        debug    : user wants to run the program in 'debug mode'        ",
40    FINISH_USAGE
41
42    // ----- Initialize Arguments Manager ------   
43    gdcm::ArgMgr *am = new gdcm::ArgMgr(argc, argv);
44   
45    if (am->ArgMgrDefined("usage")) 
46    {
47       am->ArgMgrUsage(usage); // Display 'usage'
48       delete am;
49       return 0;
50    }
51    char *fileName = am->ArgMgrWantString("filein",usage);
52    if ( fileName == NULL )
53    {
54       delete am;
55       return 0;
56    }
57
58    char *outputFileName = am->ArgMgrWantString("fileout",usage);
59    if ( outputFileName == NULL )
60    {
61       delete am;
62       return 0;
63    }
64
65    char *mode = am->ArgMgrGetString("mode",(char *)"X");
66
67    int loadMode;
68    if ( am->ArgMgrDefined("noshadow") && am->ArgMgrDefined("noseq") )
69        loadMode = NO_SEQ | NO_SHADOW;  
70    else if ( am->ArgMgrDefined("noshadow") )
71       loadMode = NO_SHADOW;
72    else if ( am->ArgMgrDefined("noseq") )
73       loadMode = NO_SEQ;
74    else
75       loadMode = 0;
76
77    bool rgb = ( 0 != am->ArgMgrDefined("RGB") );
78
79    if (am->ArgMgrDefined("debug"))
80       gdcm::Debug::DebugOn();
81  
82    // if unused Params we give up
83    if ( am->ArgMgrPrintUnusedLabels() )
84    { 
85       am->ArgMgrUsage(usage);
86       delete am;
87       return 0;
88    }
89
90    delete am;  // we don't need Argument Manager any longer
91
92    // ----------- End Arguments Manager ---------
93
94    gdcm::File *e1 = new gdcm::File();
95    e1->SetLoadMode(loadMode);
96
97    bool res = e1->Load( fileName );
98    if ( !res )
99    {
100       delete e1;
101       delete am;
102       return 0;
103    }
104   
105    if (!e1->IsReadable())
106    {
107        std::cerr << "Sorry, not a Readable DICOM / ACR File"  <<std::endl;
108        delete e1;
109        delete am; 
110        return 0;
111    }
112    
113    gdcm::FileHelper *f1 = new gdcm::FileHelper(e1);
114    void *imageData; 
115    int dataSize;
116   
117    if (rgb)
118    {
119       dataSize  = f1->GetImageDataSize();
120       imageData = f1->GetImageData(); // somewhat important... can't remember
121       f1->SetWriteModeToRGB();
122    }
123    else
124    {
125       dataSize  = f1->GetImageDataRawSize();
126       imageData = f1->GetImageDataRaw();// somewhat important... can't remember
127       f1->SetWriteModeToRaw();
128    }
129
130    if ( imageData == 0 ) // to avoid warning
131    {
132       std::cout << "Was unable to read pixels " << std::endl;
133    }
134    std::cout <<std::endl <<" dataSize " << dataSize << std::endl;
135    int nX,nY,nZ,sPP,planarConfig;
136    std::string pixelType, transferSyntaxName;
137    nX=e1->GetXSize();
138    nY=e1->GetYSize();
139    nZ=e1->GetZSize();
140    std::cout << " DIMX=" << nX << " DIMY=" << nY << " DIMZ=" << nZ << std::endl;
141
142    pixelType    = e1->GetPixelType();
143    sPP          = e1->GetSamplesPerPixel();
144    planarConfig = e1->GetPlanarConfiguration();
145    
146    std::cout << " pixelType="           << pixelType 
147              << " SampleserPixel="      << sPP
148              << " PlanarConfiguration=" << planarConfig 
149              << " PhotometricInterpretation=" 
150                                 << e1->GetEntryValue(0x0028,0x0004) 
151              << std::endl;
152
153    int numberOfScalarComponents=e1->GetNumberOfScalarComponents();
154    std::cout << "NumberOfScalarComponents " << numberOfScalarComponents <<std::endl;
155    transferSyntaxName = e1->GetTransferSyntaxName();
156    std::cout << " TransferSyntaxName= [" << transferSyntaxName << "]" << std::endl;
157
158    switch (mode[0])
159    {
160    case 'A' :
161    case 'a' :
162             // Writting an ACR file
163             // from a full gdcm readable File
164
165       std::cout << "WriteACR" << std::endl;
166       f1->WriteAcr(outputFileName);
167       break;
168
169    case 'D' : // Not documented in the 'usage', because the method is known to be bugged. 
170    case 'd' :
171            // Writting a DICOM Implicit VR file
172            // from a full gdcm readable File
173
174       std::cout << "WriteDCM Implicit VR" << std::endl;
175       f1->WriteDcmImplVR(outputFileName);
176       break;
177
178    case 'X' :
179    case 'x' :
180               // writting a DICOM Explicit VR 
181               // from a full gdcm readable File
182
183       std::cout << "WriteDCM Explicit VR" << std::endl;
184       f1->WriteDcmExplVR(outputFileName);
185       break;
186
187    case 'R' :
188    case 'r' :
189              //  Writting a Raw File, 
190
191       std::cout << "WriteRaw" << std::endl;
192       f1->WriteRawData(outputFileName);
193       break;
194
195    }
196    delete e1;
197    delete f1;
198    return 0;
199 }
200