首页 文章

使用gethub中的最新版本在Evil Dicom中找不到Open方法

提问于
浏览
0

我想在这里按照教程:

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

并处理我的DICOM文件以显示图像 . 在本教程中,将调用DICOMObject.Open()方法来处理文件路径 . 我的问题是,intelisense不会为我挑选这个 . 有人能帮忙吗?

我下载了这个版本:

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

EDIT

使用以下内容:

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

在单步执行_1739373的代码时,到目前为止,一切似乎都正常工作:

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 返回 int1919252000 bytes ,大约是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 左右,这甚至不是我需要的一半 . 有没有扩大缓冲区接受我需要的所有东西?

3 回答

  • 0

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

    var dicomObj = DICOMObject.Read(filePath);
    

    使用Evil DICOM读取DICOM文件 .

    请参阅源代码here . 我不确定,但可能最近的API更改解释了这种混乱 .

  • 1

    回复晚了非常抱歉 .

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

    我在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”,看看是否能解决您的问题 .

  • 0

    试试这个

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

相关问题