2

みなさん、こんにちは。

http://i48.tinypic.com/316qb78.jpgの画像を参照してください。

電子顕微鏡のMRC画像から細胞のエッジを抽出するアプリケーションを開発しています。

MRCファイル形式はボリュームピクセルデータ(http://en.wikipedia.org/wiki/Voxel)を格納し、3D char配列(char ***)を使用してMRCファイルからデータ(グレースケール値)をロードおよび格納します。

画像に示されているように、XY、YZ、ZX平面をそれぞれ表示する3つのビューアがあります。ビューアの上部にあるスクロールバーは、軸に沿って画像スライスを変更するために使用します。

ユーザーがスクロールバーの位置を変更したときに実行する手順は次のとおりです。

1)新しいスクロールバーの値を取得します(これは選択されたスライスです)

2)関連平面(YZ、XY、またはZX)の場合、3D char配列(char ***)を読み取って、選択したスライスの(char *スライス;)配列を生成します。

3)新しいQImage *(Format_RGB888)を作成し、「slice」を読み取ってピクセル値を設定します(img-> setPixel(x、y、c);を使用)。

4)この新しいQImage *は、paintEvent()メソッドでペイントされます。

集中的なプロセスであるため、別のスレッドで「エッジ検出」プロセスを実行します。このプロセスでは、検出された曲線(ピクセルのセット)をQImage *の上に(レイヤーとして)描画する必要があります。これは、QTスレッドの外部でdrawPoint()メソッドを呼び出す必要があることを意味します。

この場合、QImageを使用するのが最善の方法ですか?

別のスレッドからQT描画メソッドを実行するための最良の方法は何ですか?

前もって感謝します、

4

1 に答える 1

5

のドキュメントからQImage:

QImageQPaintDeviceサブクラスであるため、QPainter画像に直接描画するために使用できます。で使用QPainterするとQImage、現在の GUI スレッドとは別のスレッドでペイントを実行できます。

画像に を作成し、QPainter必要なものを描画するだけです。

于 2010-06-17T07:14:43.080 に答える