2010-06-17 244 views
1

问候所有,QImage的QT间期和多线程问题

请参阅图像: http://i48.tinypic.com/316qb78.jpg

我们正在开发的应用程序,以从电子显微镜提取MRC图像小区边缘。

MRC文件格式存储体积像素数据(http://en.wikipedia.org/wiki/Voxel),我们只需使用3D char数组(char ***)来加载和存储来自MRC文件的数据(灰度值)。

如图所示,有3个查看器分别显示XY,YZ和ZX平面。 观看者顶部的滚动条用于沿着一个轴更改图像切片。

以下是我们在用户更改滚动条位置时所执行的步骤。

1)获得新的滚动值(该 是所选切片)

2)用于初步认识平面(YZ,XY或 ZX),产生(字符*切片;)阵列,用于 所选切片通过读取3D字符 阵列(炭***)

3)创建一个新的QImage * (Format_RGB888),并设置像素通过读取 '切片' 值 (使用 img-> setPixel(X ,y,c);)

4)这个新的QImage *绘制在 paintEvent()方法中。

我们将在一个单独的线程中执行“边缘检测”的过程,因为它是一个密集的process.During这个过程中,我们需要在上面绘制检测曲线(组像素)以上的QImage *。(作为图层)。这意味着我们需要在QT线程之外调用drawPoint()方法。

这种情况下使用QImage的最佳方式是?

从另一个线程执行QT绘图方法的最佳方法是什么?

由于事先

回答

4

QImage文档:

QImage由于是QPaintDevice子类,QPainter可以用来直接绘制到图像上。在QImage上使用QPainter时,可以在除当前GUI线程之外的另一个线程中执行绘制。

只需在您的图像上创建一个QPainter并绘制您所需的图像。

+0

但是请注意,当您在屏幕上绘制图像时,只会显示图像的当前状态...在图像上绘制更多图像不会改变屏幕上显示的内容,除非您更新显示图像的小部件。幸运的是,信号/插槽或定时器将很容易解决。 – 2010-06-17 18:17:44