由于vtkImageviewer2是一个fast and dirty class,所以在循环显示中会出现内存泄露的问题。
使用vtkImageActor、vtkRender、vtkRenderWindow、vtkRenderWindowInteractor、vtkInteractorStyleImage 配合显示图像是官方推荐的显示方式。
因而唯有通过vtkImageMapToWindowLevelColors 来设置ColorLevel 以及ColorWindow,然后将配置后的图像传递给ImageActor
vtkImageMapToWindowLevelColors *windowLevel = vtkImageMapToWindowLevelColors::New();
windowLevel->SetInput(MRISlice);
windowLevel->SetLevel(100);
vtkSmartPointer<vtkImageActor> actor_MR = vtkSmartPointer<vtkImageActor>::New();
actor_MR->SetInput(windowLevel->GetOutput());
vtkSmartPointer<vtkRenderer> render_MR = vtkSmartPointer<vtkRenderer>::New();
render_MR->AddActor(actor_MR);
renderwindow等设置与通常的一致。
另外一个方法就是通过vtkImageMapper来调用SetColorLevel SetColorWindow设置窗位 窗宽
坑爹了,上两个月测试发现vtkImageviewer2与VtkImageFlip在循环显示中出现内存泄露的问题,但是今天无意中看了篇讨论帖子,发现是没有显式释放数据的原因:viewer2->GetRenderer()->RemoveViewProp(viewer2->GetImageActor());
不知道vtkImageFlip会不会也是因为类似的原因导致的泄露问题。 后面如有结果会持续更新!