尝试获取DicomDataset时获取“ DicomTag不支持值”

时间:2018-10-21 00:23:20

标签: c# dicom fo-dicom

升级到fo-dicom 4.0后,尝试从DICOMDIR文件获取DicomDataset时,我开始得到DicomDataException: 'DicomTag doesn't support values'

代码如下:

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。 / p>

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

1 个答案:

答案 0 :(得分:3)

最后,在深入研究fo-dicom的Gitter和GitHub问题(以及注释中的@BenVoight mentioned)之后,我发现在4.0中,我们应该使用GetSequence(DicomTag.IconImageSequence)而不是GetValue<DicomSequence>(DicomTag.IconImageSequence) :检索序列时,将使用GetValue抛出。在项目的Dataset test中可以看到,添加了其他几种Get方法,例如GetValueOrDefaultGetValues<T>而不是GetValue<T[]>等。 / p>

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