1 /*=========================================================================
4 Module: $RCSfile: ReWrite.cxx,v $
6 Date: $Date: 2005/06/07 11:12:10 $
7 Version: $Revision: 1.1 $
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.
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.
17 =========================================================================*/
19 #include "gdcmFileHelper.h"
20 #include "gdcmDebug.h"
22 #include "gdcmArgMgr.h"
26 int main(int argc, char *argv[])
30 " Re write a full gdcm-readable Dicom image",
31 " (usefull when the file header is not very straight).",
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' ",
41 // ----- Initialize Arguments Manager ------
42 gdcm::ArgMgr *am = new gdcm::ArgMgr(argc, argv);
44 if (am->ArgMgrDefined("usage"))
46 am->ArgMgrUsage(usage); // Display 'usage'
50 char *fileName = am->ArgMgrWantString("filein",usage);
51 if ( fileName == NULL )
57 char *outputFileName = am->ArgMgrWantString("fileout",usage);
58 if ( outputFileName == NULL )
64 char *mode = am->ArgMgrGetString("filein","X");
67 if ( am->ArgMgrDefined("noshadow") && am->ArgMgrDefined("noseq") )
68 loadMode = NO_SEQ | NO_SHADOW;
69 else if ( am->ArgMgrDefined("noshadow") )
71 else if ( am->ArgMgrDefined("noseq") )
76 if (am->ArgMgrDefined("debug"))
77 gdcm::Debug::DebugOn();
79 // if unused Param we give up
80 if ( am->ArgMgrPrintUnusedLabels() )
82 am->ArgMgrUsage(usage);
87 delete am; // we don't need Argument Manager any longer
92 gdcm::File *e1 = new gdcm::File();
93 e1->SetLoadMode(loadMode);
95 bool res = e1->Load( fileName );
102 if (!e1->IsReadable())
104 std::cerr << "Sorry, not a Readable DICOM / ACR File" <<std::endl;
110 gdcm::FileHelper *f1 = new gdcm::FileHelper(e1);
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;
121 std::cout << " DIMX=" << nX << " DIMY=" << nY << " DIMZ=" << nZ << std::endl;
123 pixelType = e1->GetPixelType();
124 sPP = e1->GetSamplesPerPixel();
125 planarConfig = e1->GetPlanarConfiguration();
127 std::cout << " pixelType=" << pixelType
128 << " SampleserPixel=" << sPP
129 << " PlanarConfiguration=" << planarConfig
130 << " PhotometricInterpretation="
131 << e1->GetEntryValue(0x0028,0x0004)
134 int numberOfScalarComponents=e1->GetNumberOfScalarComponents();
135 std::cout << "NumberOfScalarComponents " << numberOfScalarComponents <<std::endl;
136 transferSyntaxName = e1->GetTransferSyntaxName();
137 std::cout << " TransferSyntaxName= [" << transferSyntaxName << "]" << std::endl;
139 imageData= f1->GetImageData();
144 // Writting an ACR file
145 // from a full gdcm readable File
147 std::cout << "WriteACR" << std::endl;
148 f1->WriteAcr(outputFileName);
151 case 'D' : // Not documented in the 'usage', because the method is known to be bugged.
153 // Writting a DICOM Implicit VR file
154 // from a full gdcm readable File
156 std::cout << "WriteDCM Implicit VR" << std::endl;
157 f1->WriteDcmImplVR(outputFileName);
161 // writting a DICOM Explicit VR
162 // from a full gdcm readable File
164 std::cout << "WriteDCM Explicit VR" << std::endl;
165 f1->WriteDcmExplVR(outputFileName);
169 // Writting a Raw File,
171 std::cout << "WriteRaw" << std::endl;
172 f1->WriteRawData(outputFileName);