5 int main(int argc, char* argv[])
14 //gdcmDocument * d; //not used
19 std::cerr << "usage: " << std::endl
20 << argv[0] << " OriginalFileName writtingMode "
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"
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;
38 std::cout << std::endl << "----------------------> after new gdcmHeader"
41 std::cout <<std::endl <<"---------------------------------------"
46 std::cout << std::endl
47 << "--------------------- file :" << argv[1]
52 e1 = new gdcmHeader( toto.c_str() );
53 if (!e1->IsReadable())
55 std::cerr << "Sorry, not a Readable DICOM / ACR File" <<std::endl;
60 f1 = new gdcmFile(e1);
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;
70 std::cout << " DIMX=" << nX << " DIMY=" << nY << " DIMZ=" << nZ << std::endl;
72 pixelType = e1->GetPixelType();
73 sPP = e1->GetSamplesPerPixel();
74 planarConfig = e1->GetPlanarConfiguration();
76 std::cout << " pixelType=" << pixelType
77 << " SampleserPixel=" << sPP
78 << " PlanarConfiguration=" << planarConfig
79 << " PhotometricInterpretation="
80 << e1->GetEntryByNumber(0x0028,0x0004)
83 int numberOfScalarComponents=e1->GetNumberOfScalarComponents();
84 std::cout << "NumberOfScalarComponents " << numberOfScalarComponents <<std::endl;
85 transferSyntaxName = e1->GetTransfertSyntaxName();
86 std::cout << " TransferSyntaxName= [" << transferSyntaxName << "]" << std::endl;
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 << "==========================================="
96 std::cout << std::endl << "==========================================="
99 imageData= f1->GetImageData();
101 switch (argv[2][0]) {
103 // ecriture d'un fichier ACR
104 // à partir d'un dcmHeader correct.
106 sprintf(zozo, "%s.ACR", toto.c_str());
107 printf ("WriteACR\n");
111 case 'd' : // Not document in the 'usage', because the method is knowed to be bugged.
113 // ecriture d'un fichier DICOM Implicit VR
114 // à partir d'un dcmHeader correct.
116 sprintf(zozo, "%s.DCM", toto.c_str());
117 printf ("WriteDCM Implicit VR\n");
118 f1->WriteDcmImplVR(zozo);
122 // ecriture d'un fichier DICOM Explicit VR
123 // à partir d'un dcmHeader correct.
125 sprintf(zozo, "%s.XDCM", toto.c_str());
126 std::cout << "WriteDCM Explicit VR" << std::endl;
127 f1->WriteDcmExplVR(zozo);
131 // Ecriture d'un Raw File, a afficher avec
132 // affim filein= dimx= dimy= nbit= signe=
134 sprintf(zozo, "%s.RAW", toto.c_str());
135 std::cout << "WriteRaw" << std::endl;
136 f1->WriteRawData(zozo);
141 if ( f1->GetHeader()->GetBitsAllocated() == 8)
143 std::cout << "videoinv for 8 bits" << std::endl;
144 for (int i=0; i<dataSize; i++)
146 ((uint8_t*)imageData)[i] += 127;
151 std::cout << "videoinv for 16 bits" << std::endl;
152 for (int i=0; i<dataSize/2; i++)
154 ((uint16_t*)imageData)[i] += 60000; //32767;
157 sprintf(zozo, "%s.VDCM", toto.c_str());
158 printf ("WriteDCM Explicit VR + VideoInv\n");
159 f1->WriteDcmExplVR(zozo);