1.先看結構:
建立WPF使用者控制元件:YourTab
建立WPF使用者控制元件:YourItem
建立選項卡時迴圈新增item,並設定序列縮圖到控制元件和非同步下載的進度條,
1個病人1個或多個Study檢查,1個Study檢查1個選項卡,併為每個選項卡新增自定義關閉按鈕
Tab自定義關閉按鈕的XAML樣式如下:
<Style TargetType="{x:Type TabItem}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type TabItem}"> <Grid Margin="-2"> <Border Name="Border" BorderThickness="2" Margin="0,2,0,1" > <Grid> <ContentPresenter x:Name="ContentSite" VerticalAlignment="Center" HorizontalAlignment="Center" ContentSource="Header" Margin="5,5,25,5" /> <Button x:Name="BtnCloseTab" Margin="130,-1,1,-1" Width="25" BorderBrush="#555555" BorderThickness="3,1,1,1" Style="{StaticResource ButtonStyle}" MouseEnter="Btn_MouseEnter" MouseLeave="Btn_MouseLeave" Click="BtnCloseTab_Click"> <Button.Content> <Grid> <Image Source="/PACS;component/Resources/關閉.png" Margin="-5"/> <TextBlock Text="關閉" Visibility="Collapsed"></TextBlock> </Grid> </Button.Content> </Button> </Grid> </Border> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter TargetName="Border" Property="Background" Value="#191919" /> <Setter TargetName="Border" Property="BorderBrush" Value="#555555" /> </Trigger> <Trigger Property="IsSelected" Value="False"> <Setter TargetName="Border" Property="Background" Value="#292929" /> <Setter TargetName="Border" Property="BorderBrush" Value="#555555" /> </Trigger> <Trigger Property="IsMouseOver" Value="True"> <Setter TargetName="Border" Property="Background" Value="#3E3E3E" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style>
2.為Item建立模仿2D建築遊戲的拖拽效果
先建立一個WinForm窗體:
設定窗體屬性:窗體位置跟隨滑鼠,透明度75%,無邊框,ShowInTaskBar屬性設為False,當在Item上按下滑鼠並拖動時則建立一個窗體並設定背景圖片和縮圖一致。
看效果:
3.建立右鍵選單匯出DCM或JPG或視訊
<ContextMenu x:Name="menu"> <MenuItem Header="清除關聯序列" Click="RelationClear_Click"> <MenuItem.Icon> <ImageBrush ImageSource="/PACS;component/Resources/清除.png"/> </MenuItem.Icon> </MenuItem> <MenuItem Header="匯出Dicom檔案"> <MenuItem.Icon> <ImageBrush ImageSource="/PACS;component/Resources/檔案.png"/> </MenuItem.Icon> <MenuItem Header="當前序列" Click="ExportDicom_Click" Width="140"></MenuItem> <MenuItem Header="所有序列" Click="ExportAllDicom_Click"></MenuItem> </MenuItem> <MenuItem Header="匯出圖片檔案"> <MenuItem.Icon> <ImageBrush ImageSource="/PACS;component/Resources/圖片.png"/> </MenuItem.Icon> <MenuItem Header="當前序列" Width="140" Click="ExportImage_Click"></MenuItem> <MenuItem Header="所有序列" Click="ExportAllImage_Click"></MenuItem> </MenuItem> <MenuItem Header="匯出視訊檔案"> <MenuItem.Icon> <ImageBrush ImageSource="/PACS;component/Resources/視訊.png"/> </MenuItem.Icon> <MenuItem Header="當前序列" Width="140" Click="ExportMedia_Click"></MenuItem> <MenuItem Header="所有序列" Click="ExportAllMedia_Click"></MenuItem> </MenuItem> <MenuItem Header="推送該序列"> <MenuItem.Icon> <ImageBrush ImageSource="/PACS;component/Resources/推送.png"/> </MenuItem.Icon> <MenuItem Header="當前序列" Width="140" Click="Send_Click"></MenuItem> <MenuItem Header="所有序列" Click="SendAll_Click"></MenuItem> </MenuItem> </ContextMenu>
匯出Dicom檔案:你開啟影像時下載的DCM檔案在本地硬碟的路徑,複製檔案就行了。
匯出圖片檔案:可以參考本系列文章的載入Dicom影像等章節。
匯出視訊檔案:用第三方的圖片轉視訊檔案匯出序列視訊,推薦使用AForge。
推送:將當前序列推送到其他電腦或裝置。
C#開發PACS、RIS醫學影像處理系統
目錄整理:
(一)PACS客戶端:
C#開發PACS醫學影像處理系統(七):讀取影像Dicom資訊
C#開發PACS醫學影像處理系統(十):Dicom影像下載策略與演算法
C#開發PACS醫學影像處理系統(十一):Dicom影像掛片協議
C#開發PACS醫學影像處理系統(十二):繪圖處理之圖形標記
C#開發PACS醫學影像處理系統(十三):繪圖處理之測量工具
C#開發PACS醫學影像處理系統(十四):處理Dicom影像窗寬窗位
C#開發PACS醫學影像處理系統(十五):基於體點陣圖交叉定位線演算法
C#開發PACS醫學影像處理系統(十六):2D處理之平移和縮放
C#開發PACS醫學影像處理系統(十七):2D處理之任意角度旋轉與映象翻轉
C#開發PACS醫學影像處理系統(十八):Dicom影像色彩增強(偽彩)
C#開發PACS醫學影像處理系統(十九):Dicom影像反色處理(負片)
C#開發PACS醫學影像處理系統(二十):Dicom影像放大鏡功能
(二)PACS三維:MRP、MIP、VR
C#開發PACS醫學影像三維重建(一):使用VTK三維重建Dicom影像
(三)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影像處理系統宣傳視訊