using System;
using gdcm;
public class DecompressImageMultiframe
{
public static int Main(string[] args)
{
string directory = args[0];
gdcm.Directory dir = new gdcm.Directory();
uint nfiles = dir.Load(directory);
gdcm.FilenamesType filenames = dir.GetFilenames();
Image image = new Image();
image.SetNumberOfDimensions( 3 );
DataElement pixeldata = new DataElement( new gdcm.Tag(0x7fe0,0x0010) );
SmartPtrFrag sq = SequenceOfFragments.New();
for(uint i = 0; i < nfiles; ++i)
{
System.Console.WriteLine( filenames[(int)i] );
string file = filenames[(int)i];
System.IO.FileStream infile =
new System.IO.FileStream(file, System.IO.FileMode.Open, System.IO.FileAccess.Read);
uint fsize = gdcm.PosixEmulation.FileSize(file);
byte[] jstream = new byte[fsize];
infile.Read(jstream, 0 , jstream.Length);
Fragment frag = new Fragment();
frag.SetByteValue( jstream, new gdcm.VL( (uint)jstream.Length) );
sq.AddFragment( frag );
}
pixeldata.SetValue( sq.__ref__() );
image.SetDataElement( pixeldata );
PhotometricInterpretation pi = new PhotometricInterpretation( PhotometricInterpretation.PIType.MONOCHROME2 );
image.SetPhotometricInterpretation( pi );
PixelFormat pixeltype = new PixelFormat(1,8,8,7);
image.SetPixelFormat( pixeltype );
image.SetTransferSyntax( new TransferSyntax( TransferSyntax.TSType.JPEGLosslessProcess14_1 ) );
image.SetDimension(0, 512);
image.SetDimension(1, 512);
image.SetDimension(2, 355);
byte[] decompressedData = new byte[(int)image.GetBufferLength()];
image.GetBuffer(decompressedData);
System.Console.WriteLine(image.toString());
using (System.IO.Stream stream =
System.IO.File.Open(@"/tmp/dd.raw",
System.IO.FileMode.Create))
{
System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream);
writer.Write(decompressedData);
}
return 0;
}
}