【发布时间】:2015-01-14 23:14:47
【问题描述】:
我正在尝试按照这里的教程进行操作:
http://www.rexcardan.com/2014/10/evil-dicom-basics/
并处理我的 DICOM 文件以显示图像。在本教程中,调用 DICOMObject.Open() 方法来处理文件路径。我的问题是智能感知不会为我解决这个问题。有人可以帮忙吗?
我下载了这个版本:
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,即 ~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 左右,这甚至不是我需要的一半。是否可以扩展缓冲区以接受我需要的所有内容?
【问题讨论】:
-
OutOfMemoryException出现在非常大的 DICOM 文件中,超过 0.6 GB,你的意思是?阅读更适合较小的文件? -
@AndersGustafsson - 这是正确的。如果我缩短长度参数以在 byte[] 中返回少于 0.6 GB 的字节,它似乎会继续并创建文件的其余部分。
-
听起来需要对代码进行一些改进。我建议您在 Evil DICOM Github 网站上发布问题。
-
@AndersGustafsson - 好吧,不熟悉 Github。我在哪里发布问题?
-
@AndersGustafsson - 感谢您的帮助。我打开了一个问题。我会将您的回答标记为正确,因为您在技术上确实解决了我原来的问题。感谢您提供的所有信息和帮助!
标签: dicom evil-dicom