使用来自 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 bytes
的 int
是 ~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);
我正在尝试按照此处的教程进行操作:
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 bytes
的 int
是 ~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);