我试图在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
}
我一直被困在看似微不足道的任务上。
答案 0 :(得分:2)
您对属性的使用感到困惑。 DicomFiledAttribute是一个.NET属性,可以放在类的成员上,以便使用DicomAttributeCollection中的值自动填充类,或者使用DicomAttribute Collection中的值自动填充类。即,考虑到这样的测试类:
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;