/*========================================================================= 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. =========================================================================*/ using Kitware.VTK; using Kitware.VTK.GDCM; /* * Usage: * $ export MONO_PATH=/usr/lib/cli/ActiViz.NET/:/usr/lib/cli/Kitware.mummy.Runtime-1.0 * $ mono ./bin/HelloActiviz2.exe gdcmData/test.acr bla.png bla2.dcm */ /* * From the outside view, no-one can detect that object pass to/from * vtkGDCMImageWriter/vtkGDCMImageReader are not Activiz object. * * TODO: Test Command/Observer */ public class HelloActiviz2 { public static int Main(string[] args) { string filename = args[0]; string outfilename = args[1]; string outfilename2 = args[2]; vtkGDCMImageReader reader = new Kitware.VTK.GDCM.vtkGDCMImageReader(); reader.SetFileName( filename ); // When calling multiple times creation of C# object from the same C++ object it triggers a: //error: potential refcounting error: Duplicate rawCppThis - weak reference that is still alive. Attempting to add '0x00b2dc10' again. // Allowing new wrapped object to take over table key... // Original object should *not* have been destroyed while we still had it in our table without notifying us... //reader.GetOutput(); //reader.GetOutput(); System.Console.WriteLine( reader.ToString() ); // Test the ToString compat with Activiz vtkGDCMImageWriter writer = new vtkGDCMImageWriter(); writer.SetInput( reader.GetOutput() ); writer.SetFileName( outfilename2 ); writer.Write(); System.Console.WriteLine( reader.GetOutput().ToString() ); // Test the ToString compat with Activiz System.Console.WriteLine( writer.ToString() ); // Test the ToString compat with Activiz vtkPNGWriter pngwriter = new vtkPNGWriter(); pngwriter.SetInput( reader.GetOutput() ); pngwriter.SetFileName( outfilename ); pngwriter.Write(); // at that point the .Write() should have triggered an Update() on the reader: if( reader.GetImageFormat() == vtkgdcm.VTK_LUMINANCE ) // MONOCHROME2 { System.Console.WriteLine( "Image is MONOCHROME2" ); // } vtkPNGReader bmpreader = new vtkPNGReader(); bmpreader.SetFileName( outfilename ); vtkMedicalImageProperties prop = new vtkMedicalImageProperties(); prop.SetModality( "MR" ); vtkMatrix4x4 dircos = reader.GetDirectionCosines(); dircos.Invert(); vtkGDCMImageWriter writer2 = new vtkGDCMImageWriter(); writer2.SetFileName( outfilename2 ); writer2.SetDirectionCosines( dircos ); writer2.SetMedicalImageProperties( prop ); writer2.SetInput( bmpreader.GetOutput() ); writer2.Write(); return 0; } }