2

升级到 fo-dicom 4.0 后,我DicomDataException: 'DicomTag doesn't support values'在尝试从 DICOMDIR 文件中获取 DicomDataset 时开始出现问题。

代码如下:

var dicomDirectory = await DicomDirectory.OpenAsync(dicomdirPath);
foreach (var patientRecord in dicomDirectory.RootDirectoryRecordCollection)
{
    foreach (var studyRecord in patientRecord.LowerLevelDirectoryRecordCollection)
    {
        foreach (var seriesRecord in studyRecord.LowerLevelDirectoryRecordCollection)
        {
            foreach (var imageRecord in seriesRecord.LowerLevelDirectoryRecordCollection)
            {
                //this is the problematic line
                var dicomDataset = imageRecord.GetValue<DicomSequence>(DicomTag.IconImageSequence, 0).Items.First();
                //more stuff
            }
        }
    }
}

使用以前的版本(3.?)我正在做var dicomImage = imageRecord.Get<DicomSequence>(DicomTag.IconImageSequence).Items.First();并且它工作得很好,但是升级后我收到了一个过时的警告,所以我将它更改为推荐的方法,即 GetValue。

如何使用当前版本的 fo-dicom 获取数据集?

4

1 回答 1

4

最后,在挖掘了 fo-dicom 的 Gitter 和 GitHub 问题(以及评论中提到的@BenVoight)之后,我发现在 4.0 中我们应该使用GetSequence(DicomTag.IconImageSequence)而不是GetValue<DicomSequence>(DicomTag.IconImageSequence): 检索序列时,使用 GetValue 会抛出。添加了其他几种Get方法,例如GetValueOrDefault,GetValues<T>而不是 等GetValue<T[]>,如项目的Dataset test中所示。

此外,作为推论,我还在 4.0 中发现了与以前版本有关的另一个 API 不兼容(我会在这里发布,以防有​​人升级并迷失在更改中):处理 DicomImage 时,我们不应该访问它.Dataset来检索值,因为它也已被弃用。相反,我们应该存储对创建 DicomImage 的 Dataset 的引用,以便检索标记值。

于 2018-10-22T00:32:17.943 回答