2011-02-23 28 views
1

好吧,我正在做的是將一個新的覆蓋圖添加到現有的DICOM文件&保存它(DICOM文件現在有兩個覆蓋圖)。一切都保存無誤& DICOM觀看者Sante & ClearCanvas-Workstation打開文件,但只有Sante顯示兩個疊加層。 現在,當我查看DICOM文件中的標籤時,OverlayData(6000)'VR'是'OW'& OverlayData(6002)'VR'是'OB'。 所以我的問題是如何創建一個'OW''VR'的新標籤,因爲這是用於OverlayData的正確標籤。ClearCanvas DICOM - 如何創建'VR'爲'OW'的標籤

這裏是我用來添加新的覆蓋到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是更好的,因爲它是「免疫」endiannessness。 – ruslik

+0

Rly?那麼爲什麼我從LeadTools獲得的DICOM文件覆蓋了OverlayData標籤中的OW? – zezba9000

回答

1

好吧,我的困惑是accually在我的程序中的錯誤引起的。 我試圖通過使用元素「0x0100」而不是「0x0102」創建「位位置」標籤。 OW與OB是無關緊要的。

對不起...

相關問題