/*========================================================================= 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. =========================================================================*/ /* * Simple C# example * * Usage: * $ export LD_LIBRARY_PATH=$HOME/Projects/gdcm/debug-gcc/bin * $ mono bin/ReformatFile.exe input.dcm output.dcm */ using System; using gdcm; public class ReformatFile { public static int Main(string[] args) { gdcm.FileMetaInformation.SetSourceApplicationEntityTitle( "My Reformat App" ); // http://www.oid-info.com/get/1.3.6.1.4.17434 string THERALYS_ORG_ROOT = "1.3.6.1.4.17434"; gdcm.UIDGenerator.SetRoot( THERALYS_ORG_ROOT ); System.Console.WriteLine( "Root dir is now: " + gdcm.UIDGenerator.GetRoot() ); string filename = args[0]; string outfilename = args[1]; Reader reader = new Reader(); reader.SetFileName( filename ); if( !reader.Read() ) { System.Console.WriteLine( "Could not read: " + filename ); return 1; } UIDGenerator uid = new UIDGenerator(); // helper for uid generation FileDerivation fd = new FileDerivation(); // For the pupose of this execise we will pretend that this image is referencing // two source image (we need to generate fake UID for that). string ReferencedSOPClassUID = "1.2.840.10008.5.1.4.1.1.7"; // Secondary Capture fd.AddReference( ReferencedSOPClassUID, uid.Generate() ); fd.AddReference( ReferencedSOPClassUID, uid.Generate() ); // Again for the purpose of the exercise we will pretend that the image is a // multiplanar reformat (MPR): // CID 7202 Source Image Purposes of Reference // {"DCM",121322,"Source image for image processing operation"}, fd.SetPurposeOfReferenceCodeSequenceCodeValue( 121322 ); // CID 7203 Image Derivation // { "DCM",113072,"Multiplanar reformatting" }, fd.SetDerivationCodeSequenceCodeValue( 113072 ); fd.SetFile( reader.GetFile() ); // If all Code Value are ok the filter will execute properly if( !fd.Derive() ) { return 1; } gdcm.FileMetaInformation fmi = reader.GetFile().GetHeader(); // The following three lines make sure to regenerate any value: fmi.Remove( new gdcm.Tag(0x0002,0x0012) ); fmi.Remove( new gdcm.Tag(0x0002,0x0013) ); fmi.Remove( new gdcm.Tag(0x0002,0x0016) ); Writer writer = new Writer(); writer.SetFileName( outfilename ); writer.SetFile( fd.GetFile() ); if( !writer.Write() ) { System.Console.WriteLine( "Could not write: " + outfilename ); return 1; } return 0; } }