public static int Main(string[] args) { string filename = args[0]; string outfilename = args[1]; gdcm.PrivateTag pt = new gdcm.PrivateTag(new gdcm.Tag(0x9, 0x10), "MYTEST"); gdcm.FileStreamer fs = new gdcm.FileStreamer(); fs.SetTemplateFileName(filename); fs.SetOutputFileName(outfilename); byte[] buffer = new byte[8192]; uint len = (uint)buffer.Length; // In this example, we want that each newly created Private Attribute // contains at most 1000 bytes of incoming dataset. // We are also calling the function twice to check that appending mode is // working from one call to the other. The last element will have a length // of (2 * 8192) % 1000 = 384 if (!fs.StartGroupDataElement(pt, 1000, 1) || !fs.AppendToGroupDataElement(pt, buffer, len) || !fs.AppendToGroupDataElement(pt, buffer, len) || !fs.StopGroupDataElement(pt)) { System.Console.WriteLine("Could not change private group"); return(1); } return(0); }
static private void AssembleDICOMAndRaw(string dicomfn, string rawdata, string outfn) { using (var fs = new gdcm.FileStreamer()) { fs.SetTemplateFileName(dicomfn); fs.SetOutputFileName(outfn); gdcm.Tag pixeldata = new gdcm.Tag(0x7fe0, 0x0010); // FileStreamer support automatic checking of pixel data length // based on DICOM attributes, only if we say so: fs.CheckDataElement(pixeldata); // Declare we are working on Pixel Data attribute: fs.StartDataElement(pixeldata); using (FileStream rawSource = new FileStream(rawdata, FileMode.Open, FileAccess.Read)) { byte[] bytes = new byte[512]; // Only read one scanline at a time // We could have been reading more at once, if this is more efficient, // AppendToDataElement will do the logic in all cases. for (int i = 0; i < 512 * 1000; ++i) { // Read the source file into a byte array. ReadBytesIntoArray(bytes, rawSource); fs.AppendToDataElement(pixeldata, bytes, (uint)bytes.Length); } } if (!fs.StopDataElement(pixeldata)) { // Most likely an issue with Pixel Data Length computation: throw new Exception("StopDataElement failed"); } } }
public static int Main(string[] args) { string filename = args[0]; string outfilename = args[1]; gdcm.PrivateTag pt = new gdcm.PrivateTag( new gdcm.Tag(0x9,0x10), "MYTEST" ); gdcm.FileStreamer fs = new gdcm.FileStreamer(); fs.SetTemplateFileName( filename ); fs.SetOutputFileName( outfilename ); byte[] buffer = new byte[ 8192 ]; uint len = (uint)buffer.Length; // In this example, we want that each newly created Private Attribute // contains at most 1000 bytes of incoming dataset. // We are also calling the function twice to check that appending mode is // working from one call to the other. The last element will have a length // of (2 * 8192) % 1000 = 384 if( !fs.StartGroupDataElement( pt, 1000, 1 ) || !fs.AppendToGroupDataElement( pt, buffer, len ) || !fs.AppendToGroupDataElement( pt, buffer, len ) || !fs.StopGroupDataElement( pt ) ) { System.Console.WriteLine( "Could not change private group" ); return 1; } return 0; }
private static void AssembleDICOMAndRaw(string dicomfn, string rawdata, string outfn) { using ( var fs = new gdcm.FileStreamer() ) { fs.SetTemplateFileName(dicomfn); fs.SetOutputFileName(outfn); gdcm.Tag pixeldata = new gdcm.Tag(0x7fe0, 0x0010); // FileStreamer support automatic checking of pixel data length // based on DICOM attributes, only if we say so: fs.CheckDataElement( pixeldata ); // Declare we are working on Pixel Data attribute: fs.StartDataElement( pixeldata ); using (FileStream rawSource = new FileStream(rawdata, FileMode.Open, FileAccess.Read)) { byte[] bytes = new byte[512]; // Only read one scanline at a time // We could have been reading more at once, if this is more efficient, // AppendToDataElement will do the logic in all cases. for( int i = 0; i < 512 * 1000; ++i ) { // Read the source file into a byte array. ReadBytesIntoArray( bytes, rawSource ); fs.AppendToDataElement( pixeldata, bytes, (uint)bytes.Length ); } } if( !fs.StopDataElement( pixeldata ) ) { // Most likely an issue with Pixel Data Length computation: throw new Exception("StopDataElement failed"); } } }