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交流。 |