DICOMファイルの読み込み方法について – プログラミング – Home

DICOMファイルの読み込み方法につい...
 
通知
すべてクリア

[解決済] DICOMファイルの読み込み方法について


sismoon
 sismoon
(@sismoon)
ゲスト
結合: 21年前
投稿: 6
Topic starter  

現在,画像処理でDICOM画像の処理を行っています.
ヘッダのサイズが条件によって変化する為,一度ファイル全体を読み込んだ後,
ファイルの終わりから輝度値を取得するプログラムを作成しました.
しかし,画像が正しく表示されません(真っ黒になるor読み込む位置がずれる).
ファイルポインタの取得方法が間違っているのでしょうか?
どなたか,よろしくお願いします.

void CDICOM2View::FileOpen1()
{
  LPCTSTR FilePath;
  CString FileName;
  DWORD   number, fSize, offset;
  LPBYTE  lpBuf;
  int   a, b, c;

  CFileDialog FileDlg(TRUE, NULL, *.dcm,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,dicomファイル(*.dcm)|*.dcm||);

  if(FileDlg.DoModal() == IDOK){
    FilePath = FileDlg.GetPathName();
    FileName = FileDlg.GetFileName();
    HANDLE hFile = CreateFile(FileName, GENERIC_READ, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

    fSize = GetFileSize(hFile, NULL);
    lpBuf = new BYTE[fSize];

    ReadFile(hFile, lpBuf, fSize, &number, NULL);//ファイルをすべて読み込む
    CloseHandle(hFile);

    img = new int*[size_y];
    for(int i=0;i<size_y;i++)
      img[i] = new int[size_x];

    offset = fSize - 1;
    for(i=0;i<size_y;i++){
      for(int j=0;j<size_x;j++){
        a = *(lpBuf+offset);
        b = *(lpBuf+offset-1);
        c = a << 8;
        img[size_y-1-i][size_x-1-j] = b | c;
        offset -= 2;
      }
    }
    delete [] lpBuf;
    Invalidate(FALSE);
    }
}

動作環境はWindows ME,VisualC++6.0です.


引用未解決
トピックタグ
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

DICOMは随分昔にかじっただけなのであまり参考になりませんが...。

> ヘッダのサイズが条件によって変化する為,...
> ファイルの終わりから輝度値を取得する...
随分乱暴な方法に見えますが、そんなやり方でいいんですか?
DICOMはヘッダを丁寧に読まないとデータを理解できないハズなんですが、
データの条件が非常に限定されたシステムでの話なのでしょうか?


返信引用
sismoon
 sismoon
(@sismoon)
ゲスト
結合: 21年前
投稿: 6
Topic starter  

画像サイズは縦×横が2330×1770pixelで固定されています.
メーカさんから,DICOMのヘッダサイズが必ずしも一定でないということを
聞いたので,乱暴ですがファイルの末端から読み込んでいます.

http://homepage3.nifty.com/ishidate/vcpp6_g16/vcpp6_g16.htm
でも取り上げられているのですが,
CArchiveの概念がよく分からないこともあってこのように作成しました.


返信引用
sismoon
 sismoon
(@sismoon)
ゲスト
結合: 21年前
投稿: 6
Topic starter  

画像が表示されない原因は,別の関数(OnDraw関数)によるものでした.

ご迷惑をおかけしました.


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました