좋아, 이제는 기존 DICOM 파일에 새로운 오버레이를 추가하는 것입니다. & DICOM 파일에 이제 두 개의 오버레이가 있습니다. 모든 것이 오류없이 저장됩니다. & 두 DICOM 뷰어 Sante & ClearCanvas-Workstation이 파일을 열지 만 Sante 만 두 오버레이를 표시합니다. 이제 DICOM 파일의 태그를 보면 OverlayData (6000) 'VR'이 'OW'입니다. & OverlayData (6002) 'VR'이 'OB'입니다. 내 문제는 'VR'이 'OW'인 새 태그를 만드는 방법입니다.이 태그는 OverlayData에 사용할 올바른 태그입니다.ClearCanvas DICOM - 'OW'의 'VR'을 사용하여 태그를 만드는 방법
여기에 새 오버레이를 DicomFile.DataSet :: 에 추가 할 때 사용하는 코드가 있습니다. 오버레이를 만든 후에는 보이는 픽셀 데이터를 써 넣습니다. 'DicomFile.DataSet [dataTag] .SetNullValue();'
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);
}
는 그래서 같은 몇 가지 방법이있을 것 나에게 보일 수있을 것입니다 'VR'이 'OW'인 태그를 만듭니다. 아니면 ClearCanvas idk에 오버레이를 추가하는 완전히 다른 방법 이겠지요 ...
가 endiannessness에 "면역"때문에 나는, OB는 더 말할 것입니다. – ruslik
Rly? 그런데 왜 내가 LeadTools에서 가져온 DICOM 파일에 OverlayData 태그에 OW를 사용하여 오버레이가 있습니까? – zezba9000