+/*=========================================================================
+
+ Program: gdcm
+ Module: $RCSfile: vtkgdcmViewer.cxx,v $
+ Language: C++
+ Date: $Date: 2009/11/03 14:05:23 $
+ Version: $Revision: 1.32 $
+
+ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
+ l'Image). All rights reserved. See Doc/License.txt or
+ http://www.creatis.insa-lyon.fr/Public/Gdcm/License.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 notices for more information.
+
+=========================================================================*/
// This example illustrates how the vtkGdcmReader vtk class can be
// used in order to:
// * produce a simple (vtk based) Dicom image STACK VIEWER.
#include <vtkImageViewer.h>
#include <vtkStructuredPoints.h>
#include <vtkStructuredPointsWriter.h>
-#include <vtkPNGWriter.h>
#include <vtkCommand.h>
#include <vtkRenderer.h>
#include <vtkImageMapToColors.h>
#include <vtkLookupTable.h>
#include "vtkGdcmReader.h"
-#include "gdcmDebug.h"
-
-#include <iostream>
-
+#include "gdcmDocument.h" // for NO_SHADOWSEQ
#ifndef vtkFloatingPointType
#define vtkFloatingPointType float
#endif
int max = ImageViewer->GetWholeZMax();
int slice = (ImageViewer->GetZSlice() + 1 ) % ++max;
ImageViewer->SetZSlice( slice );
- ImageViewer->GetRenderer()->ResetCameraClippingRange();
ImageViewer->Render();
}
}
if( argc < 2 )
return 0;
- gdcm::Debug::SetDebugOff();
vtkGdcmReader *reader = vtkGdcmReader::New();
reader->AllowLookupTableOff();
for(int i=1; i< argc; i++)
reader->AddFileName( argv[i] );
+// TODO : allow user to choose Load Mode
+ reader->SetLoadMode(GDCM_NAME_SPACE::LD_NOSHADOWSEQ);
reader->Update();
+
+
+std::cout << "[0][0]==========" <<
+reader->GetOutput()->GetScalarComponentAsFloat(0,0,0,0) <<
+"===================="
+<< std::endl;
+std::cout << "[127][127]==========" <<
+reader->GetOutput()->GetScalarComponentAsFloat(0,127,0,0) <<
+"===================="
+<< std::endl;
+
+
//print debug info:
reader->GetOutput()->Print( cout );
}
else
{
- double *range = reader->GetOutput()->GetScalarRange();
+
+ // For a single medical image, it would be more efficient to use
+ // 0028|1050 [DS] [Window Center]
+ // 0028|1051 [DS] [Window Width]
+ // but vtkgdcmReader doesn't know about them :-(
+
+ vtkFloatingPointType *range = reader->GetOutput()->GetScalarRange();
viewer->SetColorLevel (0.5 * (range[1] + range[0]));
viewer->SetColorWindow (range[1] - range[0]);
iren->AddObserver(vtkCommand::CharEvent,obs);
obs->Delete();
+ //viewer->Render();
iren->Initialize();
iren->Start();
- //if you wish you can export dicom to a vtk file
- //vtkStructuredPointsWriter *writer = vtkStructuredPointsWriter::New();
- vtkPNGWriter *writer = vtkPNGWriter::New();
+ //if you wish you can export dicom to a vtk file
+
+ vtkStructuredPointsWriter *writer = vtkStructuredPointsWriter::New();
writer->SetInput( reader->GetOutput());
- writer->SetFileName( "foo.png" );
- //writer->SetFileTypeToBinary();
- writer->Write();
-
+ writer->SetFileName( "foo.vtk" );
+ writer->SetFileTypeToBinary();
+ //writer->Write();
+
+std::cout << "==========" << std::endl;
+
+std::cout << "==========" <<
+reader->GetOutput()->GetScalarComponentAsFloat(0,0,0,0) <<
+"===================="
+<< std::endl;
+
+
reader->Delete();
iren->Delete();