1 /*=========================================================================
4 Module: $RCSfile: ReWrite.cxx,v $
6 Date: $Date: 2005/07/07 17:31:53 $
7 Version: $Revision: 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.
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 " rgb : user wants to tranform LUT (if any) to RGB pixels ",
39 " debug : user wants to run the program in 'debug mode' ",
42 // ----- Initialize Arguments Manager ------
43 gdcm::ArgMgr *am = new gdcm::ArgMgr(argc, argv);
45 if (am->ArgMgrDefined("usage"))
47 am->ArgMgrUsage(usage); // Display 'usage'
51 char *fileName = am->ArgMgrWantString("filein",usage);
52 if ( fileName == NULL )
58 char *outputFileName = am->ArgMgrWantString("fileout",usage);
59 if ( outputFileName == NULL )
65 char *mode = am->ArgMgrGetString("mode",(char *)"X");
68 if ( am->ArgMgrDefined("noshadow") && am->ArgMgrDefined("noseq") )
69 loadMode = NO_SEQ | NO_SHADOW;
70 else if ( am->ArgMgrDefined("noshadow") )
72 else if ( am->ArgMgrDefined("noseq") )
77 bool rgb = ( 0 != am->ArgMgrDefined("RGB") );
79 if (am->ArgMgrDefined("debug"))
80 gdcm::Debug::DebugOn();
82 // if unused Params we give up
83 if ( am->ArgMgrPrintUnusedLabels() )
85 am->ArgMgrUsage(usage);
90 delete am; // we don't need Argument Manager any longer
92 // ----------- End Arguments Manager ---------
94 gdcm::File *f = new gdcm::File();
95 f->SetLoadMode( loadMode );
96 f->SetFileName( fileName );
104 if (!f->IsReadable())
106 std::cerr << "Sorry, not a Readable DICOM / ACR File" <<std::endl;
111 gdcm::FileHelper *fh = new gdcm::FileHelper(f);
117 dataSize = fh->GetImageDataSize();
118 imageData = fh->GetImageData(); // somewhat important... can't remember
119 fh->SetWriteModeToRGB();
123 dataSize = fh->GetImageDataRawSize();
124 imageData = fh->GetImageDataRaw();// somewhat important... can't remember
125 fh->SetWriteModeToRaw();
128 if ( imageData == 0 ) // to avoid warning
130 std::cout << "Was unable to read pixels " << std::endl;
132 std::cout <<std::endl <<" dataSize " << dataSize << std::endl;
133 int nX,nY,nZ,sPP,planarConfig;
134 std::string pixelType, transferSyntaxName;
138 std::cout << " DIMX=" << nX << " DIMY=" << nY << " DIMZ=" << nZ << std::endl;
140 pixelType = f->GetPixelType();
141 sPP = f->GetSamplesPerPixel();
142 planarConfig = f->GetPlanarConfiguration();
144 std::cout << " pixelType=" << pixelType
145 << " SampleserPixel=" << sPP
146 << " PlanarConfiguration=" << planarConfig
147 << " PhotometricInterpretation="
148 << f->GetEntryValue(0x0028,0x0004)
151 int numberOfScalarComponents=f->GetNumberOfScalarComponents();
152 std::cout << "NumberOfScalarComponents " << numberOfScalarComponents <<std::endl;
153 transferSyntaxName = f->GetTransferSyntaxName();
154 std::cout << " TransferSyntaxName= [" << transferSyntaxName << "]" << std::endl;
160 // Writting an ACR file
161 // from a full gdcm readable File
163 std::cout << "WriteACR" << std::endl;
164 fh->WriteAcr(outputFileName);
167 case 'D' : // Not documented in the 'usage', because the method is known to be bugged.
169 // Writting a DICOM Implicit VR file
170 // from a full gdcm readable File
172 std::cout << "WriteDCM Implicit VR" << std::endl;
173 fh->WriteDcmImplVR(outputFileName);
178 // writting a DICOM Explicit VR
179 // from a full gdcm readable File
181 std::cout << "WriteDCM Explicit VR" << std::endl;
182 fh->WriteDcmExplVR(outputFileName);
187 // Writting a Raw File,
189 std::cout << "WriteRaw" << std::endl;
190 fh->WriteRawData(outputFileName);