QT+VTK: 如何在QT中显示VTK生成的图像

本文由Markdown语法编辑器编辑完成。

1. 背景:

在医疗软件的开发中,QT和VTK是经常配合使用的。基于QT,可以快速地搭建出软件的图像窗口、按钮、工具栏和状态栏;基于VTK(还有DCMTK,ITK等),则可以实现医学图像的基本读取和处理。VTK的渲染窗口是其内部的一个类vtkRenderWindow,响应鼠标事件是通过vtkRenderWindowInteractor。

那么如何实现将基于VTK渲染在vtkRenderWindow中的图像显示在QT的控件(QWidget, QImage,QLabel等)中呢。

这里介绍两种思路。

2. QT与VTK联合显示图像:

2.1 借助QVTKWidget:

2.2 图像按字节拷贝:

这种方法的基本思路是:在内存中创建一套VTK渲染图像的管道机制,但是使vtkRenderWindow不显示,只是存在于内存中。当图像渲染完毕后,将vtkRenderWindow中的图像通过filter,截取出来,然后再按字节逐一拷贝到提前创建好的QImage中。

vtkSmartPointer<vtkRenderWindow> m_spRenderWindow = vtkSmartPointer<vtkRenderWindow>::New();
m_spRenderWindow->OffScreenRenderingOn();
vtkSmartPointer<vtkScalarsToColors> = m_spLookupTable = vtkSmartPointer<vtkScalarsToColors>::New();
vtkSmartPointer<vtkRenderer> m_spRenderer = 
vtkSmartPointer<vtkRenderer>::New();

vtkSmartPointer<vtkImageMapToColors> m_spImageMapToColors = vtkSmartPointer<vtkImageMapToColors>::New();
m_spImageMapToColors->SetInputData(m_spImage);
m_spImageMapToColors->SetLookupTable(m_spLookupTable);

vtkSmartPointer<vtkImageActor> m_spImageActor = 
vtkSmartPointer<vtkImageActor>::New();
m_spImageActor->GetMapper()->SetInputConnection(m_spImageMapToColors->GetOutputPort());
m_spRenderer->GetActiveCamera()->ParallelProjectionOn();
m_spRenderer->AddActor(m_spImageActor);
m_spRenderWindow->AddRenderer(m_spRenderer);
m_spRenderWindow->Render();

vtkSmartPointer<vtkWindowToImageFilter> windowToImageFilter = 
vtkSmartPointer<vtkWindowToImageFilter>::New();
windowToImageFilter->SetInput(m_spRenderWindow);
windowToImageFilter->SetInputBufferTypeToRGBA();
windowToImageFilter->Update();

vtkImageData *output=windowToImageFilter->GetOutput();
DxImageExtent extent;
output->GetExtent(extent.GetPointer());
void *startPointer=output->GetScalarPointer(extent.XMin(),extent.YMin(),extent.ZMin());

QImage m_displayImage;
memcpy(m_displayImage.bits(),startPointer,m_displayImage.byteCount());
m_displayImage=m_displayImage.rgbSwapped();

未完待续……

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

inter_peng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值