2012-10-22 10 views
6

私は経験豊かなプログラマーではなく、VS2010プロジェクトにDICOMビューアを追加するだけです。 Windowsフォームでイメージを表示することはできますが、ウィンドウの中心と幅を変更する方法はわかりません。ここにスクリプトがあります:Fellow Oak DICOM - 画像ウィンドウのレベルを変更する

DicomImage image = new DicomImage(_filename); 
      int maxV = image.NumberOfFrames; 
      sbSlice.Maximum = maxV - 1; 
      image.WindowCenter = 7.0; 
      double wc = image.WindowCenter; 
      double ww = image.WindowWidth; 

      Image result = image.RenderImage(0); 
      DisplayImage(result); 

これは機能しませんでした。これが正しいアプローチであるかどうかはわかりません。

+0

使用しているDICOMライブラリについてもう少し明確にすることはできますか? –

+0

私はFellow Oak DICOM for .NETを使用しています。 – hncl

+1

同じ質問を* fo-dicom *ディスカッションフォーラムに投稿し、実行しているソフトウェアのバージョンにウィンドウレベルのバグがあるとの回答を得ました。 * Stackoverflow *の一貫性のために、ここではフォーラムの応答に基づいて独自の答えを提供し、* fo-dicom *バージョン1.0.26を実行していることを質問に示すことをお勧めします。 –

答えて

1

私はコードを見て、それは非常にバギーだった。 Dataset.Get(DicomTag.PhotometricInterpretation)はLoad()中​​又はMonochrome2のいずれかである場合を除きWindowCenter又はWindowWidthプロパティを設定する現在のバグ実装でhttps://github.com/rcd/fo-dicom/blob/master/DICOM/Imaging/DicomImage.cs

は効果がありません。これはすでにばかげていますが、_renderOptions変数は1つの場所にのみ設定され、すぐに_pipelineの作成に使用されるため(WindowCenterプロパティを使用して変更する機会はありません)、まだ使用できません。グレースケール_renderOptionsの初期化は_renderOptions = GrayscaleRenderOptions.FromDataset(Dataset);です。

現在のソリューション:

DicomDataset dataset = DicomFile.Open(fileName).Dataset; 
//dataset.Set(DicomTag.WindowWidth, 200.0); //the WindowWidth must be non-zero 
dataset.Add(DicomTag.WindowCenter, "100.0"); 
//dataset.Add(DicomTag.PhotometricInterpretation, "MONOCHROME1"); //ValueRepresentations tag is broken 
dataset.Add(new DicomCodeString(DicomTag.PhotometricInterpretation, "MONOCHROME1")); 
DicomImage image = new DicomImage(dataset); 
image.RenderImage(); 
:あなたのデータセットは、適切
  • DicomTag.WindowWidth != 0.0
  • DicomTag.PhotometricInterpretation == Monochrome1またはMonochrome2
  • 次のコードがあることを達成し

    • DicomTag.WindowCenterを持つべきです

      最適な解決策:このバグのライブラリが修正されるまでお待ちください。

    +0

    ありがとうございました。次のコードでDicomDatasetクラスの問題を絞りました:if(typeof(T)== typeof(10進)) 戻り値を追加します。 ()))); エラーは、 "System.Int32型の値を持つDS型のDICOM要素を作成できません" Googleグループに掲載しました。 全体的に私はfo-Dicomが優れたライブラリの1つであることを発見しました。私は多くのscucessなしで他のツールキットに疲れました。 – hncl

    +0

    なぜこれが問題の原因だと思いますか?どこかに小数点がありますか?質問に投稿されたコードがうまくいけば、WindowsCenterを動作させるためのコードを書くことができると思います。 P.S.画像はグレースケールですか? –

    +0

    画像はグレースケールです。問題を解決するための回避策へのリンク:https://groups.google.com/forum/?fromgroups=#!topic/fo-dicom/ycnB25bAvq4ありがとう – hncl

    5

    DicomImageクラスは、イメージビューアを実装する目的で作成されたものではありません。これは、DICOM Dumpユーティリティでプレビューイメージをレンダリングし、イメージの圧縮/解凍コーデックをテストするために作成されました。それを図書館に入れるのは間違いでしたか?

    コード内で、意図した機能をはるかに超える何かに使用されているときにバグがあると判断するのは難しいです。

    つまり、私は、WindowCenter/WindowWidthプロパティがレンダリングされたイメージに適用されるように、コードを修正するのに時間がかかりました。 Gitリポジトリでこれらの変更を見つけることができます。

    var img = new DicomImage(fileName); 
    img.WindowCenter = 2048.0; 
    img.WindowWidth = 4096.0; 
    DisplayImage(img.RenderImage(0)); 
    
    +1

    ありがとう、コルビー、非常に感謝します。あなたは正しいです、私は拡張機能のためにライブラリを使用しようとしていました。間違いなく、これは私のDICOM経験が限られているためです。あなたの努力にもう一度感謝します。 – hncl

    関連する問題