• 博客(10)
  • 收藏
  • 关注

原创 C#开发PACS医学影像处理系统(十):Dicom影像下载策略与算法

1.传输协议当我们PACS客户端接收到下载命令时需要根据dcm文件的url来下载,这里推荐使用http协议,支持大文件的断点续传。2.下载策略假设有10个序列,每个序列有100张图像,①广度优先:将任务池中的下载任务平均分配到10个序列,每个序列都同时下载,优点:是每个序列都能分布加载,当用户切换序列到单元格时不需要等待。缺点:当图像特别多的时候,比如CT薄层,序列切换图像滚动时显示不完整。②深度优先:将任务池中的下载任务根据先进先出原则分配到排序在前的序列,下载完一个后再开始下

2020-09-15 18:42:48 1430

原创 C#开发PACS医学影像处理系统(九):序列控件与拖拽

1.先看结构:创建WPF用户控件:YourTab创建WPF用户控件:YourItem创建选项卡时循环添加item,并设置序列缩略图到控件和异步下载的进度条,1个病人1个或多个Study检查,1个Study检查1个选项卡,并为每个选项卡添加自定义关闭按钮Tab自定义关闭按钮的XAML样式如下:<Style TargetType="{x:Type TabItem}"> <Setter Property="Templat...

2020-09-15 18:40:49 901

原创 C#开发PACS医学影像处理系统(八):单元格变换

再看结构,Viewer(影像控件)分为N个Cell(单元格),每个单元格分为N个Box(影像容器),当默认情况为2x2的行列时,结构如下图:其中,我们在WPF设计器中创建一个用户控件叫Viewer,使用Grid容器,默认2x2,再根据自己的业务需要创建用户控件Cell和用户控件Box,在Viewer中声明变量集合来记录Cell,同理,在Cell中声明变量集合来记录Box:

2020-09-15 18:39:18 1058

原创 C#开发PACS医学影像处理系统(七):读取影像Dicom信息

Dicom的文件信息一般是由设备信息、图像信息、病人信息等Tag标记组成的,用字节长度和偏移量来区分,具体数据结构可以自行去参考Dicom文件解析,内容比较多,这里不赘述。对于常用的Tag,可以简单的理解为两层结构,第一层是组,第二层是组包含的元素,每个组号和元素号用2个字节表示(Uint16),例如常用的组有 0002组描述设备通讯,0008组描述特征参数,0010组描述患者信息,0028组描述图像信息参数,例如 0010组里面又包含病人姓名、年龄、性别等。同样的,按照上一..

2020-09-14 17:11:05 3662 2

原创 C#开发PACS医学影像处理系统(六):加载Dicom影像

对于一款软件的扩展性和维护性来说,上层业务逻辑和UI表现一定要自己开发才有控制权,否则项目上线之后容易被掣肘,而底层图像处理,我们不需要重复造轮子,这里推荐使用fo-dicom,同样基于Dicom3.0协议。根据以上原则,后台影像处理完成之后,即可使用自己开发的控件来呈现。1.先准备好自己的dcm文件,可以是单个文件或序列文件或DicomDir文件。2.在VS编辑器里打开NUGET搜索fo-dicoman安装即可。3.使用fo-dicom读取影像。 //...

2020-09-14 17:08:25 3630 2

原创 C#开发PACS医学影像处理系统(五):查询病人信息列表

一般情况下,PACS的影像加载是由外部命令发起的,如RIS客户端或网页参数等,但为保证系统完整性和健壮性,也需要在PACS客户端给用户一个查询界面来加载Dicom影像。界面分为两部分,上半部是各种查询条件,使用常见控件即可,不赘述。下半部分是一个WPF中的DataGrid表格控件,通过服务端返回的JSON或XML数据生成列表,双击某一行时进行下载和装载影像操作,后续操作请参考本系列文章关于下载策略和Dicom影像加载。需要注意的是,在DataGird中需要添加自定义列来生..

2020-09-14 17:03:47 1398

原创 C#开发PACS医学影像处理系统(四):界面布局之状态栏

状态栏一般用于显示系统状态,例如影像数量统计、CPU和内存使用情况、全屏时显示日期等,同样也是采用WPF控件的Grid作为容器,布局使用 VerticalAlignment="Bottom"普通配置的Win7和Win10一般内存使用不超过200M,CPU不超过5,除了一些老医院还在用XP系统,实在太烂可以放宽要求,但要保证软件的运行速度和控制资源占用。其中CPU、内存、系统时间监控代码如下:/// <summary> /// 获取程序运行...

2020-09-14 17:02:42 755

原创 C#开发PACS医学影像处理系统(三):界面布局之工具栏

工具栏布局采用WPF中Grid作为容器,按钮采用自定义样式和图标,并采用Separator分割线:XAML设计器代码:其中Style="{StaticResource ButtonStyle}" 按钮样式可以根据自身UI风格来使用自定义样式<Button x:Name="BtnRotate" Margin="5,0,0,0" Style="{StaticResource ButtonStyle}" HorizontalAlignment="Left" Vertic...

2020-09-14 17:00:35 1191

原创 C#开发PACS医学影像处理系统(二):界面布局之菜单栏

在菜单栏布局上,为了使用自定义窗体样式和按钮,我们需要先将窗体设置为无边框,然后添加一个Grid作为菜单栏并置顶,VerticalAlignment="Top"logo图片和标题是Image和TextBlock控件,菜单是Menu控件,系统按钮是Button控件。其中需要注意的是,一般医院影像科或放射科阅片采用的是双屏,横屏+竖屏,而PACS一般是在竖屏上显示,当最大化窗体时,如果不进行特殊处理,则会在横屏上最大化,而我们的要求是在竖屏上最大化,所以需要监听最大化按钮的点击事件,并.

2020-09-14 16:58:04 1716

原创 C#开发PACS医学影像处理系统(一):开发背景和功能预览

本系列文章将从以下模块和大家分享和讨论使用C#开发医学软件PACS和RIS系统,国内相关资料比较少,也借此机会丰富一下医学软件开发生态,讨论技术难点,希望大家互相帮助共同进步。

2020-09-10 17:30:32 3885 4

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除