1.传输协议html
当咱们PACS客户端接收到下载命令时须要根据dcm文件的url来下载,这里推荐使用http协议,支持大文件的断点续传。算法
2.下载策略服务器
假设有10个序列,每一个序列有100张图像,微信
①广度优先:将任务池中的下载任务平均分配到10个序列,每一个序列都同时下载,网络
优势:是每一个序列都能分布加载,当用户切换序列到单元格时不须要等待。架构
缺点:当图像特别多的时候,好比CT薄层,序列切换图像滚动时显示不完整。并发
②深度优先:将任务池中的下载任务根据先进先出原则分配到排序在前的序列,下载完一个后再开始下一个。机器学习
优势和缺点刚好和广度优先策略相反。高并发
那么鱼和熊掌能不能兼得呢?能。工具
默认使用广度优先,当用户点击某个序列时,通常认为是用户优先想看的序列,
则为该序列加速,该序列视为特殊加速序列,下载任务排满,其余序列仍然是平均分配。
看效果:
最后附上http下载的关键代码:
/// <summary> /// 下载文件 /// </summary> /// <param name="url">下载地址</param> /// <param name="path">本地路径</param> public static bool DownLoadFile(string url, string path) {bool flag = false; long SPosition = 0; FileStream FStream = null; Stream myStream = null; try { //判断要下载的文件是否存在 if (File.Exists(path)) { //打开上次下载的文件 FStream = File.OpenWrite(path); //获取已经下载的长度 SPosition = FStream.Length; long serverFileLength = GetHttpLength(url); if (serverFileLength == -1) { //本地文件 return true; } if (serverFileLength == 0) { return false; } if (SPosition == serverFileLength) { //文件是完整的,直接结束下载任务 return true; } if (SPosition > serverFileLength) { SPosition = 0; FStream.Seek(0, SeekOrigin.Current); } else { FStream.Seek(SPosition, SeekOrigin.Current); } } else { FStream = new FileStream(path, FileMode.Create); SPosition = 0; } //打开网络链接 HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(url); if (SPosition > 0) { //设置Range值 myRequest.AddRange(SPosition); } //向服务器请求,得到服务器的回应数据流 myStream = myRequest.GetResponse().GetResponseStream(); //定义一个字节数据 byte[] btContent = new byte[512]; int intSize = 0; intSize = myStream.Read(btContent, 0, 512); while (intSize > 0) { FStream.Write(btContent, 0, intSize); intSize = myStream.Read(btContent, 0, 512); } flag = true; } catch (Exception ex) { flag = false; LogApi.WriteLog("下载文件时异常:" + path); LogApi.WriteErrLog(ex); } finally { //关闭流 if (myStream != null) { myStream.Close(); myStream.Dispose(); } if (FStream != null) { FStream.Close(); FStream.Dispose(); } } return flag; }
C#开发PACS、RIS、3D医学影像处理系统系列教程目录整理:
菜鸟入门篇:
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三维处理医学图像:
C#开发PACS医学影像三维重建(一):使用VTK重建3D影像
C#开发PACS医学影像三维重建(二):使用VTK进行体绘制
C#开发PACS医学影像三维重建(三):纹理映射与颜色传输
C#开发PACS医学影像三维重建(四):3D网格平滑效果
C#开发PACS医学影像三维重建(五):基于梯度透明的组织漫游
C#开发PACS医学影像三维重建(六):三维光源与阴影效果
C#开发PACS医学影像三维重建(七):空间测量与标注
C#开发PACS医学影像三维重建(八):VR体绘制
C#开发PACS医学影像三维重建(九):MPR三视图切面重建
C#开发PACS医学影像三维重建(十):MIP最小密度投影
C#开发PACS医学影像三维重建(十一):CPR曲面重建
C#开发PACS医学影像三维重建(十二):VE虚拟内镜技术
熟手进阶篇:
医学图像算法:
C#处理医学图像(一):基于Hessian矩阵的血管肺纹理骨骼加强对比
C#处理医学图像(二):图像锐化加强对比
PACS网页端 开发Web版本的PACS:
C#开发Web端PACS(一):基于PACS客户端思想重写Web端
C#开发Web端PACS(二):使用 .Net MVC 开发手机端PACS服务端
C#开发Web端PACS(三):使用HTML5和CSS3开发PACS手机端页面
C#开发Web端PACS(四):Web端与服务端的DICOM传输
C#开发Web端PACS(五):Web端的平移缩放旋转2D操做
C#开发Web端PACS(六):Web端的窗宽窗位调整
C#开发Web端PACS(七):将移动端接入微信公众号实现医院云胶片
登峰造极篇:
C#开发基于Python人工智能的肺结节自动检测
C#开发基于Python人工智能的脊柱侧弯曲率算法
C#开发基于Python机器学习的医学影像骨骼仿真动画
C#开发基于Python机器学习的术后恢复模拟
C#开发基于U3D的VR眼镜设备虚拟人体三维重建
C#开发基于全息投影的裸眼3D医学影像显示技术
周边附加篇:
胶片打印:
C#开发医学影像胶片打印系统(一):功能与胶片排版
C#开发医学影像胶片打印系统(二):胶片打印机通信
C#开发医学影像胶片打印系统(三):不规则排版打印
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交流。 |