/*========================================================================= Program: GDCM (Grassroots DICOM). A DICOM library Copyright (c) 2006-2011 Mathieu Malaterre All rights reserved. See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ /* * Basic example for dealing with a DICOM file that contains an Image * (read: Pixel Data element) */ #include "gdcmImageReader.h" #include "gdcmImageWriter.h" #include "gdcmImage.h" #include "gdcmPhotometricInterpretation.h" #include int main(int argc, char *argv[]) { if( argc < 3 ) { std::cerr << argv[0] << " input.dcm output.dcm" << std::endl; return 1; } const char *filename = argv[1]; const char *outfilename = argv[2]; // Instanciate the image reader: gdcm::ImageReader reader; reader.SetFileName( filename ); if( !reader.Read() ) { std::cerr << "Could not read: " << filename << std::endl; return 1; } // If we reach here, we know for sure 2 things: // 1. It is a valid DICOM // 2. And it contains an Image ! // The output of superclass gdcm::Reader is a gdcm::File //gdcm::File &file = reader.GetFile(); // The other output of gdcm::ImageReader is a gdcm::Image const gdcm::Image &image = reader.GetImage(); // Let's get some property from the image: unsigned int ndim = image.GetNumberOfDimensions(); // Dimensions of the image: const unsigned int *dims = image.GetDimensions(); // Origin const double *origin = image.GetOrigin(); const gdcm::PhotometricInterpretation &pi = image.GetPhotometricInterpretation(); for(unsigned int i = 0; i < ndim; ++i) { std::cout << "Dim(" << i << "): " << dims[i] << std::endl; } for(unsigned int i = 0; i < ndim; ++i) { std::cout << "Origin(" << i << "): " << origin[i] << std::endl; } std::cout << "PhotometricInterpretation: " << pi << std::endl; // Write the modified DataSet back to disk gdcm::ImageWriter writer; writer.SetImage( image ); writer.SetFileName( outfilename ); //writer.SetFile( file ); // We purposely NOT copy the meta information from the input // file, and instead only pass the image if( !writer.Write() ) { std::cerr << "Could not write: " << outfilename << std::endl; return 1; } return 0; }