我想在C#中读取DICOM文件 . 我不想做任何花哨的事情,我现在只想知道如何读取元素,但首先我实际上想知道如何读取 Headers 以查看是否是有效的DICOM文件 .
它由二进制数据元素组成 . 前128个字节未使用(设置为零),后跟字符串'DICM' . 接下来是 Headers 信息,它被组织成组 .
A sample DICOM header
First 128 bytes: unused DICOM format.
Followed by the characters 'D','I','C','M'
Followed by extra header information such as:
0002,0000, File Meta Elements Groups Len: 132
0002,0001, File Meta Info Version: 256
0002,0010, Transfer Syntax UID: 1.2.840.10008.1.2.1.
0008,0000, Identifying Group Length: 152
0008,0060, Modality: MR
0008,0070, Manufacturer: MRIcro
在上面的示例中, Headers 被组织成组 . 组0002十六进制是文件元信息组,其包含3个元素:一个定义组长度,一个存储文件版本,它们存储传输语法 .
Questions
-
如何通过在128字节前导码后检查'D','I','C','M'字符来读取头文件并验证它是否是DICOM文件?
-
如何继续解析读取数据其他部分的文件?
6 回答
像这样的东西应该读取文件,它的基本并不处理所有情况,但它将是一个起点:
代码实际上没有尝试并考虑到编码数据的传输语法可以在组2元素之后改变,它也不会尝试对读入的实际值做任何事情 .
快速Google search带来了三个DICOM C#库:
openDICOM.NET
DICOM#
mdcm
以下是C#中的示例:http://www.codeproject.com/KB/graphics/dicomImageViewer.aspx
只是一些假的
如何通过检查128字节前导码后面的'D','I','C','M'字符来读取头文件并验证它是否是DICOM文件?
使用File.OpenRead以二进制文件打开
寻找位置128并将4个字节读入数组并再次比较DICM的byte []值 . 您可以使用ASCIIEncoding.GetBytes()
如何继续解析读取数据其他部分的文件?
使用您之前使用的FileStream对象句柄继续使用Read或ReadByte读取文件
使用与上面相同的方法进行比较 .
别忘了关闭并处理文件 .
你也可以这样使用 .
取自Evil Dicom库中的EvilDicom.Helper.DicomReader: