cum să accesați tot conținutul unei secvențe DICOM utilizând clanul clar

În prezent, construiesc o aplicație de tip desktop care poate gestiona fișierele DICOM. Sunt codificare în C# și .NET și folosind biblioteca ClearCanvas. Un lucru pe care trebuie să-l fac este să pot afișa întregul conținut al fișierului, inclusiv toate secvențele. Dar secvențele se fac într-un mod recursiv, astfel încât fiecare secvență poate avea mai multe secvențe în interiorul ei. În acest moment, codul meu poate accesa primele două nivele, dar fac doar acest lucru ca tester, deoarece trebuie să pot accesa nivelul n de secvențe. Așa că trebuie să automatizez asta. Așa arată codul meu pentru primele două nivele.

DicomSequenceItem[] seq = attrs2[i].Values as DicomSequenceItem[];
if (seq != null)
{
for (int j = 0; j < seq.Length; j++)
{
      for (int n = 0; n < seq[j].Count; n++)
      {
           DicomSequenceItem[] level2 = seq[j].ElementAt(n).Values as DicomSequenceItem[];
           if(seq[j].ElementAt(n).GetValueType().ToString().Equals("ClearCanvas.Dicom.DicomSequenceItem"))
           {               
                for (int k = 0; k < level2.Length; k++)
                {
                     for (int l = 0; l < level2[k].Count; l++)
                     {
                          text += "\t\t" + level2[k].ElementAt(l) + "\r\n";
                     }
                }
            }
            else
            {
                text += "\t" + seq[j].ElementAt(n) + "\r\n";
            }
       }
}
}

Orice ajutor (mostre de cod) ar fi foarte apreciat.

Mulțumiri!

0

1 răspunsuri

Iată o rutină recursivă simplă pentru a traversa etichetele dintr-o colecție de atribute, inclusiv trecerea recursivă prin orice elemente de secvență care pot fi în colecție:

    void Dump(DicomAttributeCollection collection, string prefix, StringBuilder sb)
    {     
        foreach (DicomAttribute attribute in collection)
        {
            var attribSQ = attribute as DicomAttributeSQ;
            if (attribSQ != null)
            {                    
                for (int i=0; i< attribSQ.Count; i++) 
                {
                    sb.AppendLine(prefix + "SQ Item: " + attribSQ.ToString());

                    DicomSequenceItem sqItem = attribSQ[i];
                    Dump(sqItem, prefix + "\t", sb);
                }
            }
            else
            {
                sb.AppendLine(prefix + attribute.ToString());
            }
        }
    }

DicomAttributeCollection este enumerabil, astfel încât să puteți folosi doar o buclă foreach pentru a trece prin toate atributele din colecție. Atributele în sine sunt stocate într-un SortedDictionary, astfel încât acestea vor fi, de asemenea, în ordinea ascendentă a etichetelor atunci când sunt enumerate.

Rețineți că, dacă ați descărcat codul sursă pentru bibliotecile ClearCanvas, ați putea, de asemenea, să vă uitați la metoda reală Dump() care face parte din clasa DicomAttributeCollection. Acesta traversează printr-o colecție și scrie la o instanță StringBuilder toate etichetele din colecție.

0
adăugat
Acest lucru a funcționat perfect! Multumesc foarte mult pentru ajutorul tau! :)
adăugat autor Pompey, sursa