VTK提供不同的Reader/Writer类读写各种文件,对于类的使用者而言,最重要的是根据不同的文件类型选择合适的Reader/Writer类进行读写操作
类vtkDicomImageReader可用于读取DICOM图像,DICOM(*.dcm)图像是医学图像处理中使用最广泛的格式,但该类功能很不完善。该类不支持多帧DICOM图像的读取,VTK也没有实现对DICOM图像的写操作。对DICOM图像的读写支持较好的函数库主要有GDCM和DCMTK。DCMTK是目前对DICOM协议支持最全的工具包,同时也是读写DICOM图像的专业函数库。
vtkImageReader2主要针对二维图像(特别是医学图像)显示设计的,实现了图像缩放、旋转、平移、窗宽窗位调节等功能;除了可以用于单幅二维图像的显示之外,也可以显示三维图像的摸个切片,还可以设置不同的显示方向。
///****************************************************/ ///* Examples/Chap04/4.1_ReadWriteSingleImage.cpp */ ///****************************************************/ #include <vtkSmartPointer.h> #include <vtkPNGReader.h> #include <vtkImageViewer2.h> #include <vtkRenderer.h> #include <vtkRenderWindowInteractor.h> #include <vtkJPEGWriter.h> int main() { // 读取PNG图像 vtkSmartPointer<vtkPNGReader> reader = vtkSmartPointer<vtkPNGReader>::New(); reader->SetFileName("D:\\1.png"); // 显示读取的单幅PNG图像 vtkSmartPointer<vtkImageViewer2> imageViewer = vtkSmartPointer<vtkImageViewer2>::New(); imageViewer->SetInputConnection(reader->GetOutputPort()); vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); imageViewer->SetupInteractor(interactor); imageViewer->Render(); imageViewer->GetRenderer()->ResetCamera(); //imageViewer->GetRenderer()->ResetCamera(); imageViewer->Render(); // 保存成JPG vtkSmartPointer<vtkJPEGWriter> writer = vtkSmartPointer<vtkJPEGWriter>::New(); writer->SetFileName("VTK-logo.jpg"); writer->SetInputConnection(reader->GetOutputPort()); writer->Write(); interactor->Start(); return 0; }
场景的导入与导出是指将渲染场景中的对象,包括光照、相机、Actor、属性、变换矩阵等信息写入文件中,或者从外部文件中将这些对象导入渲染场景中,一般所导入的文件含有多个数据集。