Dicom的文件信息通常是由設備信息、圖像信息、病人信息等Tag標記組成的,用字節長度和偏移量來區分,html
具體數據結構能夠自行去參考Dicom文件解析,內容比較多,這裏不贅述。算法
對於經常使用的Tag,能夠簡單的理解爲兩層結構,第一層是組,第二層是組包含的元素,每一個組號和元素號用2個字節表示(Uint16),數據結構
例如經常使用的組有 0002組描述設備通信,0008組描述特徵參數,0010組描述患者信息,0028組描述圖像信息參數,架構
例如 0010組裏面又包含病人姓名、年齡、性別等。併發
一樣的,按照上一篇文章,仍是用fo-dicom來解析Dicom信息,能夠直接經過DicomTag的類型感知來獲取你想要的Tag值。函數
//實例化文件處理對象並打開文件 DicomFile dicomFile = DicomFile.Open(@"C:\101\1.dcm"); //獲取dicom圖像對象 DicomImage dicomImage = new DicomImage(dicomFile.Dataset); //接收變量 string [] name; //讀取病人姓名 dicomFile.Dataset.TryGetValues<string>(DicomTag.PatientName, out name); if (name != null) { Console.WriteLine(name[0]); }
有時候咱們並不知道某個Tag值對應的名稱叫什麼,例如 0x0010 0x0020, 因此去DicomTag 類型裏面搜索將是一件很痛苦的事情,高併發
這時候須要本身封裝一個Tag值操做類,重載建立標籤函數,不只支持uint16,還支持string字符串的組號和元素帶入並查詢工具
/// <summary> /// 標籤管理器 /// </summary> public static class TagManager { /// <summary> /// 設置一個標籤 /// </summary> /// <param name="alignment">標籤方位</param> /// <param name="tagRow">標籤所在行數(四個角1到10,上下左右只支持一行)</param> /// <param name="dicomTag">標籤值</param> /// <param name="tagFont">標籤樣式</param> public static TagHandler CreateTag(TagAlignment alignment, int tagRow, DicomTag dicomTag, ImageTagFont tagFont = null) { TagHandler tag = new TagHandler { Alignment = alignment, DicomTag = dicomTag, TagRow = tagRow, TagType = TagType.TagValue, TagFont = tagFont }; return tag; } /// <summary> /// 設置一個標籤 /// </summary> /// <param name="alignment">標籤方位</param> /// <param name="tagRow">標籤所在行數(四個角1到10,上下左右只支持一行)</param> /// <param name="group">標籤組</param> /// <param name="element">標籤元素</param> /// <param name="tagFont">標籤樣式</param> public static TagHandler CreateTag(TagAlignment alignment, int tagRow, ushort group, ushort element, ImageTagFont tagFont = null) { TagHandler tag = new TagHandler { Alignment = alignment, Group = group, Element = element, TagRow = tagRow, TagType = TagType.TagValue, TagFont = tagFont }; return tag; } /// <summary> /// 設置一個標籤 /// </summary> /// <param name="alignment">標籤方位</param> /// <param name="tagRow">標籤所在行數(四個角1到10,上下左右只支持一行)</param> /// <param name="groupHexStr">標籤組(16進制字符串)</param> /// <param name="elementHexStr">標籤元素(16進制字符串)</param> /// <param name="tagFont">標籤樣式</param> public static TagHandler CreateTag(TagAlignment alignment, int tagRow, string groupHexStr, string elementHexStr, ImageTagFont tagFont = null) { TagHandler tag = new TagHandler { Alignment = alignment, GroupHexStr = groupHexStr, ElementHexStr = elementHexStr, TagRow = tagRow, TagType = TagType.TagValue, TagFont = tagFont }; return tag; } /// <summary> /// 設置一個標籤 /// </summary> /// <param name="alignment">標籤方位</param> /// <param name="tagRow">標籤所在行數(四個角1到10,上下左右只支持一行)</param> /// <param name="tagText">標籤內容</param> /// <param name="tagFont">標籤樣式</param> public static TagHandler CreateTag(TagAlignment alignment, int tagRow, string tagText, ImageTagFont tagFont = null) { TagHandler tag = new TagHandler { Alignment = alignment, TagText = tagText, TagRow = tagRow, TagType = TagType.UserData, TagFont = tagFont }; return tag; } /// <summary> /// 設置一個標籤 /// </summary> /// <param name="alignment">標籤方位</param> /// <param name="tagRow">標籤所在行數(四個角1到10,上下左右只支持一行)</param> /// <param name="tagType">標籤類型</param> /// <param name="tagFont">標籤樣式</param> public static TagHandler CreateTag(TagAlignment alignment, int tagRow, TagType tagType, ImageTagFont tagFont = null) { TagHandler tag = new TagHandler { Alignment = alignment, TagRow = tagRow, TagType = tagType, TagFont = tagFont }; return tag; } }
一樣,咱們也能夠設置自定義樣式,例如顏色、字體、字號、透明度、自定義文本內容等等,佈局
對於不一樣的掛片類型,配合對應的掛片協議便可自動顯示醫院閱片或膠片打印所須要的Tag。字體
TagManager.CreateTag(TagAlignment.RightBottom, 1, "By ET-Dicom", new ImageTagFont { TagColor = Color.Blue, TagSize = 18 })
這樣單元格的邊角標記就完成了,在設計器中,Tag控件用Textblock就能夠了。
配合掛片協議後最終呈現效果:
C#開發PACS、RIS醫學影像處理系統
目錄整理:
(一)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三維:MRP、MIP、VR
C#開發PACS醫學影像三維重建(一):使用VTK重建3D影像
(三)PACS網頁端:開發Web版本的PACS
C#開發Web端PACS(一):基於PACS客戶端思想重寫Web端
(四)PACS移動端:開發基於HTML5移動端版本的PACS
C#開發移動端PACS(一):使用HTML5和CSS3開發PACS手機端頁面
C#開發移動端PACS(二):使用 .Net MVC 開發手機端PACS服務端
(五)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交流。 |