问题:使用vtkImagePlaneWidget
获取到了vtkImageData
的切片数据,通过vtkImagePlaneWidget->GetColorMap()->SetLookupTable()
设置了RGB颜色传输函数(vtkColorTransferFunction
),并使用vtkImageActor
来显示切片,但是发现切片中无效值是黑色,而不是透明。
vtkImageData数据:
获得的Z轴切片是这样:
可以看到图像中本来应该透明的部分是黑色,很难看。原因是vtkColorTransferFunction
只能通过SetAlpha()
函数指定整体的透明度,不能根据标量值指定透明度。
解决方案:继承vtkColorTransferFunction
类,重写MapScalarsThroughTable2()
函数。原本的MapScalarsThroughTable2()
函数中调用了vtkColorTransferFunctionMapData()
模板函数,此函数中使用了GetAlpha()
获取透明度,是固定的,导致透明度不随顺标量值变化改变。因此我们只需要重写MapScalarsThroughTable2()
函数,实现自己的获取透明度的逻辑即可。
将重写后的对象传给vtkImagePlaneWidget->GetColorMap()->SetLookupTable()
,效果如下图:
(渲染窗口的背景是灰色,切片的无效值现在是透明的)