2

現在、DICOMファイルを処理できる小さなデスクトップアプリケーションを構築しています。私はC#と.NETでコーディングしており、ClearCanvasライブラリを使用しています。私がしなければならないことの1つは、すべてのシーケンスを含むファイルの全内容を表示できるようにすることです。ただし、シーケンスは再帰的に実行されるため、各シーケンスの内部にさらに多くのシーケンスを含めることができます。現在、私のコードは最初の2つのレベルにアクセスできますが、n番目のレベルのシーケンスにアクセスできる必要があるため、これをテスターとして実行しています。だから私はどういうわけかこれを自動化する必要があります。これは、最初の2つのレベルでの私のコードの現在の外観です。

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

任意のヘルプ(コードサンプル)をいただければ幸いです。

ありがとう!

4

1 に答える 1

3

コレクション内にある可能性のある Sequence 要素を再帰的にステップ実行するなど、属性コレクション内のタグをトラバースする単純な再帰ルーチンを次に示します。

    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 は Enumerable であるため、 foreach ループを使用してコレクション内のすべての属性を調べることができます。属性自体は SortedDictionary に格納されるため、列挙されたときにタグの昇順になります。

ClearCanvas ライブラリのソース コードをダウンロードした場合は、DicomAttributeCollection クラスの一部である実際の Dump() メソッドも確認できることに注意してください。コレクションをトラバースし、コレクション内のすべてのタグを StringBuilder インスタンスに書き込みます。

于 2012-05-29T18:45:47.733 に答える