Dicom的文件信息通常是由设备信息、图像信息、病人信息等Tag标记组成的,用字节长度和偏移量来区分,html
具体数据结构能够自行去参考Dicom文件解析,内容比较多,这里不赘述。算法
对于经常使用的Tag,能够简单的理解为两层结构,第一层是组,第二层是组包含的元素,每一个组号和元素号用2个字节表示(Uint16),数据结构
例如经常使用的组有 0002组描述设备通信,0008组描述特征参数,0010组描述患者信息,0028组描述图像信息参数,架构
例如 0010组里面又包含病人姓名、年龄、性别等。并发
一样的,按照上一篇文章,仍是用fo-dicom来解析Dicom信息,能够直接经过DicomTag的类型感知来获取你想要的Tag值。函数
//实例化文件处理对象并打开文件 DicomFile dicomFile = DicomFile.Open(@"C:\101\1.dcm"); //获取dicom图像对象 DicomImage dicomImage = new DicomImage(dicomFile.Dataset); //接收变量 string [] name; //读取病人姓名 dicomFile.Dataset.TryGetValues<string>(DicomTag.PatientName, out name); if (name != null) { Console.WriteLine(name[0]); }
有时候咱们并不知道某个Tag值对应的名称叫什么,例如 0x0010 0x0020, 因此去DicomTag 类型里面搜索将是一件很痛苦的事情,高并发
这时候须要本身封装一个Tag值操做类,重载建立标签函数,不只支持uint16,还支持string字符串的组号和元素带入并查询工具
/// <summary> /// 标签管理器 /// </summary> public static class TagManager { /// <summary> /// 设置一个标签 /// </summary> /// <param name="alignment">标签方位</param> /// <param name="tagRow">标签所在行数(四个角1到10,上下左右只支持一行)</param> /// <param name="dicomTag">标签值</param> /// <param name="tagFont">标签样式</param> public static TagHandler CreateTag(TagAlignment alignment, int tagRow, DicomTag dicomTag, ImageTagFont tagFont = null) { TagHandler tag = new TagHandler { Alignment = alignment, DicomTag = dicomTag, TagRow = tagRow, TagType = TagType.TagValue, TagFont = tagFont }; return tag; } /// <summary> /// 设置一个标签 /// </summary> /// <param name="alignment">标签方位</param> /// <param name="tagRow">标签所在行数(四个角1到10,上下左右只支持一行)</param> /// <param name="group">标签组</param> /// <param name="element">标签元素</param> /// <param name="tagFont">标签样式</param> public static TagHandler CreateTag(TagAlignment alignment, int tagRow, ushort group, ushort element, ImageTagFont tagFont = null) { TagHandler tag = new TagHandler { Alignment = alignment, Group = group, Element = element, TagRow = tagRow, TagType = TagType.TagValue, TagFont = tagFont }; return tag; } /// <summary> /// 设置一个标签 /// </summary> /// <param name="alignment">标签方位</param> /// <param name="tagRow">标签所在行数(四个角1到10,上下左右只支持一行)</param> /// <param name="groupHexStr">标签组(16进制字符串)</param> /// <param name="elementHexStr">标签元素(16进制字符串)</param> /// <param name="tagFont">标签样式</param> public static TagHandler CreateTag(TagAlignment alignment, int tagRow, string groupHexStr, string elementHexStr, ImageTagFont tagFont = null) { TagHandler tag = new TagHandler { Alignment = alignment, GroupHexStr = groupHexStr, ElementHexStr = elementHexStr, TagRow = tagRow, TagType = TagType.TagValue, TagFont = tagFont }; return tag; } /// <summary> /// 设置一个标签 /// </summary> /// <param name="alignment">标签方位</param> /// <param name="tagRow">标签所在行数(四个角1到10,上下左右只支持一行)</param> /// <param name="tagText">标签内容</param> /// <param name="tagFont">标签样式</param> public static TagHandler CreateTag(TagAlignment alignment, int tagRow, string tagText, ImageTagFont tagFont = null) { TagHandler tag = new TagHandler { Alignment = alignment, TagText = tagText, TagRow = tagRow, TagType = TagType.UserData, TagFont = tagFont }; return tag; } /// <summary> /// 设置一个标签 /// </summary> /// <param name="alignment">标签方位</param> /// <param name="tagRow">标签所在行数(四个角1到10,上下左右只支持一行)</param> /// <param name="tagType">标签类型</param> /// <param name="tagFont">标签样式</param> public static TagHandler CreateTag(TagAlignment alignment, int tagRow, TagType tagType, ImageTagFont tagFont = null) { TagHandler tag = new TagHandler { Alignment = alignment, TagRow = tagRow, TagType = tagType, TagFont = tagFont }; return tag; } }
一样,咱们也能够设置自定义样式,例如颜色、字体、字号、透明度、自定义文本内容等等,布局
对于不一样的挂片类型,配合对应的挂片协议便可自动显示医院阅片或胶片打印所须要的Tag。字体
TagManager.CreateTag(TagAlignment.RightBottom, 1, "By ET-Dicom", new ImageTagFont { TagColor = Color.Blue, TagSize = 18 })
这样单元格的边角标记就完成了,在设计器中,Tag控件用Textblock就能够了。
配合挂片协议后最终呈现效果:
C#开发PACS、RIS医学影像处理系统
目录整理:
(一)PACS客户端:
C#开发PACS医学影像处理系统(七):读取影像Dicom信息
C#开发PACS医学影像处理系统(十):Dicom影像下载策略与算法
C#开发PACS医学影像处理系统(十一):Dicom影像挂片协议
C#开发PACS医学影像处理系统(十二):绘图处理之图形标记
C#开发PACS医学影像处理系统(十三):绘图处理之病灶测量
C#开发PACS医学影像处理系统(十四):处理Dicom影像窗宽窗位
C#开发PACS医学影像处理系统(十五):Dicom影像交叉定位线算法
C#开发PACS医学影像处理系统(十六):2D处理之影像平移和缩放
C#开发PACS医学影像处理系统(十七):2D处理之影像旋转和翻转
C#开发PACS医学影像处理系统(十八):Dicom使用LUT色彩加强和反色
C#开发PACS医学影像处理系统(十九):Dicom影像放大镜
(二)PACS三维:MRP、MIP、VR
C#开发PACS医学影像三维重建(一):使用VTK重建3D影像
(三)PACS网页端:开发Web版本的PACS
C#开发Web端PACS(一):基于PACS客户端思想重写Web端
(四)PACS移动端:开发基于HTML5移动端版本的PACS
C#开发移动端PACS(一):使用HTML5和CSS3开发PACS手机端页面
C#开发移动端PACS(二):使用 .Net MVC 开发手机端PACS服务端
(五)PACS服务端:
C#开发PACS医学影像处理系统服务端(一):医疗设备的链接与收图
C#开发PACS医学影像处理系统服务端(二):高并发架构
(六)PACS与RIS系统的通讯与集成
在RIS系统中调起PACS并打开Dicom影像
(七)云PACS与远程会诊
C#开发PACS医学影像处理系统之云PACS(区域PACS)(一):架构概述
C#开发PACS医学影像处理系统之云PACS(区域PACS)(二):远程会诊与双向转诊
(八)科幻级视频特效:使用Adobe After Effects 制做PACS影像处理系统宣传视频
QQ:1850969244 近10年开发经验,主攻C#、ASP MVC,HTML5, B/S C/S 皆可,目前研究医疗领域医学影像相关技术, 任何技术问题欢迎加QQ交流。 |