首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ClearCanvas DICOM -如何创建'VR‘为'OW’的标签

ClearCanvas DICOM -如何创建'VR‘为'OW’的标签
EN

Stack Overflow用户
提问于 2011-02-24 00:54:43
回答 1查看 899关注 0票数 0

好的,所以我要做的就是在现有的DICOM文件上添加一个新的覆盖层并保存它( DICOM文件现在有两个覆盖层)。保存所有内容时都没有错误&两个DICOM查看器Sante和ClearCanvas-Workstation都会打开文件,但只有Sante显示两个覆盖图。现在,当我查看DICOM文件中的标签时,OverlayData(6000) 'VR‘是'OW’,而OverlayData(6002) 'VR‘是'OB’。所以我的问题是如何创建一个“VR”为“OW”的新标签,因为这是用于OverlayData的正确标签。

下面是我用来将新的覆盖添加到DicomFile.DataSet::注意的代码,在创建覆盖之后,我确实向其中写入了可见像素数据。

代码语言:javascript
复制
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.DataSetdataTag.SetNullValue();‘这样的方法来创建'VR’为'OW‘的标签。或者也许在ClearCanvas idk中有一种完全不同的方式来添加覆盖。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-24 06:47:06

好吧,我的困惑是由我的程序中的一个bug引起的。我试图通过使用元素"0x0100“而不是"0x0102”来创建"Bit Position“标记。现在和OB是不相关的。

很抱歉..。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5094086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档