番外編 DICOM画像とNAS( Network Attached
Strage ) その6
2つの違った画像を表示する
1. 医師の希望を、お聞きすると
同一の患者さんの、病状の経過を観察するために
時系列の違う、2画像の比較が必須、との仰せです。
そりゃ、そうですね、私も、歯科医ですので、そうしています。
そうすると、プログラム的には
各pictureBox毎に、イベントハンドラーを書かないと、いかんの? ....絶えられません (-_-)
この件に付きましては、解決できました、後述。
コントロールの配置に付いては
windowsのコントロールを調べて、TableLayoutPanel
なるものを、見つけました、ホッ。
ところが、
このTableLayoutPanel
に配置できるコントロールは、各行、各列の枠内に、、1つだけです。
私は、CT画像を連続してスクロールするために、スクロールバーが必要なんです。
で、
PpictureBoxと、scrollBarを持つ、userControlを作成すれば、1つのコントロールと見なされ、解決できると解りました。
2.UserControlの作成
今までのsolutionに、新しい項目を追加します。
->
このusrControl1に、scrollBarと、pictureBoxを貼り付けます。
->
そして、貼り付けたpictureBox1のイベントハンドラーを加えます。
->
で、イベントハンドラーで行いたい事を、書きます。
こんな風に、イベントハンドラーを加えていきます。
userControl1に書くイベントハンドラーは、各イベントに付き、1つだけです。
これで、複数のpictureBoxに、間違いなく、画像を、ドラッグドロップできるのを確かめました!
どのpictureBoxに、ドラッグドロップしたのか、プログラムはしっかり、識別しています!
すごいですね..... 「パパは何でも知っている!」と、叫びたいくらいです (昔、そんなテレビドラマがあった)
ここで、作ったuserControlを含めて、buildすると、ツールボックスの中に、userControl1が現れます。
3.TableLayoutPanel
を使う
Form1.csに戻ります。
TableLayoutPanel
を選択します、
で、作った userControl1を、ツールボックスから選択します。
ここでは、userControl1を2つ設置しました。
現実の画像診断では、2つで充分だと、判断しました。
1つのuserControlで、全画面を覆うには、
TableLayoutPanel
に埋め込まれたコントロールを一旦外して、再配置し、SetColumnSpanを使います。
このresizeに際して、画面描画の為のGraphics g も、当然一から設定する必要があります。
2画面表示する場合
画像表示領域が、いくつあっても、イベントハンドラーは、たった1つ!.....すばらしい! 感激です。
4.Ginkgo CADx
を改良する手もある
ご承知のように Ginkgo CADxは、open
sourceで、高性能な、DicomViewerです。
ただ、患者名の日本語表示ができないだけなので、source fileを入手して
これを改良するのも、いい手ですね。
出典(Ginkgo
CADx 2.6 source file)
この点に関して、私のプログラムでは、こんな風にして、文字化けを解消しています。
但し、databaseから、データを読み込む時に、w_charではなくて、char単位で読み込む事が必要です。
そのためには、C#でdatabaseを読み込むためのラッパークラスである mySQliteModel.cppにおいて
databaseをchar*で、読み込みます。
そして、C#のプログラムの方では、encodingを設定して
一旦、byte配列に格納し、このbyte配列から再び、stringとして、読み込んでいます。
こんな風で、まだ、simpleDicomViewerは、出来上がっていません。
来年も、よろしくお願いもうしあげます。
H.23.12.28