1. 程式人生 > 實用技巧 >C#開發PACS醫學影像處理系統(八):單元格變換

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

先看效果:

再看結構,Viewer(影像控制元件)分為N個Cell(單元格),每個單元格分為N個Box(影像容器),

當預設情況為2x2的行列時,結構如下圖:

    

其中,我們在WPF設計器中建立一個使用者控制元件叫Viewer,使用Grid容器,預設2x2,再根據自己的業務需要建立使用者控制元件Cell和使用者控制元件Box,

在Viewer中宣告變數集合來記錄Cell,同理,在Cell中宣告變數集合來記錄Box:

     /// <summary>
        /// 影象單元格集合
        /// </summary>
        public List<ET_MedicalCell> Cells = new
List<ET_MedicalCell>();

情況1:變換行列,例如從2x2 變換到3x3:

思路:在集合中新增子控制元件,為行列屬性設定觸發器,

   private int rowsCount = 2;
        /// <summary>
        /// 單元格的行數
        /// </summary>
        public int RowsCount
        {
            get { return rowsCount; }
            set
            {if (value < -1
) { rowsCount = 0; } else if (value > 10) { rowsCount = 10; } else { rowsCount = value; } SetLayout(); SetCellCount(); } }

新增Cell:

ET_MedicalCell cell = new ET_MedicalCell(1, 1, this);
MdiGrid.Children.Add(cell);
Cells.Add(cell);

情況2:變換行列,平鋪與層疊切換:

思路:Cell數量始終為1,Box數量變為行列數量

情況3:單元格雙擊放大:

思路:Cell數量始終為1,Box數量始終為1

情況4:醫生實際使用中的複合操作:

思路:控制Cell和Box的數量,記錄好變換之前的位置,因為有可能會變回去,直接引用變換前的物件和位置即可,無需重新載入Dicom影像而浪費效率和資源。