Получение «DicomTag не поддерживает значения» при попытке получить DicomDataset - PullRequest
0 голосов
/ 21 октября 2018

После обновления до fo-dicom 4.0 я начал получать DicomDataException: 'DicomTag doesn't support values' при попытке получить набор данных DicomDataset из файла DICOMDIR.

Код выглядит следующим образом:

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?

1 Ответ

0 голосов
/ 22 октября 2018

Наконец, после изучения проблем Gitter и GitHub от fo-dicom (и, как @ BenVoight упомянул также в комментариях), я обнаружил, что в 4.0 мы должны использовать GetSequence(DicomTag.IconImageSequence) вместо GetValue<DicomSequence>(DicomTag.IconImageSequence): при извлечении последовательностей будет использоваться метод GetValue.Было добавлено несколько других Get методов, таких как GetValueOrDefault, GetValues<T> вместо GetValue<T[]> и т. Д., Как видно из теста Dataset проекта .

Кроме того, в качестве следствия я также обнаружил еще одну несовместимость API в 4.0 относительно предыдущей версии (я опубликую ее здесь на случай, если кто-то обновится и потерян в изменениях): при работе с DicomImage мы не должны получать доступ к его .Dataset для получения значений, потому что это также устарело.Вместо этого мы должны сохранить ссылку на набор данных, из которого был создан DicomImage, чтобы получить значения тегов.

...