2010-06-17 79 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