2011-02-16 78 views
3

即時通訊嘗試添加一個新的標籤到我的ClearCanvas中的DicomFile.DataSet。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 
} 

我一直停留在什麼似乎是一個簡單的任務。

回答

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實例(如果尚不存在的話)。因此,要填入值,你可以做soemthing這樣的:

 


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; 
 
+0

「file.DataSet [DicomTags。 SopInstanceUid] .SetStringValue( 「1.1.1」);」工作正常,但當我嘗試類似於::「file.DataSet [1610690560] .SetStringValue(」1.1.1「);」它會拋出錯誤(無效標記:60013000)。也是我這樣做的原因是因爲我想添加一個新的覆蓋(60xx)。我注意到沒有像「SetByteArrayValue」這樣的方法可以用來設置新的Overlay數據,這是一個字節數組。 Tnx的答案btw。 – zezba9000 2011-02-16 22:53:37