DICOM:基于fo-dicom的简易DICOM Viewer

背景

正如段子所言,“春节”副本已通关,您的属性有如下变化:力量 0,智力 0,敏捷 0,体重 15,金钱-999。您已被传送回出发点,系统时间从“初八”切换到“周四”,请继续进行主线任务……虽然公司春节多放了几天假,原本以为上班还早的我突然发现原来这个月是2月啊,只有28天,怎奈假期配置测试的DCM4CHEE系列文章还未整理完成,既然到了月底了,就凑一篇水文吧,把春节帮网友写的一个基于fo-dicom的DICOM Viewer贴出来,代码拙劣,仅供参考。
PS:DCM4CHEE是一种基于JAVA的开源DICOM框架,预告一下后续专栏文章会对其进行相关介绍,如果有可能会单独开一个专栏,敬请期待。

DICOM Viewer设计

这里基于fo-dicom开源库设计一个简单的DICOM Viewer,相较于大家所熟知的Sante DICOM Editor、ImageJ、RadiAnt等DICOM阅读器,本文只是简单的提取DICOM文件中的基本信息和图像。目前仅支持常规和JPEG无损压缩(即,JPEG LossLess,Non-Hierachical(Process 14))两种类型图像
本DICOM Viewer采用C#语言开发,程序主界面如下:
这里写图片描述
从上图可以看出主界面由三部分构成,菜单栏、DICOM信息列表和DICOM图像显示。各部分的功能简单介绍如下:
1)菜单栏
这里写图片描述
菜单栏包括‘File’‘Help’两个选项。‘File’中包含‘Open’‘Close’两个子项,单击‘Open’会打开“文件打开”对话框,选择要打开的DCM文件( 目前打开对话框中是通过文件扩展名来识别文件的,因此需要明确将DCM文件扩展名设置为DCM或dcm才可以导入 );单击‘Close’选项相当如复原操作,会清除界面中显示的DCM文件的信息列表和图像,返回界面初始状态;按照惯例‘Help’中的‘About’就是一个简单的软件介绍。
2)信息列表
‘信息列表’用于显示DICOM文件中的Patient、Study、Series和Image等相关信息,包含GroupTagElementTagValue三部分
3)图像显示
‘图像显示’区域默认是一副灰色白字背景图,界面初始化以及单击‘File’下的‘Close’按钮都会显示该默认背景图。

DICOM Viewer源码

直接给出软件的核心部分源码,通过fo-dicom开源库来导入和提取DICOM图像的信息,然后利用ListView和Bitmap分别来实现信息的显示和图像绘制。核心函数主要如下:
1)文件导入
直接使用fo-dicom开源库中DicomFile类的静态方法Open完成DCM文件导入,代码如下:

            try
            {
                DicomFile dcmFile = DicomFile.Open(dcmFileName);
                //Load and Show the meta info of the DCM file
                LoadAndShowDCMMetaInfo(dcmFile);
                listView1.Update();
                //Drawing the image in your DCM file to screen.
                DrawingDCMData2Screen(dcmFile);
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }

2)信息提取及显示
利用DicomDataset的模板方法Get<>()分别提取DCM文件中的相关信息,通过构造ListViewItem添加到ListView中进行显示,具体代码如下:

     /// <summary>
        /// Load all of the Elements in the DCM Meta 
        /// </summary>
        /// <param name="dcm">the DICOM file</param>
        private void LoadAndShowDCMMetaInfo(DicomFile dcm)
        {
            //Show the message of DCM file to the listview in the dialog.
            DicomDataset dcmDataset = dcm.Dataset;
            DicomFileMetaInformation dcmMetaInfo = dcm.FileMetaInfo;
            listView1.BeginUpdate();
            //DICOM MetaInfo
            if (!String.IsNullOrWhiteSpace(dcmMetaInfo.MediaStorageSOPClassUID==null?"":dcmMetaInfo.MediaStorageSOPClassUID.ToString()))
            {
                //Insert the ImplementationClassUID
                ListViewItem newItem = new ListViewItem("0002");
                newItem.SubItems.Add("0002");
                newItem.SubItems.Add(dcmMetaInfo.MediaStorageSOPClassUID.ToString());
                listView1.Items.Add(newItem);
            }
            if (!String.IsNullOrWhiteSpace(dcmMetaInfo.MediaStorageSOPInstanceUID==null?"":dcmMetaInfo.MediaStorageSOPInstanceUID.ToString()))
            {
                //Insert the ImplementationClassUID
                ListViewItem newItem = new ListViewItem("0002");
          
  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zssure

己欲立而立人,己欲达而达人

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值