在VTK图形图像开发进阶中,第5章的图像融合里,用SetInputData(id, vtkImageData)
给imageBlend赋值,结果会报错,报错如下:
vtkCompositeDataPipeline (004A4880): Input for connection on index 0 input port index 1 for algorithm vtkImageBlend(004A1958) is of type vtkImageData, but a vtkImageStencilData is required.
当vtkImageBlend的inputData大于2个对象时,需要通过AddInputData来设置InputData,demo如下:
vtkSmartPointer<vtkJPEGReader> reader =
vtkSmartPointer<vtkJPEGReader>::New();
reader->SetFileName(fn);
reader->Update();
vtkSmartPointer<vtkImageCanvasSource2D> imageSource =
vtkSmartPointer<vtkImageCanvasSource2D>::New();
imageSource->SetNumberOfScalarComponents(1);
imageSource->SetScalarTypeToUnsignedChar();
imageSource->SetExtent(0, 512, 0, 512, 0, 0);
imageSource->SetDrawColor(0.0);
imageSource->FillBox(0, 512, 0, 512);
imageSource->SetDrawColor(255.0);
imageSource->FillBox(100, 400, 100, 400);
imageSource->Update();
vtkSmartPointer<vtkImageBlend> imageBlend =
vtkSmartPointer<vtkImageBlend>::New();
imageBlend->AddInputData(reader->GetOutput());
imageBlend->AddInputData(imageSource->GetOutput()); //不能用SetInputData,否则会报错
imageBlend->SetOpacity(0, 0.4);
imageBlend->SetOpacity(1, 0.6);
imageBlend->Update();
显示的部分直接是imageBlend->GetOutput()
即可。
给个参考的链接:http://blog.csdn.net/inter_peng/article/details/51892556