2011-02-16 4 views
3

en essayant d'ajouter un nouveau tag à mon DicomFile.DataSet dans ClearCanvas.ClearCanvas DicomFile.DataSet - Comment ajouter un nouveau Tag?

Je remarque qu'il existe la méthode "DicomFile.DataSet.RemoveAttribute" mais pas de méthode "AddAtribute". Donc, j'ai regardé la méthode "LoadDicomFields" & "SaveDicomFields" mais jusqu'à présent, ne peut pas sembler les faire fonctionner. J'ai essayé de passer un "DicomFieldAttribute" à ces méthodes, mais en vain.

Qu'est-ce qui me manque ici? Ou que dois-je faire pour ajouter une nouvelle balise au 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 
} 

Ou j'ai essayé cela aussi ::

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

Ive été bloqué sur ce qui semble être une tâche triviale.

Répondre

2

Vous confondez un peu l'utilisation des attributs. DicomFiledAttribute est un attribut .NET qui peut être placé sur les membres d'une classe afin que la classe soit automatiquement remplie avec les valeurs d'un DicomAttributeCollection ou pour que la classe soit automatiquement remplie avec les valeurs de la collection DicomAttribute. -À-dire, étant donné une classe de test comme celui-ci:

 

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; 
} 
 

Vous pouvez remplir une instance de la classe comme ceci:

 

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 
 

Si vous êtes intéressé à juste peuplant quelques balises DICOM, le DicomAttributeCollection a une indexeur dedans. L'indexeur crée automatiquement une instance DicomAttribute si elle n'existe pas déjà, pour l'étiquette demandée via l'indexeur. Donc, pour remplir une valeur, vous pouvez faire soemthing comme ceci:

 


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

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

Si vous voulez créer le DicomAttribute vous, vous pouvez faire quelque chose comme ceci:

 

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"); " Fonctionne bien, mais quand j'essaie quelque chose comme :: "file.DataSet [1610690560] .SetStringValue (" 1.1.1 ");" il jette l'erreur (balise invalide: 60013000). Aussi la raison pour laquelle je fais cela est parce que je veux ajouter une nouvelle superposition (60xx). Je remarque qu'il n'y a aucune méthode comme "SetByteArrayValue" que je peux utiliser pour définir les nouvelles données de recouvrement, qui est un tableau d'octets. Tnx pour la réponse btw. – zezba9000

+0

60013000 est considéré comme un tag privé, car c'est un groupe impair. Il existe une forme différente de l'indexeur qui utilise un objet DicomTag. Vous devrez peut-être créer un objet DicomTag pour l'étiquette que vous voulez et l'utiliser pour accéder à l'indexeur. –

Questions connexes