/*========================================================================= 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. =========================================================================*/ /* * Compilation: * $ CLASSPATH=gdcm.jar javac ../../gdcm/Examples/Java/SimplePrint.java -d . * * Usage: * $ LD_LIBRARY_PATH=. CLASSPATH=gdcm.jar:. java SimplePrint gdcmData/012345.002.050.dcm */ import gdcm.*; public class SimplePrint { public static void RecurseDataSet(File f, DataSet ds, String indent) { JavaDataSet cds = new JavaDataSet(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) ) ) { long uvl = de.GetVL().GetValueLength(); // Test cast is ok System.out.println( indent + de.GetTag().toString() + ":" + uvl ); // why not ? //SequenceOfItems sq = de.GetSequenceOfItems(); // GetValueAsSQ handle more cases than GetSequenceOfItems SmartPtrSQ sq = de.GetValueAsSQ(); long n = sq.GetNumberOfItems(); for( long 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.out.println( indent + de.toString() ); } cds.Next(); } } public static void main(String[] args) throws Exception { String filename = args[0]; Reader reader = new Reader(); reader.SetFileName( filename ); boolean ret = reader.Read(); if( !ret ) { throw new Exception("Could not read: " + filename ); } File f = reader.GetFile(); DataSet ds = f.GetDataSet(); RecurseDataSet( f, ds, "" ); } }