QVTKWidget控件一般显示二维图片,如果要显示三维图片,并通过鼠标滚轮切换单张图片,则需要加入监听机制,可以自定义一个类来实现所需要的交互方式,该类可以继承于vtkCommand类。

(1)定义鼠标滚轮交互方式,用于显示下一张切片

class vtkNextSliceCallbk : public vtkCommand
{
private:vtkRenderWindowInteractor *Interactor;vtkImageViewer2* viewer;vtkInteractorStyleImage* style;public:static vtkNextSliceCallbk *New(){return new vtkNextSliceCallbk;}vtkNextSliceCallbk()//构造函数{this->Interactor = 0;}void SetInteractorStyle(vtkInteractorStyleImage* style){this->style = style;}void SetInteractor(vtkRenderWindowInteractor *interactor){this->Interactor = interactor;}vtkRenderWindowInteractor *GetInteractor(){return this->Interactor;}void SetViewer(vtkImageViewer2* viewer){this->viewer = viewer;}virtual void Execute(vtkObject *caller, unsigned long eventId, void *callData){int max = viewer->GetSliceMax();//获得最大切片数目,避免翻页超出范围//63,从0开始int cur = viewer->GetSlice();//获得当前切片if (eventId == vtkCommand::MouseWheelForwardEvent && cur >= 0)//向前翻页{if(cur == 0)//切换到第一张,滚轮继续向前,保持显示第一张切片viewer->SetSlice(0);elseviewer->SetSlice(--cur);viewer->SetSliceOrientationToXY();Interactor->SetInteractorStyle((vtkInteractorObserver *)style);} if (eventId == vtkCommand::MouseWheelBackwardEvent &&  cur  <= max)//向后翻页{if(cur == max)//切换到最后一张,滚轮继续向后,保持显示最后一张切片viewer->SetSlice(max);elseviewer->SetSlice(++cur);viewer->SetSliceOrientationToXY();Interactor->SetInteractorStyle((vtkInteractorObserver *)style);}}
};

(2) 读入MHD三维医学图片,通过滚轮切换单张图片,源码如下:

    mhdReader = vtkMetaImageReader::New();mhdReader->SetFileName(inputFileName);mhdReader->Update();//统计最大最小灰度值 (或者数据类型),自适应设置窗宽&窗位//当灰度值高于该范围的最大值时,均以白影显示;而低于该范围时均显示为黑色dataType =  mhdReader->GetDataScalarType();//获得数据类型imgSize = mhdReader->GetOutput()->GetExtent();//显示图像尺寸rotate = vtkImageFlip::New();//图像反转rotate->SetInputConnection(mhdReader->GetOutputPort());rotate->SetFilteredAxis(1);//y轴反转originalVtkViewer->SetInputConnection(rotate->GetOutputPort());//交互renWinInteractor = vtkRenderWindowInteractor::New();originalVtkViewer->SetRenderer(originalRenderder);//设置为同一个渲染场景originalVtkViewer->SetRenderWindow(ui->originalQVTKViewer->GetRenderWindow());pCall = vtkNextSliceCallbk::New();//实例化自定义类style = vtkInteractorStyleImage::New();style->AddObserver(vtkCommand::MouseWheelBackwardEvent, pCall); style->AddObserver(vtkCommand::MouseWheelForwardEvent, pCall);renWinInteractor->SetInteractorStyle(style);renWinInteractor->AddObserver(vtkCommand::MouseWheelBackwardEvent, pCall);//通过交互窗口去监听renWinInteractor->AddObserver(vtkCommand::MouseWheelForwardEvent, pCall);pCall->SetInteractorStyle(style);pCall->SetViewer(originalVtkViewer);pCall->SetInteractor(renWinInteractor);ui->originalQVTKViewer->GetRenderWindow()->SetInteractor(renWinInteractor);originalVtkViewer->SetupInteractor(ui->originalQVTKViewer->GetRenderWindow()->GetInteractor());//设置交互方式originalVtkViewer->SetSliceOrientationToXY();//设置切片方向originalVtkViewer->SetColorLevel(128);//窗位originalVtkViewer->SetColorWindow(256);//窗宽

QVTKWidget控件显示三维图片效果如下:

