QT和VTK联合显示图像时发生扭曲变形的问题解决
2017-03-13 19:32
429 查看
本文由Markdown语法编辑器编辑完成。
前段时间在实现一个需求——在一个窗口中显示一个序列的部分图像。这就需要在QT的一个布局窗口(QWidget/QLayout)中,再内建一个QGridLayout,然后将序列图像依次布局在子layout中。然后,随着QGridLayout的行和列不断增加,最后当增加一定程度时,会导致布局内部的部分图像发生扭曲变形。效果如下图所示:
两幅图中,第一幅图的主布局是1行2列,在左侧是一张X光图像,在右侧的布局中显示的是一组CT序列的图像。内部是一个QGridLayout,它会随着布局内需要显示的图像层数,来动态地调整行和列的数字。可以看到,当显示的图像层片数从25层,再增加一层时。即由五行五列到五行六列时,之前显示正常的图像突然很多都发生了扭曲变形,如第2张图中紫色线框包含的那2列图像。
本文主要分析,产生这个问题的原因,和最后的解决方案。
VTK在后台进行图像渲染,然后渲染出的图像按照像素,逐个拷贝到一个QImage中,QWidget利用它的paintEvent事件响应,将拷贝后的QImage显示在QWidget中。
因此,要调研这个图像变形的问题,就需要从这几个环节中去排查,看到底是哪一个环节出了问题,然后再对症下药,解决问题。
未完待续……
1. 问题提出背景:
基于本博客之前的一篇博文《QT+VTK: 如何在QT中显示VTK生成的图像》,主要讲解了一般医学软件是如何基于QT和VTK的基础,进行医学图像的渲染和展示的。前段时间在实现一个需求——在一个窗口中显示一个序列的部分图像。这就需要在QT的一个布局窗口(QWidget/QLayout)中,再内建一个QGridLayout,然后将序列图像依次布局在子layout中。然后,随着QGridLayout的行和列不断增加,最后当增加一定程度时,会导致布局内部的部分图像发生扭曲变形。效果如下图所示:
两幅图中,第一幅图的主布局是1行2列,在左侧是一张X光图像,在右侧的布局中显示的是一组CT序列的图像。内部是一个QGridLayout,它会随着布局内需要显示的图像层数,来动态地调整行和列的数字。可以看到,当显示的图像层片数从25层,再增加一层时。即由五行五列到五行六列时,之前显示正常的图像突然很多都发生了扭曲变形,如第2张图中紫色线框包含的那2列图像。
本文主要分析,产生这个问题的原因,和最后的解决方案。
2. 问题解决思路:
在解决这个问题时,首先需要理解这个图像是如何显示在前台的界面中的。这里涉及到VTK的渲染,QImage的显示,QWidget的事件机制,像素拷贝等基础知识。用一句话概括这个过程就是:VTK在后台进行图像渲染,然后渲染出的图像按照像素,逐个拷贝到一个QImage中,QWidget利用它的paintEvent事件响应,将拷贝后的QImage显示在QWidget中。
因此,要调研这个图像变形的问题,就需要从这几个环节中去排查,看到底是哪一个环节出了问题,然后再对症下药,解决问题。
3. 问题解决方案:
最终在了解了问题产生的原因,和提出相应的解决方案后,修改代码后,再增加显示的图像层数时,所有的图像层便可以正常显示。如下图所示。未完待续……
相关文章推荐
- Qt中用QLabel显示OpenCV中Mat图像数据出现扭曲现象的解决
- 解决linux下qvfb中QT的中文显示问题
- Qt 国际化编程解决汉字显示方块、乱码问题!
- 解决QT发布后中文不显示的问题
- opencv中图像连续显示的内存泄露问题的解决办法
- 解决QT4.3.5-X11和QtopiaCore-x86汉字不能正常显示的问题
- 解决切换前后置摄像头时,本机不能正常显示前或后置摄像头图像的问题
- windows下Qt发布的EXE,运行发生丢失QtGuid4.dll、QtCored4.dll问题解决方案
- 奋战5个小时解决诡异的PHP--“图像XX因其本身有错无法显示”的问题
- 发布Qt程序,显示不了jpg图像的问题
- 解决单文档滚动条程序中显示图像闪烁问题
- 关于Qt移植后环境变量的设置 qt移植到arm中文显示问题解决 实现pc与tiny210 arm开发板 udp通信(续上)
- VBA编程一例:解决WORD文档无法显示链接的图像问题
- zxing 黑屏 无法显示图像问题 及中文乱码问题解决
- 编译QT/E应用程序时发生的多重定义问题和解决方法
- 解决QT中文字符串在osg中显示乱码的问题
- Qt 国际化编程,真正解决汉字显示方块、乱码问题!
- 用flash获取摄像头照出来的图像变形的问题解决方法
- qt 下scrollArea 显示图像的问题
- 关于matlab中图像太大只能缩小显示问题的解决