/*========================================================================= 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. =========================================================================*/ #include "gdcmFileStreamer.h" #include "gdcmTag.h" #include "gdcmTrace.h" #include "gdcmImageRegionReader.h" #include "gdcmImageHelper.h" #include "gdcmWriter.h" #include "gdcmImageWriter.h" #include "gdcmTagKeywords.h" #include "gdcmUIDGenerator.h" int main(int argc, char *argv[]) { if( argc < 2 ) return 1; const char * filename = argv[1]; gdcm::ImageRegionReader irr; irr.SetFileName( filename ); const bool b3 = irr.ReadInformation(); std::cout << b3 << std::endl; gdcm::Image & img = irr.GetImage(); std::cout << img << std::endl; // const gdcm::Region & r = irr.GetRegion(); // std::cout << r << std::endl; gdcm::ImageWriter w; gdcm::File & file = w.GetFile(); gdcm::DataSet & ds = file.GetDataSet(); gdcm::UIDGenerator uid; namespace kwd = gdcm::Keywords; kwd::FrameOfReferenceUID frameref; frameref.SetValue( uid.Generate() ); // ContentDate char date[22]; const size_t datelen = 8; int res = gdcm::System::GetCurrentDateTime(date); (void)res; kwd::ContentDate contentdate; // Do not copy the whole cstring: contentdate.SetValue( gdcm::DAComp( date, datelen ) ); ds.Insert( contentdate.GetAsDataElement() ); // ContentTime const size_t timelen = 6 + 1 + 6; // time + milliseconds kwd::ContentTime contenttime; // Do not copy the whole cstring: contenttime.SetValue( gdcm::TMComp(date+datelen, timelen) ); ds.Insert( contenttime.GetAsDataElement() ); gdcm::MediaStorage ms0 = w.ComputeTargetMediaStorage(); std::cout << ms0 << std::endl; kwd::SeriesNumber seriesnumber = { 1 }; kwd::InstanceNumber instancenum = { 1 }; kwd::StudyID studyid = { "St1" }; kwd::PatientID patientid = { "P1" }; kwd::SOPClassUID sopclassuid; kwd::PositionReferenceIndicator pri; //kwd::Laterality lat; //kwd::BodyPartExamined bodypartex = { "HEAD" }; kwd::BodyPartExamined bodypartex = { "ANKLE" }; kwd::PatientOrientation pator; kwd::BurnedInAnnotation bia = { "NO" }; kwd::ConversionType convtype = { "SYN" }; kwd::PresentationLUTShape plutshape = { "IDENTITY" }; // MONOCHROME2 // gdcm will pick the Word in case Byte class is not compatible: gdcm::MediaStorage ms = gdcm::MediaStorage::MultiframeGrayscaleByteSecondaryCaptureImageStorage; sopclassuid.SetValue( ms.GetString() ); ds.Insert( instancenum.GetAsDataElement() ); ds.Insert( sopclassuid.GetAsDataElement() ); ds.Insert( seriesnumber.GetAsDataElement() ); ds.Insert( patientid.GetAsDataElement() ); ds.Insert( studyid.GetAsDataElement() ); ds.Insert( frameref.GetAsDataElement() ); ds.Insert( pri.GetAsDataElement() ); //ds.Insert( lat.GetAsDataElement() ); ds.Insert( bodypartex.GetAsDataElement() ); ds.Insert( pator.GetAsDataElement() ); ds.Insert( bia.GetAsDataElement() ); ds.Insert( convtype.GetAsDataElement() ); ds.Insert( plutshape.GetAsDataElement() ); // gdcm::MediaStorage ms1 = w.ComputeTargetMediaStorage(); // std::cout << ms1 << std::endl; std::cout << ds << std::endl; gdcm::PixelFormat & pf = img.GetPixelFormat(); pf.SetPixelRepresentation(0); // always overwrite img.SetSlope(1); img.SetIntercept(0); w.SetImage( img ); w.SetFileName( "TemplateImage.dcm" ); if( !w.Write() ) { return 1; } return 0; }