示例#1
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");
         }
     }
 }
示例#2
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");
     }
       }
 }