]> Creatis software - gdcm.git/blob - vtk/vtkWriteDicomExtended.cxx
Example a using new features .
[gdcm.git] / vtk / vtkWriteDicomExtended.cxx
1 // This example illustrates how the vtkGdcmWriter vtk class can be
2 // used in order to:
3 //
4 // Usage:
5 // 
6 //----------------------------------------------------------------------------
7 #include <iostream>
8
9 #include <vtkImageMapToColors.h>
10 #include <vtkLookupTable.h>
11 #include <vtkImageData.h>
12
13 #include "vtkGdcmReader.h"
14 #include "vtkGdcmWriter.h"
15
16 #ifndef vtkFloatingPointType
17 #define vtkFloatingPointType float
18 #endif
19
20 #include "gdcmArgMgr.h" // for Argument Manager functions
21
22 //----------------------------------------------------------------------------
23 int main(int argc, char *argv[])
24 {
25    START_USAGE(usage)
26    " \n vtkWriteDicomExtended : \n",
27    " Reads a DICOM file and re writes it according to user's requierements.   ",
28    "                                                                          ",
29    " usage: vtkWriteDicomExtended filein=dicom file to read                   ",
30    "                           [filecontent = ] [2D]                          ",
31    "                           [noshadowseq][noshadow][noseq]                 ",
32    "                           [debug]                                        ",
33    "      filecontent = 1 : USER_OWN_IMAGE                                    ",
34    "                  = 2 : FILTERED_IMAGE                                    ",
35    "                  = 3 : CREATED_IMAGE                                     ",
36    "                  = 4 : UNMODIFIED_PIXELS_IMAGE                           ",
37    "      noshadowseq: user doesn't want to load Private Sequences            ",
38    "      noshadow   : user doesn't want to load Private groups (odd number)  ",
39    "      noseq      : user doesn't want to load Sequences                    ",
40    "      debug      : user wants to run the program in 'debug mode'          ",
41    FINISH_USAGE
42    
43    
44     // Initialize Arguments Manager   
45    gdcm::ArgMgr *am= new gdcm::ArgMgr(argc, argv);
46   
47    if (argc == 1 || am->ArgMgrDefined("usage") )
48    {
49       am->ArgMgrUsage(usage); // Display 'usage'
50       delete am;
51       return 0;
52    }
53    
54    int loadMode = gdcm::LD_ALL;
55    if ( am->ArgMgrDefined("noshadowseq") )
56       loadMode |= gdcm::LD_NOSHADOWSEQ;
57    else 
58    {
59       if ( am->ArgMgrDefined("noshadow") )
60          loadMode |= gdcm::LD_NOSHADOW;
61       if ( am->ArgMgrDefined("noseq") )
62          loadMode |= gdcm::LD_NOSEQ;
63    }
64    
65    int filecontent =  am->ArgMgrGetInt("filecontent", 1);
66    
67    char *filein = am->ArgMgrWantString("filein",usage);
68    char *fileout = am->ArgMgrWantString("fileout",usage);
69    
70    if (am->ArgMgrDefined("debug"))
71       gdcm::Debug::DebugOn();
72       
73    bool deuxD = am->ArgMgrDefined("2D");
74
75    /* if unused Param we give up */
76    if ( am->ArgMgrPrintUnusedLabels() )
77    {
78       am->ArgMgrUsage(usage);
79       delete am;
80       return 0;
81    }
82    
83 // ------------------------------------------------------------           
84   
85    vtkGdcmReader *reader = vtkGdcmReader::New();
86    reader->AllowLookupTableOff();
87    reader->SetFileName( argv[1] );
88    reader->Update();
89
90    vtkImageData *output;
91    if( reader->GetLookupTable() )
92    {
93       //convert to color:
94       vtkImageMapToColors *map = vtkImageMapToColors::New ();
95       map->SetInput (reader->GetOutput());
96       map->SetLookupTable (reader->GetLookupTable());
97       map->SetOutputFormatToRGB();
98       output = map->GetOutput();
99       map->Delete();
100    }
101    else
102    {
103       output = reader->GetOutput();
104    }
105   
106    //print debug info:
107    output->Print(cout);
108
109    //////////////////////////////////////////////////////////
110    // WRITE...
111    //if you wish you can export dicom to a vtk file 
112    // this file will have the add of .tmp.dcm extention
113    
114    std::string fileName(filein);
115    vtkGdcmWriter *writer = vtkGdcmWriter::New();
116       
117    switch (filecontent)
118    {
119       case 1:
120          writer->SetContentTypeToUserOwnImage();
121          fileName = fileName + "_UserOwnImage.dcm";
122          break;
123  
124       case 2:
125          writer->SetContentTypeToFilteredImage();
126          fileName = fileName + "_FilteredImage.dcm";
127          break;
128  
129       case 3:
130          writer->SetContentTypeToUserCreatedImage();
131          fileName = fileName + "_FilteredImage.dcm";
132          break;
133  
134       case 4:
135          writer->SetContentTypeToUserCreatedImage();
136          fileName = fileName + "_UnmodifiedPixelsImage.dcm";
137          break; 
138    }
139    
140    fileName += ".dcm";
141
142    // For 3D
143    writer->SetFileDimensionality(3);
144    writer->SetFileName(fileName.c_str());
145    if(deuxD)
146    {
147          writer->SetFileDimensionality(2);
148          writer->SetFilePrefix(fileout);
149          writer->SetFilePattern("%s%d.dcm");
150    }
151
152    writer->SetInput(output);
153    writer->Write();
154    //////////////////////////////////////////////////////////
155
156    // Clean up
157    writer->Delete();
158    reader->Delete();
159
160    return 0;
161 }