3

我试图在 ClearCanvas 中向我的 DicomFile.DataSet 添加一个新标签。

我注意到有“DicomFile.DataSet.RemoveAttribute”方法,但没有“AddAtribute”方法。所以我一直在研究“LoadDicomFields”和“SaveDicomFields”方法,但到目前为止似乎无法让它们工作。我试图将“DicomFieldAttribute”传递给这些方法,但无济于事。

我在这里想念什么?或者我需要做什么才能将新标签添加到 DataSet。

DicomFieldAttribute c = new DicomFieldAttribute(tag);
List<DicomFieldAttribute> cs = new List<DicomFieldAttribute>();
cs.Add(c);
DicomFile.DataSet.LoadDicomFields(cs);
DicomFile.DataSet.SaveDicomFields(cs);
if(DicomFile.DataSet.Contains(tag))
{
   tag = 0; //BreakPoint never reached here
}

或者我也试过这个::

DicomFieldAttribute c = new DicomFieldAttribute(tag);
DicomFile.DataSet.LoadDicomFields(c);
DicomFile.DataSet.SaveDicomFields(c);
if(DicomFile.DataSet.Contains(tag))
{
   tag = 0; //BreakPoint never reached here
}

我一直被困在看似微不足道的任务上。

4

1 回答 1

2

您对属性的使用有点困惑。DicomFiledAttribute 是一个 .NET 属性,可以放置在类的成员上,以便使用 DicomAttributeCollection 中的值自动填充该类,或者使用 DicomAttribute 集合中的值自动填充该类。即,给定一个像这样的测试类:


public class TestClass
{
    [DicomField(DicomTags.SopClassUid, DefaultValue = DicomFieldDefault.Default)]
    public DicomUid SopClassUid = null;

    [DicomField(DicomTags.SopInstanceUid, DefaultValue = DicomFieldDefault.Default)]
    public DicomUid SOPInstanceUID = null;

    [DicomField(DicomTags.StudyDate, DefaultValue = DicomFieldDefault.Default)]
    public DateTime StudyDate;
}

您可以像这样填充类的实例:


DicomFile file = new DicomFile("filename.dcm");
file.Load();
TestClass testInstance = new TestClass();

file.DataSet.LoadDicomFields(testInstance);
// testInstance should now be populated with the values from file

如果您只对填充一些 DICOM 标记感兴趣,DicomAttributeCollection 中有一个索引器。如果 DicomAttribute 实例尚不存在,索引器将自动为通过索引器请求的标记创建一个实例。因此,要填充一个值,您可以执行以下操作:



DicomFile file = new DicomFile("filename.dcm");

file.DataSet[DicomTags.SopInstanceUid].SetStringValue("1.1.1");

如果你想自己创建 DicomAttribute,你可以这样做:


DicomAttribute attrib = new DicomAttributeUI(DicomTags.SopInstanceUid);
attrib.SetStringValue("1.1.1");

DicomFile file = new DicomFile("filename.dcm");
file.DataSet[DicomTags.SopInstanceUid] = attrib;

于 2011-02-16T20:34:09.767 回答