Не удается найти метод Open в Evil Dicom, используя последнюю версию из gethub

Я пытаюсь следовать этому уроку:

http://www.rexcardan.com/2014/10/evil-dicom-basics/

и обработать мой файл DICOM, чтобы показать изображение. В этом учебном пособии метод DICOMObject.Open() вызывается для обработки пути к файлу. Моя проблема в том, что intelisense не подхватил это для меня. Кто-нибудь сможет помочь с этим?

Я скачал эту версию:

https://github.com/rexcardan/Evil-DICOM

РЕДАКТИРОВАТЬ

Используя следующее:

var dcm = DICOMObject.Read(@"C:\file\path\filename.dcm");

Проходя по коду DICOMObject до этого момента все вроде бы работало нормально:

public static IDICOMElement ReadElementImplicitLittleEndian(DICOMBinaryReader dr)
{
    var tag = TagReader.ReadLittleEndian(dr);
    var vr = TagDictionary.GetVRFromTag(tag);
    int length = LengthReader.ReadLittleEndian(VR.Null, dr);
    var data = DataReader.ReadLittleEndian(length, dr, TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN);
    var el = ElementFactory.GenerateElement(tag, vr, data, TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN);
    return el;
}

Когда код попадает в:

int length = LengthReader.ReadLittleEndian(VR.Null, dr);

length возвращает int из 1919252000 bytes что составляет ~2 ГБ. Затем код выполняет следующие действия:

var data = DataReader.ReadLittleEndian(length, dr, TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN);

Который проверяет, есть ли байты для чтения (которые есть) и переходит к прочитанным байтам здесь:

public byte[] ReadBytes(int count)
{
    byte[] buffer = new byte[count];
    _binaryReader.Read(buffer, 0, count);
    return buffer;
}

byte[] buffer = new byte[count]; где фактическое исключение происходит в коде. Я проверил количество байтов, которые он может обработать, и кажется, что это около .6 - .7 GB что даже не половина того, что мне нужно. Есть ли возможность расширить буфер, чтобы принять все, что мне нужно?

3 ответа

Решение

Я не смотрел видео, но насколько я знаю, вы должны использовать:

var dicomObj = DICOMObject.Read(filePath);

читать файл DICOM, используя Evil DICOM.

Пожалуйста, посмотрите исходный код здесь. Я не уверен, но, возможно, недавно произошло изменение API, которое объясняет эту путаницу.

Попробуй это

var bdcm= File.ReadAllBytes(@"AbsolutePath");
var dcm = DICOMObject.Read(bdcm);

Извините за поздний ответ.

Сначала я подумал, что файл на самом деле не закодирован в Implicit VR Little Endian. Это синтаксис передачи по умолчанию, который предполагается, если преамбула DICOM и метаданные отсутствуют. Обычно в метаданных (теги, начинающиеся с 0002) раскрывается синтаксис передачи. На самом файле (в проводнике Windows, а не из ED), действительно ли размер 600+ МБ? Если да, то что это за файл, чтобы я мог поиграть с ним?

Я добавил новый метод в класс DICOMObject, который позволяет вам попробовать другой синтаксис при ошибке чтения:

    /// <summary>
    ///     Reads a DICOM file from a path
    /// </summary>
    /// <param name="filePath">the path to the file</param>
    /// <param name="trySyntax">the transfer syntax to use in case there is no metadata explicitly included</param>
    /// <returns></returns>
    public static DICOMObject Read(string filePath,
        TransferSyntax trySyntax = TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN)
    {
        return DICOMFileReader.Read(filePath, trySyntax);
    }

Я столкнулся с некоторыми плохо отформатированными DICOM в своем опыте, которые вызвали у меня ошибки, подобные той, о которой вы упоминаете. Конечно, действительно может быть, что у вас не хватает памяти, в которую я хотел бы углубиться, если вы уверены, что синтаксис передачи правильный. Попробуйте "Explicit VR Little Endian" и посмотрите, решит ли это вашу проблему.

Другие вопросы по тегам