VTK的Reader与Writer

VTK对不同格式的文件的读写使用不同的类。
一:Reader
这里写图片描述
**QString.toLocal8Bit.data()连着写有问题,要先QByteArray qbTemp = QString.toLocal8Bit(),然后
const char filename = qbTemp.data();*
使用之前应包括相应的头文件,如#include <vtkPNGReader.h>
现将用过的类总结如下:
1、STL:
vtkSmartPointer<vtkSTLReader> stlReader = vtkSmartPointer<vtkSTLReader>::New();
QByteArray qbTemp = kSTLFullName.toLocal8Bit();
const char *stlFileName_str = qbTemp.data();
stlReader->SetFileName(stlFileName_str);
stlReader->Update();
vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();
polyData = stlReader->GetOutput();

其中SetFileName的参数是STL文件的目录及名称,update的时候真正读取本地文件,所以该语句耗时较多。因为STL是polydaya,所以输出结果也是poldata.
2、vtkImageData:

vtkSmartPointer<vtkStructuredPointsReader> vtkFileReader = vtkSmartPointer<vtkStructuredPointsReader>::New();
 QByteArray qbTemp = sMaskDataFilePath.toLocal8Bit();
const char *vtkfileName_str = qbTemp.data();
vtkFileReader->SetFileName(vtkfileName_str);
vtkFileReader->Update();
 vtkSmartPointer<vtkImageData> MaskData  = vtkSmartPointer<vtkImageData>::New();
 MaskData   = (vtkImageData*)vtkFileReader->GetOutput();`
因为tructuredPointsReader的输出是Structured数据,而我们读取的文件是vtkImagData,所以最后强制转化一下。
3、vtkBMPReader、vtkJPEGReader等
二:Writer
1、STL:`vtkSmartPointer<vtkSTLWriter> stlWriter =
    vtkSmartPointer<vtkSTLWriter>::New();
stlWriter->SetFileTypeToBinary();
 QByteArray qbTemp = kSTLFullName.toLocal8Bit();
const char *stlFileName_str = qbTemp.data();
stlWriter->SetFileName(stlFileName_str);
stlWriter->SetInputData(polyData);
stlWriter->Write();`
2、vtkImageData:

vtkSmartPointer p3DObjectImageDataWriter = vtkSmartPointer::New();
p3DObjectImageDataWriter->SetInputData(pVtkImageData);
QByteArray qbTemp = segmentFileName.toLocal8Bit();
const char *stlFileName_str = qbTemp.data();
p3DObjectImageDataWriter->SetFileName(stlFileName_str);
p3DObjectImageDataWriter->Write();
“`

ps:QFileInfo info(sSegmentEntireFilePath);
QString qsSegmentFolder = info.absolutePath();
QDir dir;
if ( !dir.exists( qsSegmentFolder ))
{
dir.mkdir(qsSegmentFolder);
}

写文件的时候必须保证文件夹是存在的,否则只有writer语句是不够的,所以上面的几句话使用QT先判断文件夹是否存在,如果不存在先创建。
vtkSTLWriter 与vtkStructuredPointsWriter均可以指定文件类型,包括二进制Binary与ASCII两种,
可用SetFileTypeToBinary()与SetFileTypeToASCII()指定,其中存成Binary的速度较快,能提升性能。
另外,用GetFileType()可以查看类型


版权声明:本文为Zzhouzhou237原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。