예제 #1
0
    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);
    }
예제 #2
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");
         }
     }
 }
예제 #3
0
  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;
    }
예제 #4
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");
     }
       }
 }