]> Creatis software - gdcm.git/blob - Example/TestWrite.cxx
* src/gdcmDocument.cxx ftell() return properly stored in a long (i.e.
[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    gdcm::Header* e1;
12    gdcm::File  * 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] << " OriginalFileName writtingMode "
21                 << std::endl 
22                    << "(a : ACR, produces a file named OriginalFileName.ACR"
23                    << " x : DICOM Explicit VR, produces a file named OriginalFileName.XDCM"
24                    << " r : RAW, produces a file named OriginalFileName.RAW"
25                    << " v : explicit VR + computes the video inv image --> OriginalFileName.VDCM"
26                 << std::endl;
27
28          return 0;
29    }
30 /*
31    if (0) {  // Just to keep the code for further use
32       std::cout <<std::endl << "-------- Test gdcmHeader ------" <<std::endl;
33       e1 = new gdcmHeaderHelper(argv[1]);
34       if (!f1->GetHeader()->IsReadable()) {
35          std::cout << "Sorry, not a DICOM / ACR File"  <<std::endl;
36          exit(0);
37       }
38       std::cout << std::endl << "----------------------> after new gdcmHeader"
39                 << std::endl;
40       e1->PrintEntry();
41       std::cout <<std::endl <<"---------------------------------------" 
42                 <<std::endl;
43    }
44 */
45
46    std::cout << std::endl
47              << "--------------------- file :" << argv[1] 
48              << std::endl;
49      
50    toto = argv[1]; 
51
52    e1 = new gdcm::Header( toto.c_str() );
53    if (!e1->IsReadable())
54    {
55        std::cerr << "Sorry, not a Readable DICOM / ACR File"  <<std::endl;
56        return 0;
57    }
58   // e1->Print(); 
59    
60    f1 = new gdcm::File(e1);
61 // ---     
62
63    dataSize = f1->GetImageDataSize();
64    std::cout <<std::endl <<" dataSize " << dataSize << std::endl;
65    int nX,nY,nZ,sPP,planarConfig;
66    std::string pixelType, transferSyntaxName;
67    nX=e1->GetXSize();
68    nY=e1->GetYSize();
69    nZ=e1->GetZSize();
70    std::cout << " DIMX=" << nX << " DIMY=" << nY << " DIMZ=" << nZ << std::endl;
71
72    pixelType    = e1->GetPixelType();
73    sPP          = e1->GetSamplesPerPixel();
74    planarConfig = e1->GetPlanarConfiguration();
75    
76    std::cout << " pixelType="           << pixelType 
77              << " SampleserPixel="      << sPP
78              << " PlanarConfiguration=" << planarConfig 
79              << " PhotometricInterpretation=" 
80                                 << e1->GetEntryByNumber(0x0028,0x0004) 
81              << std::endl;
82
83    int numberOfScalarComponents=e1->GetNumberOfScalarComponents();
84    std::cout << "NumberOfScalarComponents " << numberOfScalarComponents <<std::endl;
85    transferSyntaxName = e1->GetTransfertSyntaxName();
86    std::cout << " TransferSyntaxName= [" << transferSyntaxName << "]" << std::endl;
87    
88    if (  transferSyntaxName != "Implicit VR - Little Endian"
89       && transferSyntaxName != "Explicit VR - Little Endian"     
90       && transferSyntaxName != "Deflated Explicit VR - Little Endian"      
91       && transferSyntaxName != "Explicit VR - Big Endian"
92       && transferSyntaxName != "Uncompressed ACR-NEMA"     ) {
93       std::cout << std::endl << "==========================================="
94                 << std::endl; 
95       f1->GetPixelConverter()->Print();
96       std::cout << std::endl << "==========================================="
97                 << std::endl; 
98    }
99    imageData= f1->GetImageData();
100
101    switch (argv[2][0]) {
102    case 'a' :
103             // ecriture d'un fichier ACR 
104             // à partir d'un dcmHeader correct.
105
106       sprintf(zozo, "%s.ACR", toto.c_str());
107       printf ("WriteACR\n");
108       f1->WriteAcr(zozo);
109       break;
110
111    case 'd' :  // Not document in the 'usage', because the method is knowed to be bugged. 
112
113            // ecriture d'un fichier DICOM Implicit VR 
114            // à partir d'un dcmHeader correct.
115
116       sprintf(zozo, "%s.DCM", toto.c_str());
117       printf ("WriteDCM Implicit VR\n");
118       f1->WriteDcmImplVR(zozo);
119       break;
120
121    case 'x' :
122               // ecriture d'un fichier DICOM Explicit VR 
123               // à partir d'un dcmHeader correct.
124
125       sprintf(zozo, "%s.XDCM", toto.c_str());
126       std::cout << "WriteDCM Explicit VR" << std::endl;
127       f1->WriteDcmExplVR(zozo);
128       break;
129
130    case 'r' :
131              //  Ecriture d'un Raw File, a afficher avec 
132              // affim filein= dimx= dimy= nbit= signe=
133
134       sprintf(zozo, "%s.RAW", toto.c_str());
135       std::cout << "WriteRaw" << std::endl;
136       f1->WriteRawData(zozo);
137       break;
138
139    case 'v' :
140
141      if ( f1->GetHeader()->GetBitsAllocated() == 8)
142      {
143         std::cout << "videoinv for 8 bits" << std::endl;
144         for (int i=0; i<dataSize; i++) 
145         {
146            ((uint8_t*)imageData)[i] += 127;
147         }
148      }
149      else
150      {
151         std::cout << "videoinv for 16 bits" << std::endl;    
152         for (int i=0; i<dataSize/2; i++) 
153         {
154            ((uint16_t*)imageData)[i] += 60000; //32767;
155         }
156      }
157      sprintf(zozo, "%s.VDCM", toto.c_str());
158      printf ("WriteDCM Explicit VR + VideoInv\n");
159      f1->WriteDcmExplVR(zozo);
160      break;
161
162    }
163   return 0;
164 }
165