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"); } } }
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"); } } }