00001
00002
00003
00004
00005
00006
00007 #include <iostream>
00008
00009 #include <vtkImageMapToColors.h>
00010 #include <vtkLookupTable.h>
00011 #include <vtkImageData.h>
00012
00013 #include "vtkGdcmReader.h"
00014 #include "vtkGdcmWriter.h"
00015
00016 #ifndef vtkFloatingPointType
00017 #define vtkFloatingPointType float
00018 #endif
00019
00020 #include "gdcmArgMgr.h"
00021 #include "gdcmFile.h"
00022
00023
00024 int main(int argc, char *argv[])
00025 {
00026 START_USAGE(usage)
00027 " \n vtkWriteDicomExtended : \n",
00028 " Reads a DICOM file and re writes it according to user's requierements. ",
00029 " ",
00030 " usage: vtkWriteDicomExtended filein=dicom file to read ",
00031 " [filecontent = ] [2D] ",
00032 " [noshadowseq][noshadow][noseq] ",
00033 " [debug] ",
00034 " filecontent = 1 : USER_OWN_IMAGE ",
00035 " = 2 : FILTERED_IMAGE ",
00036 " = 3 : CREATED_IMAGE ",
00037 " = 4 : UNMODIFIED_PIXELS_IMAGE ",
00038 " noshadowseq: user doesn't want to load Private Sequences ",
00039 " noshadow : user doesn't want to load Private groups (odd number) ",
00040 " noseq : user doesn't want to load Sequences ",
00041 " debug : user wants to run the program in 'debug mode' ",
00042 FINISH_USAGE
00043
00044
00045
00046 GDCM_NAME_SPACE::ArgMgr *am= new GDCM_NAME_SPACE::ArgMgr(argc, argv);
00047
00048 if (argc == 1 || am->ArgMgrDefined("usage") )
00049 {
00050 am->ArgMgrUsage(usage);
00051 delete am;
00052 return 0;
00053 }
00054
00055 int loadMode = GDCM_NAME_SPACE::LD_ALL;
00056 if ( am->ArgMgrDefined("noshadowseq") )
00057 loadMode |= GDCM_NAME_SPACE::LD_NOSHADOWSEQ;
00058 else
00059 {
00060 if ( am->ArgMgrDefined("noshadow") )
00061 loadMode |= GDCM_NAME_SPACE::LD_NOSHADOW;
00062 if ( am->ArgMgrDefined("noseq") )
00063 loadMode |= GDCM_NAME_SPACE::LD_NOSEQ;
00064 }
00065
00066 int filecontent = am->ArgMgrGetInt("filecontent", 1);
00067
00068 char *filein = am->ArgMgrWantString("filein",usage);
00069 char *fileout = (char *)(am->ArgMgrGetString("fileout","fileout"));
00070
00071 if (am->ArgMgrDefined("debug"))
00072 GDCM_NAME_SPACE::Debug::DebugOn();
00073
00074 int deuxD = am->ArgMgrDefined("2D");
00075
00076
00077 if ( am->ArgMgrPrintUnusedLabels() )
00078 {
00079 am->ArgMgrUsage(usage);
00080 delete am;
00081 return 0;
00082 }
00083
00084
00085 std::vector<GDCM_NAME_SPACE::File* > cfl;
00086
00087 GDCM_NAME_SPACE::File *f = GDCM_NAME_SPACE::File::New();
00088 f->SetFileName(filein);
00089 f->Load();
00090 cfl.push_back(f);
00091
00092 vtkGdcmReader *reader = vtkGdcmReader::New();
00093 reader->AllowLookupTableOff();
00094
00095
00096 reader->SetCoherentFileList(&cfl);
00097 reader->Update();
00098
00099 vtkImageData *output;
00100 if( reader->GetLookupTable() )
00101 {
00102
00103 vtkImageMapToColors *map = vtkImageMapToColors::New ();
00104 map->SetInput (reader->GetOutput());
00105 map->SetLookupTable (reader->GetLookupTable());
00106 map->SetOutputFormatToRGB();
00107 output = map->GetOutput();
00108 map->Delete();
00109 }
00110 else
00111 {
00112 output = reader->GetOutput();
00113 }
00114
00115
00116 output->Print(cout);
00117
00119
00120
00121
00122
00123 std::string fileName(filein);
00124 vtkGdcmWriter *writer = vtkGdcmWriter::New();
00125
00126 switch (filecontent)
00127 {
00128 case 1:
00129 writer->SetContentTypeToUserOwnImage();
00130 fileName = fileName + "_UserOwnImage.dcm";
00131 break;
00132
00133 case 2:
00134 writer->SetContentTypeToFilteredImage();
00135 writer->SetGdcmFile( f );
00136 fileName = fileName + "_FilteredImage.dcm";
00137 break;
00138
00139 case 3:
00140 writer->SetContentTypeToUserCreatedImage();
00141 writer->SetGdcmFile( f );
00142 fileName = fileName + "_UserCreatedImage.dcm";
00143 break;
00144
00145 case 4:
00146 writer->SetContentTypeToUserCreatedImage();
00147 writer->SetGdcmFile( f );
00148 fileName = fileName + "_UnmodifiedPixelsImage.dcm";
00149 break;
00150 }
00151
00153
00154 if(deuxD)
00155 {
00156 writer->SetFileDimensionality(2);
00157 writer->SetFilePrefix(fileout);
00158 writer->SetFilePattern("%s%d.dcm");
00159 }
00160 else
00161 {
00162 fileName += ".dcm";
00163
00164 writer->SetFileDimensionality(3);
00165 writer->SetFileName(fileName.c_str());
00166 }
00167
00168 writer->SetInput(output);
00169 writer->Write();
00171
00172
00173 writer->Delete();
00174 reader->Delete();
00175
00176 return 0;
00177 }