/*========================================================================= Program: GDCM (Grassroots DICOM). A DICOM library Copyright (c) 2006-2011 Mathieu Malaterre All rights reserved. See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ /* Convertor convertor = new Convertor(); int a = convertor.Convert( some_int_blob ); double b = convertor.Convert( some_double_blob ); */ /* * Usage: * $ export LD_LIBRARY_PATH=$HOME/Projects/gdcm/debug-gcc/bin * $ mono bin/SimplePrint.exe gdcmData/012345.002.050.dcm */ using System; using gdcm; public class SimplePrint { public static void RecurseDataSet(File f, DataSet ds, string indent) { CSharpDataSet cds = new CSharpDataSet(ds); while(!cds.IsAtEnd()) { DataElement de = cds.GetCurrent(); // Compute VR from the toplevel file, and the currently processed dataset: VR vr = DataSetHelper.ComputeVR(f, ds, de.GetTag() ); if( vr.Compatible( new VR(VR.VRType.SQ) ) ) { uint uvl = (uint)de.GetVL(); // Test cast is ok System.Console.WriteLine( indent + de.GetTag().toString() + ":" + uvl ); // why not ? //SequenceOfItems sq = de.GetSequenceOfItems(); // GetValueAsSQ handle more cases than GetSequenceOfItems SmartPtrSQ sq = de.GetValueAsSQ(); uint n = sq.GetNumberOfItems(); for( uint i = 1; i <= n; i++) // item starts at 1, not 0 { Item item = sq.GetItem( i ); DataSet nested = item.GetNestedDataSet(); RecurseDataSet( f, nested, indent + " " ); } } else { System.Console.WriteLine( indent + de.toString() ); } cds.Next(); } } public static int Main(string[] args) { string filename = args[0]; Reader reader = new Reader(); reader.SetFileName( filename ); bool ret = reader.Read(); if( !ret ) { return 1; } File f = reader.GetFile(); DataSet ds = f.GetDataSet(); RecurseDataSet( f, ds, "" ); return 0; } }