VTK 7 - 为什么对象被销毁?

VTK 7 - why object gets destroyed?

我正在尝试使用 vtkImageImport 加载原始图像数据并显示 2D 纹理:

    char* data = (char*)imgData->data(); // size is 786432

    vtkSmartPointer<vtkImageImport> importer = vtkSmartPointer<vtkImageImport>::New();
    importer->SetWholeExtent(0, 511, 0, 511, 0, 0);
    importer->SetDataExtentToWholeExtent();
    importer->SetDataScalarTypeToUnsignedChar();
    importer->SetImportVoidPointer(data);
    importer->SetNumberOfScalarComponents(3);
    importer->Update();
    double bounds[6];
    vtkImageData* vtk_image_data = importer->GetOutput(); // this is null
    vtk_image_data->GetBounds(bounds);

当我调用 importer->Update() 时,vtkDataSet 的析构函数被调用,并且 importer->GetOutput() returns null...知道为什么会这样吗?

我使用 VTK 6.2.0 在 MSVC 2010 上编译并 运行 你的代码。我没有得到任何 null vtk_image_data。查看一些可能有帮助的宏预处理器。

终于找到问题的原因了。一般来说,我们正在移植 VTK 以与 Google Chrome 的便携式本地客户端 (PNaCl) 一起使用,我必须从头开始创建项目 vtkCommonCore 并将所有设置设置为与 PPAPI\PNACL 一起使用。我缺少 vtkInformationDataObjectKey.cxx 的特殊构建规则,必须在 .vcxproj:

中手动设置
<ClCompile Include="vtkInformationDataObjectKey.cxx">
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">vtkCommonDataModel_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">vtkCommonDataModel_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|Win32'">vtkCommonDataModel_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|Win32'">vtkCommonDataModel_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|PPAPI'">vtkCommonDataModel_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <!-- adding above rule for Debug|PPAPI solved the problem -->
</ClCompile>