/*========================================================================= Program: gdcm Module: $RCSfile: GdcmToBaseline.cxx,v $ Language: C++ Date: $Date: 2004/11/30 15:44:44 $ Version: $Revision: 1.1 $ 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. =========================================================================*/ #include "vtkGdcmReader.h" #include "vtkImageViewer.h" #include "vtkImageData.h" #include "vtkPNGWriter.h" #include "vtkWindowToImageFilter.h" #include "gdcmFile.h" #include //Generated file: #include "gdcmDataImages.h" int main(int argc, char *argv[]) { if( argc < 3 ) { std::cerr << "Usage: " << argv[0] << " image.dcm image.png\n"; return 0; } std::string filename = argv[1]; std::cout << "Filename: " << filename << std::endl; //Extract name to find the png file matching: std::string pngfile = argv[2]; std::cerr << "PNG file: " << pngfile << std::endl; // Ok for now still use the original image, vtkGdcmReader *reader = vtkGdcmReader::New(); reader->SetFileName( filename.c_str() ); //reader->SetFileName( "../Testing/Temporary/TestWrite.dcm" ); reader->Update(); vtkImageViewer *viewer = vtkImageViewer::New(); viewer->SetInput ( reader->GetOutput() ); vtkFloatingPointType *range = reader->GetOutput()->GetScalarRange(); viewer->SetColorWindow (range[1] - range[0]); viewer->SetColorLevel (0.5 * (range[1] + range[0])); int dim[3]; reader->GetOutput()->GetDimensions( dim ); viewer->SetSize(dim[0], dim[1]); viewer->OffScreenRenderingOn(); if(dim[2] != 1) { //For multifame dicom, take a snapshot of the center slice (+/- 1) viewer->SetZSlice( dim[2] / 2 ); } viewer->Render(); // View to image vtkWindowToImageFilter *wif = vtkWindowToImageFilter::New(); wif->SetInput(viewer->GetRenderWindow()); // Write to image vtkPNGWriter *writer=vtkPNGWriter::New(); writer->SetFileName(argv[2]); writer->SetInput(wif->GetOutput()); writer->Write(); // Clean up: reader->Delete(); viewer->Delete(); wif->Delete(); writer->Delete(); return 0; }