QVTKWidget控件显示三维图片相关推荐

  1. QVTKWidget控件显示二维图片

    QVTKWidget控件不是QT中默认控件,需要手动编译.用CMAKE编译VTK过程中,需要选择VTK支持QT.网络上有很多教程,不再重复了.但有一点要提醒大家:只需要将Release版本中QVTKW ...

  2. 演练GridView控件显示目录图片

    本博文,将带你学习使用GridView控件显示站点目录的图片.如果你已经学会怎样做图片缩略图:怎样应用接口来实现统一的属性,方法或函数:怎样动态加载用户控件,等等.就不必往下看了.因为此篇博文就是演练 ...

  3. VC++下载图片然后控件显示JPG图片的实现

    本人采用VS2003开发平台,由于可以兼容VC6.0的大量代码.但是要实现目前C#的大量功能,还是要费不少功夫的.下面讲下如何如下图片下载,然后显示在图片控件的功能.单独封装了两个函数可以只直接使用. ...

  4. c# picturebox控件显示本地图片和显示网上的图片

    显示本地图片 pictureBox1.Image=Image.FormFile(@"图片路径"); 显示网络图片 pictureBox1.ImageLocation = @&quo ...

  5. 如何让web控件FileUpload选择完文件之后就自动触发事件,让Image控件显示出图片来...

    function SelectImg(url){                 document.all.item("ProductImg").src=document.getE ...

  6. mfc picture控件显示png图片

    onpaint函数里添加程序: CClientDC *pDC = new CClientDC(GetDlgItem(IDC_LIGHT)); CRect rect; GetDlgItem(IDC_LI ...

  7. 9206晚自习点歌功能拆解 图片加载 控件显示与隐藏等等

    使用panel面版布局 控制面版的Dock属性 项目资源存放位置 bin/debug下 布局图片 工具栏的设置 设置工具项为图文模式 图在上,文在下 给菜单项添加图片,并且设置图片不压缩,不缩小 左右 ...

  8. C#利用Picturebox控件显示图片

    源文章:https://blog.csdn.net/liyuqian199695/article/details/54098938 C#利用Picturebox控件显示图片 1.Picturebox控 ...

  9. MFC 对话框中的picture control 控件显示图片

    MFC读取图片一般使用自定义的DIB文件.DIB文件集中了处理图片的API函数,这样可以方便我们的图像操作. DIB文件下载路径:DIB文件下载 MFC显示图片有几种方法: 1.在运行界面上选择 文件 ...

  10. MFC程序调用Windwos CMD命令打印图片 MFC 控件显示层次调整,即(叠放次序)和绘制遮挡置于底层顶层灰色

    MFC打印 打电话 ShellExecute 从您的计划中 print 操作 (特好用) ShellExecute(NULL,"print","c:\\test.png& ...

最新文章

  1. 37_04_awk入门进阶
  2. python3 pillow使用测试
  3. 等待 dg597 服务的连接超时
  4. Java基础点:集合
  5. Go image: unknown format 错误解决
  6. Java 原子类的操作 AtomicInteger
  7. C#跨线程操作控件的线程安全方法
  8. (转)在阿里,我们如何管理代码分支?
  9. 车联网之通信超限战上演巅峰对决!
  10. cpu是32位的 这指的是数据总线还是地址总线是32条?另外,电脑操作系统是3位的这指的是什么意思?指令是32...
  11. POJ1088 Bailian1088 滑雪【DFS+记忆化搜索】
  12. npm ERR! Error: EPERM: operation not permitted问题解决
  13. MFC对话框打开一幅图片并在picture显示和图片保存
  14. 关于全局低级键盘hook的记录(WH_KEYBOARD_LL)
  15. 使用python实现可视化ftp客户端(本地文件展示和搜索功能、ftp文件展示和搜索功能以及上传和下载功能)
  16. 将超星阅读器的PDG格式文件转化成PDF格式
  17. Redis——Lettuce的主从哨兵模式
  18. 史上最暖2月谁制造?
  19. android ndk : error pluginprotocolstatic: local_src_files 错误
  20. python barrier_Python多线程Barrier(障碍对象) 雷子

热门文章

  1. Ribbon 服务调用
  2. 个人税收计算器(只限长沙)全线仿照九米个税计算器
  3. mysql有订单表orders_mysql练习作业题
  4. 如何测试计算机的运行速度,如何查看cpu运行速度
  5. uniapp switch按钮的使用开关按钮效果demo(整理)
  6. 初中英语语法(003)-be动词和一般动词的一般过去式
  7. java/php/net/python志愿者管理系统程序设计
  8. RNN的数学符号(Notation)
  9. 【算法讲19:同余最短路】跳楼机 | 墨墨的等式 | Lazy Running
  10. matlab 求约当阵,矩阵约当标准化的一个新方法