QT- QIMAGEおよびマルチスレッドの問題
-
27-09-2019 - |
質問
すべての挨拶、
画像を参照してください:http://i48.tinypic.com/316qb78.jpg
電子顕微鏡からMRC画像から細胞エッジを抽出するアプリケーションを開発しています。
MRCファイル形式は、ボリュームピクセルデータを保存します(http://en.wikipedia.org/wiki/voxel)そして、3D Charアレイ(char ***)を使用して、MRCファイルからデータ(グレースケール値)をロードして保存します。
画像に示すように、それぞれXY、YZ、ZXの平面を表示する3人の視聴者がいます。視聴者の上部にあるスクロールバーは、軸に沿って画像スライスを変更するために使用します。
ユーザーがScrollbarの位置を変更したときのステップは次のとおりです。
1)新しいScrollbar値を取得します。(これは選択されたスライスです)
2)リラヴァントプレーン(YZ、XYまたはZX)の場合、3Dチャーアレイを読んで選択したスライスのアレイ(char*slice;)アレイ(char ***)
3)新しいQimage*(format_rgb888)を作成し、「スライス」(img-> setpixel(x、y、c);を使用して」を読み取ってピクセル値を設定します。
4)この新しいQimage*は、PaintEvent()メソッドで塗装されています。
それは集中的なプロセスであるため、別々のスレッドで「エッジ検出」プロセスを実行します。このプロセスの距離は、Qimage*の上に検出された曲線(ピクセルのセット)を描く必要があります。 qtスレッドの外側のdrawpoint()メソッドを呼び出す必要があることを意味します。
このケースでQimageを使用するのは最高の方法ですか?
別のスレッドからQT描画方法を実行する最良の方法は何ですか?
前もって感謝します、
解決
のドキュメントから QImage
:
なぜなら
QImage
aですQPaintDevice
サブクラス、QPainter
画像を直接描画するために使用できます。使用するときQPainter
aでQImage
, 、絵画は、現在のGUIスレッド以外のスレッドで実行できます。
Aを作成するだけです QPainter
あなたの画像に、必要なものを描きます。