C#開發PACS醫學影像處理系統(十):Dicom影像下載策略與算法

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醫學影像處理系統(一):開發背景和功能預覽

C#開發PACS醫學影像處理系統(二):界面佈局之菜單欄

C#開發PACS醫學影像處理系統(三):界面佈局之工具欄

C#開發PACS醫學影像處理系統(四):界面佈局之狀態欄

C#開發PACS醫學影像處理系統(五):查詢病人信息列表

C#開發PACS醫學影像處理系統(六):加載Dicom影像

C#開發PACS醫學影像處理系統(七):讀取影像Dicom信息

C#開發PACS醫學影像處理系統(八):單元格變換

C#開發PACS醫學影像處理系統(九):序列控件與拖拽

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

相關文章
相關標籤/搜索