使用来自 github 的最新版本无法在 Evil Dicom 中找到打开方法

Can not find Open method in Evil Dicom using latest version from github

我正在尝试按照此处的教程进行操作:

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

并处理我的 DICOM 文件以显示图像。教程中调用DICOMObject.Open()方法处理文件路径。我的问题是 intellisense 没有为我挑选这个。任何人都可以协助解决这个问题吗?

我下载了这个版本:

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 returns 1919252000 bytesint 是 ~2GB。然后代码步骤为:

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 左右,这甚至不是我需要的一半。有没有扩展缓冲区来接受我需要的所有东西?

我没有看过视频,但据我所知你应该使用:

var dicomObj = DICOMObject.Read(filePath);

使用 Evil DICOM.

读取 DICOM 文件

请查看源代码here。我不确定,但最近的 API 更改可能解释了这种混淆。

抱歉回复晚了。

我的第一个想法是该文件实际上并未以 Implicit VR Little Endian 编码。如果缺少 DICOM 前导码和元数据,这是假定的默认传输语法。通常,在元数据(以 0002 开头的标签)中,会显示传输语法。在实际文件中(在 Windows 资源管理器中,而不是来自 ED),大小真的是 600+MB 吗?如果是这样,那是什么文件,所以我可以玩一个?

我向 DICOMObject class 添加了一个新方法,让您在读取失败时尝试另一种语法:

    /// <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,这些错误导致了我所提到的错误。当然,这可能真的是您 运行ning 内存不足,如果您确定传输语法正确,我想进一步深入研究。尝试 "Explicit VR Little Endian" 看看是否能解决您的问题。

试试这个

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