2011-02-23 23 views
1

これで、既存のDICOMファイルに新しいオーバーレイを追加することができます。& DICOMファイルに2つのオーバーレイが追加されました。すべてがエラーなしで保存されます&両方のDICOMビューアSante & ClearCanvas-Workstationはファイルを開きますが、Santeだけが両方のオーバーレイを表示します。 DICOMファイル内のタグを見ると、OverlayData(6000) 'VR'が 'OW' & OverlayData(6002) 'VR'が 'OB'です。 私の問題は、 'VR'が 'OW'の新しいタグを作成する方法です。これは、それがOverlayDataに使用する正しいタグであるためです。ClearCanvas DICOM - 'OW'の 'VR'でタグを作成する方法

新しいオーバーレイをDicomFile.DataSet :: に追加するためのコードは次のとおりです。注:オーバーレイを作成した後、可視ピクセルデータを書き込みます。

void AddOverlay() 
{ 
      int newOverlayIndex = 0; 
      for(int i = 0; i != 16; ++i) 
      { 
       if(!DicomFile.DataSet.Contains(GetOverlayTag(i, 0x3000))) 
       { 
        newOverlayIndex = i; 
        break; 
       } 
      } 

      //Columns 
      uint columnsTag = GetOverlayTag(newOverlayIndex, 0x0011); 
      DicomFile.DataSet[columnsTag].SetUInt16(0, (ushort)CurrentData.Width); 
      //Rows 
      uint rowTag = GetOverlayTag(newOverlayIndex, 0x0010); 
      DicomFile.DataSet[rowTag].SetUInt16(0, (ushort)CurrentData.Height); 
      //Type 
      uint typeTag = GetOverlayTag(newOverlayIndex, 0x0040); 
      DicomFile.DataSet[typeTag].SetString(0, "G"); 
      //Origin 
      uint originTag = GetOverlayTag(newOverlayIndex, 0x0050); 
      DicomFile.DataSet[originTag].SetUInt16(0, 1); 
      DicomFile.DataSet[originTag].SetUInt16(1, 1); 
      //Bits Allocted 
      uint bitsAllocatedTag = GetOverlayTag(newOverlayIndex, 0x0100); 
      DicomFile.DataSet[bitsAllocatedTag].SetUInt16(0, 1); 
      //Bit Position 
      uint bitPositionTag = GetOverlayTag(newOverlayIndex, 0x0100); 
      DicomFile.DataSet[bitPositionTag].SetUInt16(0, 0); 
      //Data 
      uint dataTag = GetOverlayTag(newOverlayIndex, 0x3000); 
      DicomFile.DataSet[dataTag].SetNullValue();//<<< Needs to be something else 
      byte[] bits = new byte[(CurrentData.Width*CurrentData.Height)/8]; 
      for(int i = 0; i != bits.Length; ++i) bits[i] = 0; 
      DicomFile.DataSet[dataTag].Values = bits; 
} 
public static uint GetOverlayTag(int overlayIndex, short element) 
     { 
      short group = (short)(0x6000 + (overlayIndex*2)); 
      byte[] groupBits = BitConverter.GetBytes(group); 
      byte[] elementBtis = BitConverter.GetBytes(element); 
      return BitConverter.ToUInt32(new byte[]{elementBtis[0], elementBtis[1], groupBits[0], groupBits[1]}, 0); 
     } 

だから、のようないくつかの方法があるだろう私には思われる 'DicomFile.DataSet [dataTag] .SetNullValue();' 'OW'の 'VR'でタグを作成します。それとも、ClearCanvas idkにオーバーレイを追加する方法がまったく違うのでしょうか。

+0

私はエンディアンに「免疫」があるので、OBは良いと言います。 – ruslik

+0

Rly?それで、私がLeadToolsから得たDICOMファイルがなぜオーバーレイデータタグにOWを使ってオーバーレイされているのですか? – zezba9000

答えて

1

私の混乱は、私のプログラムのバグによって発生しました。 "0x0100"の代わりに "0x0100"という要素を使用して、 "Bit Position"タグを作成しようとしていました。 OW対OBは関係ありません。

ごめんなさい...

関連する問題