]> Creatis software - gdcm.git/blob - Example/TestWrite.cxx
add a v(ideo inv) option to TestWrite -Special Hector Duque-
[gdcm.git] / Example / TestWrite.cxx
1 #include <iostream>
2 #include <stdio.h>
3 #include "gdcm.h"
4
5 int main(int argc, char* argv[])
6 {  
7    std::string toto;
8    char zozo[200];
9
10
11    gdcmHeader* e1;
12    gdcmFile  * f1;
13
14    //gdcmDocument * d;  //not used
15    void* imageData;
16    int dataSize;
17
18    if (argc < 3) {
19          std::cerr << "usage: " << std::endl 
20                    << argv[0] << " fileName writtingMode "
21                 << std::endl 
22                    << "(a : ACR, gives fileNamed : DICOM Implicit VR,"
23                    << " x : DICOM Explicit VR  r : RAW,"
24                    << " v : explicit VR + computes the video inv image"
25                 << std::endl;
26
27          return 0;
28    }
29 /*
30    if (0) {  // Just to keep the code for further use
31       std::cout <<std::endl << "-------- Test gdcmHeader ------" <<std::endl;
32       e1 = new gdcmHeaderHelper(argv[1]);
33       if (!f1->GetHeader()->IsReadable()) {
34          std::cout << "Sorry, not a DICOM / ACR File"  <<std::endl;
35          exit(0);
36       }
37       std::cout << std::endl << "----------------------> after new gdcmHeader"
38                 << std::endl;
39       e1->PrintEntry();
40       std::cout <<std::endl <<"---------------------------------------" 
41                 <<std::endl;
42    }
43 */
44
45    std::cout << std::endl
46              << "--------------------- file :" << argv[1] 
47              << std::endl;
48      
49    toto = argv[1]; 
50
51    e1 = new gdcmHeader( toto.c_str() );
52    if (!e1->IsReadable())
53    {
54        std::cerr << "Sorry, not a Readable DICOM / ACR File"  <<std::endl;
55        return 0;
56    }
57   // e1->Print(); 
58    
59    f1 = new gdcmFile(e1);
60 // ---     
61
62    dataSize = f1->GetImageDataSize();
63    std::cout <<std::endl <<" dataSize " << dataSize << std::endl;
64    int nX,nY,nZ,sPP,planarConfig;
65    std::string pixelType, transferSyntaxName;
66    nX=e1->GetXSize();
67    nY=e1->GetYSize();
68    nZ=e1->GetZSize();
69    std::cout << " DIMX=" << nX << " DIMY=" << nY << " DIMZ=" << nZ << std::endl;
70
71    pixelType    = e1->GetPixelType();
72    sPP          = e1->GetSamplesPerPixel();
73    planarConfig = e1->GetPlanarConfiguration();
74    
75    std::cout << " pixelType="           << pixelType 
76              << " SampleserPixel="      << sPP
77              << " PlanarConfiguration=" << planarConfig 
78              << " PhotometricInterpretation=" 
79                                 << e1->GetEntryByNumber(0x0028,0x0004) 
80              << std::endl;
81
82    int numberOfScalarComponents=e1->GetNumberOfScalarComponents();
83    std::cout << "NumberOfScalarComponents " << numberOfScalarComponents <<std::endl;
84    transferSyntaxName = e1->GetTransfertSyntaxName();
85    std::cout << " TransferSyntaxName= [" << transferSyntaxName << "]" << std::endl;
86    
87    if (  transferSyntaxName != "Implicit VR - Little Endian"
88       && transferSyntaxName != "Explicit VR - Little Endian"     
89       && transferSyntaxName != "Deflated Explicit VR - Little Endian"      
90       && transferSyntaxName != "Explicit VR - Big Endian"
91       && transferSyntaxName != "Uncompressed ACR-NEMA"     ) {
92       std::cout << std::endl << "==========================================="
93                 << std::endl; 
94       f1->ParsePixelData();
95       std::cout << std::endl << "==========================================="
96                 << std::endl; 
97    }
98    imageData= f1->GetImageData();
99
100    switch (argv[2][0]) {
101    case 'a' :
102             // ecriture d'un fichier ACR 
103             // à partir d'un dcmHeader correct.
104
105       sprintf(zozo, "%s.ACR", toto.c_str());
106       printf ("WriteACR\n");
107       f1->WriteAcr(zozo);
108       break;
109
110    case 'd' :
111            // ecriture d'un fichier DICOM Implicit VR 
112            // à partir d'un dcmHeader correct.
113
114       sprintf(zozo, "%s.DCM", toto.c_str());
115       printf ("WriteDCM Implicit VR\n");
116       f1->WriteDcmImplVR(zozo);
117       break;
118
119    case 'x' :
120               // ecriture d'un fichier DICOM Explicit VR 
121               // à partir d'un dcmHeader correct.
122
123       sprintf(zozo, "%s.XDCM", toto.c_str());
124       std::cout << "WriteDCM Explicit VR" << std::endl;
125       f1->WriteDcmExplVR(zozo);
126       break;
127
128    case 'r' :
129              //  Ecriture d'un Raw File, a afficher avec 
130              // affim filein= dimx= dimy= nbit= signe=
131
132       sprintf(zozo, "%s.RAW", toto.c_str());
133       std::cout << "WriteRaw" << std::endl;
134       f1->WriteRawData(zozo);
135       break;
136
137    case 'v' :
138
139      if ( f1->GetHeader()->GetBitsStored() == 8)
140         for (int i=0; i<dataSize; i++) {
141            ((char *)imageData)[i] += 127;
142         }
143      else  
144         for (int i=0; i<dataSize/2; i++) {
145            ((unsigned short *)imageData)[i] += 32767;
146         }
147
148          sprintf(zozo, "%s.DCM", toto.c_str());
149          printf ("WriteDCM Implicit VR\n");
150          f1->WriteDcmImplVR(zozo);
151          break;
152
153    }
154   return 0;
155 }
156