/*========================================================================= 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. =========================================================================*/ /* * This example is ... guess what this is for :) */ #include "gdcmReader.h" #include "gdcmWriter.h" #include "gdcmAttribute.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 reader: gdcm::Reader 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 only 1 thing: // It is a valid DICOM file (potentially an old ACR-NEMA 1.0/2.0 file) // (Maybe, it's NOT a Dicom image -could be a DICOMDIR, a RTSTRUCT, etc-) // The output of gdcm::Reader is a gdcm::File gdcm::File &file = reader.GetFile(); // the dataset is the the set of element we are interested in: gdcm::DataSet &ds = file.GetDataSet(); // Contruct a static(*) type for Image Comments : gdcm::Attribute<0x0020,0x4000> imagecomments; imagecomments.SetValue( "Hello, World !" ); // Now replace the Image Comments from the dataset with our: ds.Replace( imagecomments.GetAsDataElement() ); // Write the modified DataSet back to disk gdcm::Writer writer; writer.CheckFileMetaInformationOff(); // Do not attempt to reconstruct the file meta to preserve the file // as close to the original as possible. writer.SetFileName( outfilename ); writer.SetFile( file ); if( !writer.Write() ) { std::cerr << "Could not write: " << outfilename << std::endl; return 1; } return 0; } /* * (*) static type, means that extra DICOM information VR & VM are computed at compilation time. * The compiler is deducing those values from the template arguments of the class. */