/*========================================================================= 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. =========================================================================*/ #include "vtkGDCMImageReader.h" #include "vtkGDCMImageWriter.h" #include "vtkImageData.h" #include "vtkImageCast.h" #include "gdcmTesting.h" // The following file is 16/16/15 but the scalar range of the image is [0,192] // it could be safely stored as 8bits instead: // gdcmData/012345.002.050.dcm int main(int, char *[]) { const char *directory = gdcm::Testing::GetDataRoot(); if(!directory) return 1; std::string file = std::string(directory) + "/012345.002.050.dcm"; std::cout << file << std::endl; vtkGDCMImageReader *reader = vtkGDCMImageReader::New(); reader->SetFileName( file.c_str() ); reader->Update(); //reader->GetOutput()->Print( std::cout ); vtkImageCast *cast = vtkImageCast::New(); #if (VTK_MAJOR_VERSION >= 6) cast->SetInputConnection( reader->GetOutputPort() ); #else cast->SetInput( reader->GetOutput() ); #endif cast->SetOutputScalarTypeToUnsignedChar(); vtkGDCMImageWriter *writer = vtkGDCMImageWriter::New(); writer->SetFileName( "/tmp/cast.dcm" ); #if (VTK_MAJOR_VERSION >= 6) writer->SetInputConnection( cast->GetOutputPort() ); #else writer->SetInput( cast->GetOutput() ); #endif writer->SetImageFormat( reader->GetImageFormat() ); writer->SetMedicalImageProperties( reader->GetMedicalImageProperties() ); writer->SetDirectionCosines( reader->GetDirectionCosines() ); writer->SetShift( reader->GetShift() ); writer->SetScale( reader->GetScale() ); writer->Write(); reader->Delete(); cast->Delete(); writer->Delete(); return 0; }