//#include <vtkTextActor.h>
#include <vtkTextProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkJPEGReader.h>
#include <vtkPNGReader.h>
#include <vtkImageViewer2.h>
#include <vtkImageBlend.h>
#include <vtkImageData.h>
#include <vtkPNGWriter.h>
#include <vtkFreeTypeTools.h>
#include <vtkImageCanvasSource2D.h>
#include <vtkStdString.h>
#include <vtkImageChangeInformation.h>
#include <vtkDICOMImageReader.h>
#include <vtkWindowToImageFilter.h>
#include <vtkImageViewer.h>//显示2D图像类
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkInteractionStyle)
VTK_MODULE_INIT(vtkRenderingFreeType)
VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2)
int main(int argc, char* argv[])
{
// Verify input arguments
if (argc != 2)
{
std::cout << "Usage: " << argv[0]
<< " FolderName" << std::endl;
return EXIT_FAILURE;
}
std::string folder = argv[1];
// Read all the DICOM files in the specified directory.
vtkSmartPointer<vtkDICOMImageReader> reader =
vtkSmartPointer<vtkDICOMImageReader>::New();
reader->SetDirectoryName(folder.c_str());
reader->Update();
// Visualize
vtkSmartPointer<vtkImageViewer2> imageViewer =
vtkSmartPointer<vtkImageViewer2>::New();
imageViewer->SetInputConnection(reader->GetOutputPort());
imageViewer->SetSlice(0);
//SetOffScreenRendering!!!
imageViewer->GetRenderWindow()->SetOffScreenRendering(true);
imageViewer->Render();
// for (int k = 0; k < 3; k++)
{
//cout << k << endl;
//if (k == 0) {
// imageViewer->SetSliceOrientationToYZ();
//}
//else if (k == 1) {
// imageViewer->SetSliceOrientationToXZ();
//}
//else
{
imageViewer->SetSliceOrientationToXY();
}
int _MinSlice = imageViewer->GetSliceMin();
int _MaxSlice = imageViewer->GetSliceMax();
// Screenshot
vtkSmartPointer<vtkWindowToImageFilter> windowToImageFilter =
vtkSmartPointer<vtkWindowToImageFilter>::New();
vtkSmartPointer<vtkPNGWriter> writer =
vtkSmartPointer<vtkPNGWriter>::New();
for (int i = _MinSlice; i < _MaxSlice; i++) {
vtkSmartPointer<vtkWindowToImageFilter> windowToImageFilter =
vtkSmartPointer<vtkWindowToImageFilter>::New();
vtkSmartPointer<vtkPNGWriter> writer =
vtkSmartPointer<vtkPNGWriter>::New();
windowToImageFilter->SetInput(imageViewer->GetRenderWindow());
windowToImageFilter->ReadFrontBufferOff(); // read from the back buffer
windowToImageFilter->Update();
//std::string filename = "img/" + std::to_string(k) + "/" + std::to_string(i) + ".png";
std::string filename = "img/" + std::to_string(i) + ".png";
char *y = new char[filename.length() + 1];
std::strcpy(y, filename.c_str());
writer->SetFileName(y);
writer->SetInputConnection(windowToImageFilter->GetOutputPort());
writer->Write();
imageViewer->SetSlice(i);
}
}
return EXIT_SUCCESS;
}