2

大家好,

请参考图片: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),通过读取3D char数组(char***)为所选切片生成(char * slice;)数组

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

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

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

这是在这种情况下使用 QImage 的最佳方法吗?

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

提前致谢,

4

1 回答 1

5

从文档QImage

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

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

于 2010-06-17T07:14:43.080 回答