0

dicom ファイルから読み取ることができるクラスを作成しています。これは基本的に、多くのオブジェクトで満たされたバイナリ ファイルです。これができるしっかりとしたクラスを作りたいです。というわけで以下のデザインにしました。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace Medicom
{
    public class DDocument : IEnumerable<DDataElement>
    {
        /// <summary>
        /// Creates a new DDocument from a file.
        /// </summary>
        /// <param name="path">The path of the file to load </param>
        /// <returns>An DDocument that contains the Dicom information from the file</returns>
        public static DDocument Load(string path)
        {
            return DDocument.Load(new FileStream(path, FileMode.Open)); 
        }

        /// <summary>
        /// Creates a new XDocument instance by using the specified stream.
        /// </summary>
        /// <param name="stream">The stream that contains the Dicom information.</param>
        /// <returns>An DDocument that contains the Dicom information from the stream.</returns>
        public static DDocument Load(Stream stream)
        {
            //Logic here to read the whole stream and List<DDataElement> Data with all the data
        }

        /// <summary>
        /// Gets or sets a list with MetaInformation containing DDataElements
        /// </summary>
        public List<DDataElement> Data
        {
            get;
            set;
        }

        /// <summary>
        /// Returns an enumerator that can be used to iterate through the DDocument
        /// </summary>
        /// <returns>An IEnumerator that can be used to iterate through the DDocument</returns>
        public IEnumerator<DDataElement> GetEnumerator()
        {
            foreach (DDataElement dataElement in Data)
            {
                yield return dataElement;
            }
        }
    }
}

私はあなたがそれについてどう思うか知りたかった. このクラスで変更することはありますか?

4

4 に答える 4

3

2つのこと:

まず、使い終わったら閉じる必要がありFileStreamます。

public static DDocument Load(string path)
{
    using(FileStream fs = new FileStream(path, FileMode.Open)) {
        return DDocument.Load(fs); 
    }
}

第二に、 にはListすでに完全に良いIEnumerable! あなたはそれを使うべきです!

public IEnumerator<DDataElement> GetEnumerator()
{
    return (IEnumerator<DDataElement>)Data.GetEnumerator();
}
于 2010-12-20T20:04:11.297 に答える
2

推奨事項に関しては、クラス名をより意味のあるものにします。DicomDocument と DicomElement はより説明的であり、あなたのコードで作業している他の人は誰でもすぐにそれらが何であるかを知ることができます (特に、DICOM 構造に精通している場合)。

于 2010-12-20T20:04:12.690 に答える
1

このクラスのコンシューマーがクラス内のデータにアクセスする方法について、さらにいくつか質問します。

  • リスト内の DicomDataElements へのランダム アクセスが必要ですか? それとも、単にリストを列挙するだけですか?
  • ランダム アクセスを許可する場合、正しい DicomDataElement のリストをどのように検索しますか?
  • ユーザーがリストに DicomDataElements を挿入または追加できるようにしますか?
  • ファイルを再びディスクに書き戻すことをサポートするつもりですか? つまり、タグを正しい順序で再構築する必要がありますか?

私が理解しているのは、おそらく DicomDataElements を DicomDocument 内に保存するためのより堅牢な方法が必要であり、IEnumerable 以外の方法でタグにアクセスする必要があるということです。DICOM ファイルの場合、SortedDictionary はおそらく DICOM データ要素のリストを保存する最良の方法です。DICOM タグによってそれらを適切な順序に保つことができ、タグへのランダム アクセスを提供します。また、タグへのランダム アクセスを提供するクラスのインデクサーも必要になるでしょう。

于 2010-12-22T14:38:15.540 に答える
0

dcm4che2のようなオープン ソースの Java ベースの DICOM 実装が多数あります。それらの実装を移植することを検討しましたか?

于 2010-12-20T20:01:52.643 に答える