QT-QImage和多线程问题

时间:2010-06-17 01:42:49

标签: multithreading qt qt4 qimage qpixmap

问候所有人,

请参考图片: http://i48.tinypic.com/316qb78.jpg

我们正在开发一种应用程序,用于从电子显微镜中提取MRC图像的细胞边缘。

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

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

以下是用户更改滚动条位置时的步骤。

  

1)获取新的滚动条值。(这个   是选定的切片)

     

2)对于相对平面(YZ,XY或   ZX),生成(char * slice;)数组   通过读取3D char来选择切片   array(char ***)

     

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

     

4)这个新的QImage *画在了   paintEvent()方法。

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

这种情况下使用QImage的最佳方法是什么?

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

提前感谢,

1 个答案:

答案 0 :(得分:4)

来自QImage的文档:

  

由于QImageQPaintDevice子类,QPainter可用于直接绘制到图像上。在QPainter上使用QImage时,可以在当前GUI线程之外的其他线程中执行绘制。

只需在图片上创建QPainter并绘制所需内容即可。