--- /dev/null
+// This example illustrates how the vtkGdcmWriter vtk class can be
+// used in order to:
+//
+// Usage:
+//
+//----------------------------------------------------------------------------
+#include <iostream>
+
+#include <vtkImageMapToColors.h>
+#include <vtkLookupTable.h>
+#include <vtkImageData.h>
+
+#include "vtkGdcmReader.h"
+#include "vtkGdcmWriter.h"
+
+#ifndef vtkFloatingPointType
+#define vtkFloatingPointType float
+#endif
+
+#include "gdcmArgMgr.h" // for Argument Manager functions
+
+//----------------------------------------------------------------------------
+int main(int argc, char *argv[])
+{
+ START_USAGE(usage)
+ " \n vtkWriteDicomExtended : \n",
+ " Reads a DICOM file and re writes it according to user's requierements. ",
+ " ",
+ " usage: vtkWriteDicomExtended filein=dicom file to read ",
+ " [filecontent = ] [2D] ",
+ " [noshadowseq][noshadow][noseq] ",
+ " [debug] ",
+ " filecontent = 1 : USER_OWN_IMAGE ",
+ " = 2 : FILTERED_IMAGE ",
+ " = 3 : CREATED_IMAGE ",
+ " = 4 : UNMODIFIED_PIXELS_IMAGE ",
+ " noshadowseq: user doesn't want to load Private Sequences ",
+ " noshadow : user doesn't want to load Private groups (odd number) ",
+ " noseq : user doesn't want to load Sequences ",
+ " debug : user wants to run the program in 'debug mode' ",
+ FINISH_USAGE
+
+
+ // Initialize Arguments Manager
+ gdcm::ArgMgr *am= new gdcm::ArgMgr(argc, argv);
+
+ if (argc == 1 || am->ArgMgrDefined("usage") )
+ {
+ am->ArgMgrUsage(usage); // Display 'usage'
+ delete am;
+ return 0;
+ }
+
+ int loadMode = gdcm::LD_ALL;
+ if ( am->ArgMgrDefined("noshadowseq") )
+ loadMode |= gdcm::LD_NOSHADOWSEQ;
+ else
+ {
+ if ( am->ArgMgrDefined("noshadow") )
+ loadMode |= gdcm::LD_NOSHADOW;
+ if ( am->ArgMgrDefined("noseq") )
+ loadMode |= gdcm::LD_NOSEQ;
+ }
+
+ int filecontent = am->ArgMgrGetInt("filecontent", 1);
+
+ char *filein = am->ArgMgrWantString("filein",usage);
+ char *fileout = am->ArgMgrWantString("fileout",usage);
+
+ if (am->ArgMgrDefined("debug"))
+ gdcm::Debug::DebugOn();
+
+ bool deuxD = am->ArgMgrDefined("2D");
+
+ /* if unused Param we give up */
+ if ( am->ArgMgrPrintUnusedLabels() )
+ {
+ am->ArgMgrUsage(usage);
+ delete am;
+ return 0;
+ }
+
+// ------------------------------------------------------------
+
+ vtkGdcmReader *reader = vtkGdcmReader::New();
+ reader->AllowLookupTableOff();
+ reader->SetFileName( argv[1] );
+ reader->Update();
+
+ vtkImageData *output;
+ if( reader->GetLookupTable() )
+ {
+ //convert to color:
+ vtkImageMapToColors *map = vtkImageMapToColors::New ();
+ map->SetInput (reader->GetOutput());
+ map->SetLookupTable (reader->GetLookupTable());
+ map->SetOutputFormatToRGB();
+ output = map->GetOutput();
+ map->Delete();
+ }
+ else
+ {
+ output = reader->GetOutput();
+ }
+
+ //print debug info:
+ output->Print(cout);
+
+ //////////////////////////////////////////////////////////
+ // WRITE...
+ //if you wish you can export dicom to a vtk file
+ // this file will have the add of .tmp.dcm extention
+
+ std::string fileName(filein);
+ vtkGdcmWriter *writer = vtkGdcmWriter::New();
+
+ switch (filecontent)
+ {
+ case 1:
+ writer->SetContentTypeToUserOwnImage();
+ fileName = fileName + "_UserOwnImage.dcm";
+ break;
+
+ case 2:
+ writer->SetContentTypeToFilteredImage();
+ fileName = fileName + "_FilteredImage.dcm";
+ break;
+
+ case 3:
+ writer->SetContentTypeToUserCreatedImage();
+ fileName = fileName + "_FilteredImage.dcm";
+ break;
+
+ case 4:
+ writer->SetContentTypeToUserCreatedImage();
+ fileName = fileName + "_UnmodifiedPixelsImage.dcm";
+ break;
+ }
+
+ fileName += ".dcm";
+
+ // For 3D
+ writer->SetFileDimensionality(3);
+ writer->SetFileName(fileName.c_str());
+ if(deuxD)
+ {
+ writer->SetFileDimensionality(2);
+ writer->SetFilePrefix(fileout);
+ writer->SetFilePattern("%s%d.dcm");
+ }
+
+ writer->SetInput(output);
+ writer->Write();
+ //////////////////////////////////////////////////////////
+
+ // Clean up
+ writer->Delete();
+ reader->Delete();
+
+ return 0;
+}