示例#1
0
        public void UpdateAllActiveFilmingPageControl(ActionType actionType,
                                                      PresentationState pState,
                                                      List <FilmingPageControl> activeFilmingPageControlList,
                                                      MedViewerControl currentViewerControl)
        {
            if (this.ColorImageInWIndowingAction(actionType))
            {
                return;
            }

            foreach (var fpc in activeFilmingPageControlList)
            {
                if (fpc.filmingViewerControl.Equals(currentViewerControl))
                {
                    continue;
                }

                fpc.Dispatcher.BeginInvoke(DispatcherPriority.Background,
                                           new Action <ActionType, PresentationState, FilmingPageControl>(
                                               UpdateSelectedFimingPage), actionType, pState, fpc);
            }

            if (activeFilmingPageControlList.Any())
            {
                activeFilmingPageControlList[0].Dispatcher.Invoke(new Action(() => { }));
            }
        }
示例#2
0
        /// <summary>
        /// 胶片截屏
        /// </summary>
        /// <param name="viewerControlSize"></param>
        /// <param name="filmingPagePageControl"></param>
        /// <param name="filmingViewerControl"></param>
        /// <param name="ifSaveImageAsGreyScale"></param>
        /// <returns></returns>
        private WriteableBitmap RenderViewerControlToBitmap(Size viewerControlSize,
                                                            FilmPageControl filmingPagePageControl,
                                                            MedViewerControl filmingViewerControl,
                                                            bool ifSaveImageAsGreyScale = true)
        {
            try
            {
                Logger.LogFuncUp();

                MedViewerScreenSaver viewerScreenSaver = new MedViewerScreenSaver(filmingViewerControl);

                Logger.LogFuncUp("Start RenderViewerControlToBitmap");
                BitmapSource viewerControlBitmap = viewerScreenSaver.RenderViewerControlToBitmap(viewerControlSize,
                                                                                                 Printers.Instance.IfPrintSplitterLine, true);
                Logger.LogFuncDown("End RenderViewerControlToBitmap");

                WriteableBitmap writableViewerControlBitmap = ifSaveImageAsGreyScale
                                                                  ? new WriteableBitmap(
                    new FormatConvertedBitmap(
                        viewerControlBitmap, PixelFormats.Gray8,
                        null, 0))
                                                                  : new WriteableBitmap(
                    new FormatConvertedBitmap(viewerControlBitmap,
                                              PixelFormats.Rgb24,
                                              null, 0));
                Logger.LogFuncDown();

                return(writableViewerControlBitmap);
            }
            catch (Exception ex)
            {
                Logger.LogFuncException(ex.Message + ex.StackTrace);
                throw;
            }
        }
示例#3
0
        public FilmPageControl()
        {
            InitializeComponent();

            this._filmTitleViewModel = new FilmTitleViewModel();

            DataContext = this._filmTitleViewModel;

            this._filmingViewerControl = new MedViewerControl();
            this._filmingViewerControl.InitializeWithoutCommProxy(Configure.Environment.Instance.FilmingUserConfigPath);
            //todo: wait for medviewer merge from 61
            //this._filmingViewerControl.Configuration.IppThreadCount = 1;
            this._filmingViewerControl.FilmingViewMode = true;
            this._filmingViewerControl.Controller.SetLutMode(LutDisplayMode.Print);
            filmingViewerControlGrid.Children.Add(this._filmingViewerControl);

            this._firstColumnTitleItems = new List <FrameworkElement>();
            _firstColumnTitleItems.Add(patientNameLabel);
            _firstColumnTitleItems.Add(patientIDLabel);
            _firstColumnTitleItems.Add(patientSexTextBlock);
            _firstColumnTitleItems.Add(accessionNoTextBlock);

            this._secondColumnTitleItems = new List <FrameworkElement>();
            _secondColumnTitleItems.Add(InstitutionNameLabel);
            _secondColumnTitleItems.Add(AcquisitionDateTimeLabel);
            _secondColumnTitleItems.Add(txtComment);

            FilmPageControl.DataAccessorInstance = new DataAccessor(this._filmingViewerControl.Configuration);
        }
示例#4
0
        public static WriteableBitmap RenderToBitmap(Size filmSize,
                                                     FilmingPageTitle pageTitle,
                                                     FilmingCard filmingCard,
                                                     FilmingPageControl filmingPageControl,
                                                     MedViewerControl medViewerControl,
                                                     Grid filmingPageBarGrid, bool DoingForceRender = true,
                                                     bool ifSaveImageAsGreyScale = true)
        {
            try
            {
                Logger.LogFuncUp();

                double scale = filmSize.Height > filmSize.Width
                    ? FilmingUtility.HEADER_PERCENTAGE_OF_FILMPAGE
                    : FilmingUtility.HEADER_PERCENTAGE_OF_FILMPAGE * filmSize.Width / filmSize.Height;

                if (filmingCard._filmingCardModality == FilmingUtility.EFilmModality ||
                    pageTitle.DisplayPosition == "0")
                {
                    scale = 0;
                }

                var viewerControlSize = new Size((int)filmSize.Width, (int)filmSize.Height * (1 - scale));
                //   FilmingHelper.PrintTimeInfo("start render MedViewer");
                var viewerControlBitmap = RenderViewerControlToBitmap(viewerControlSize, filmingCard, filmingPageControl, medViewerControl, DoingForceRender, ifSaveImageAsGreyScale);
                //  FilmingHelper.PrintTimeInfo("End render MedViewer");
                var headerSize = new Size(viewerControlBitmap.PixelWidth, (int)filmSize.Height * scale);
                //   FilmingHelper.PrintTimeInfo("start render Header");
                WriteableBitmap headerBitmap = null;

                WriteableBitmap filmpageBitmap;
                if (pageTitle.DisplayPosition == "0")  //no film page bar
                {
                    filmpageBitmap = viewerControlBitmap;
                    Logger.LogFuncDown();
                    return(filmpageBitmap);
                }

                headerBitmap = RenderHeaderToBitmap(headerSize, filmingPageBarGrid, ifSaveImageAsGreyScale);

                if (pageTitle.DisplayPosition == "2")    //film page bar at bottom
                {
                    filmpageBitmap = RenderBitmapHelper.StitchBitmapsHorizontally(ifSaveImageAsGreyScale, viewerControlBitmap, headerBitmap);
                }
                else //if (DisplayPosition == "1")    //film page bar on top
                {
                    filmpageBitmap = RenderBitmapHelper.StitchBitmapsHorizontally(ifSaveImageAsGreyScale, headerBitmap, viewerControlBitmap);
                }

                Logger.LogFuncDown();

                return(filmpageBitmap);
            }
            catch (Exception ex)
            {
                Logger.LogFuncException(ex.Message + ex.StackTrace);
                throw;
            }
        }
示例#5
0
        public void Initialize(MedViewerControl viewerControl, string configPath)
        {
            _viewerControl = viewerControl;
            _configPath    = configPath;

            _viewerControl.InitializeWithoutCommProxy(_configPath);
            _viewerControl.LayoutManager.SetLayout(1, 1);

            this.RegisterViewerControlEvents();
            this.SubscribeCinePlayerEvents();

            _stopwatch = new Stopwatch();
        }
示例#6
0
 public FilmingPageControl GetFilmPageControlByViewerControl(MedViewerControl viewerControl)
 {
     if (viewerControl == null)
     {
         return(null);
     }
     foreach (var filmPage in this)
     {
         if (filmPage.filmingViewerControl.Equals(viewerControl))
         {
             return(filmPage);
         }
     }
     return(null);
 }
示例#7
0
        public void Initialize()
        {
            if (null == Container || string.IsNullOrEmpty(ConfigPath) || null == ViewerControlProxy)
            {
                throw new Exception("ViewerDisplayModule::Initialize() container or config path is null!");
            }

            var registry = this.Container.GetExportedValue <IRegionViewRegistry>();

            registry.RegisterViewWithRegion(VIEWER_REGION_NAME, () =>
            {
                _viewerControl = new MedViewerControl();
                ViewerControlProxy.Initialize(_viewerControl, ConfigPath);
                return(_viewerControl);
            });
        }
示例#8
0
        private void ClearViewerControl(MedViewerControl viewerControl)
        {
            foreach (var cell in viewerControl.Cells)
            {
                if (cell != null && cell.Image != null && cell.Image.CurrentPage != null)
                {
                    cell.Image.CurrentPage.ImageHeader.Dispose();
                }
            }

            var rootCell = viewerControl.LayoutManager.RootCell;

            rootCell.RemoveAll();
            rootCell.Refresh();
            GC.Collect();
        }
示例#9
0
        public static WriteableBitmap RenderViewerControlToBitmap(Size viewerControlSize,
                                                                  FilmingCard filmingCard,
                                                                  FilmingPageControl filmingPageControl,
                                                                  MedViewerControl filmingViewerControl, bool DoingForceRender = true,
                                                                  bool ifSaveImageAsGreyScale = true)
        {
            try
            {
                Logger.LogFuncUp();


                Logger.LogFuncUp("Start DisplayFilmPage");
                filmingCard.DisplayFilmPage(filmingPageControl);
                Logger.LogFuncDown("End DisplayFilmPage");
                Logger.LogFuncUp("Start UpdateLayout");
                filmingCard.filmPageGrid.UpdateLayout();
                Logger.LogFuncDown("End UpdateLayout");

                MedViewerScreenSaver viewerScreenSaver = new MedViewerScreenSaver(filmingViewerControl);
                //viewerScreenSaver.IfDoingForceRender = DoingForceRender;       //设置Medview处是否ForceRender,优化1张胶片打印速度。
                Logger.LogFuncUp("Start RenderViewerControlToBitmap");
                BitmapSource viewerControlBitmap = viewerScreenSaver.RenderViewerControlToBitmap(viewerControlSize, Printers.Instance.IfPrintSplitterLine, true);

                Logger.LogFuncDown("End RenderViewerControlToBitmap");
                WriteableBitmap writableViewerControlBitmap = ifSaveImageAsGreyScale ?
                                                              new WriteableBitmap(new FormatConvertedBitmap(viewerControlBitmap, PixelFormats.Gray8, null, 0))
                    : new WriteableBitmap(new FormatConvertedBitmap(viewerControlBitmap, PixelFormats.Rgb24, null, 0));
                Logger.LogFuncDown();

                return(writableViewerControlBitmap);
            }
            catch (Exception ex)
            {
                Logger.LogFuncException(ex.Message + ex.StackTrace);
                throw;
            }
        }
示例#10
0
        public WriteableBitmap RenderToBitmap(Size filmSize,
                                              string pageTitlePosition,
                                              FilmPageControl filmingPagePageControl,
                                              MedViewerControl medViewerControl,
                                              Grid filmingPageBarGrid,
                                              Grid filmingPageBarGridSimple,
                                              bool ifSaveImageAsGreyScale = true, bool ifPageNo = true)
        {
            try
            {
                Logger.LogFuncUp();
                double headerScale    = FilmingUtility.HEADER_PERCENTAGE_OF_FILMPAGE;
                bool   ifHeaderSimple = (pageTitlePosition == "0" && ifPageNo);
                if (ifHeaderSimple)
                {
                    filmPageBarGrid.Visibility = Visibility.Collapsed;
                    Grid.SetRow(filmPageBarGrid, 1);
                    Grid.SetRow(filmingPageBarGridSimple, 0);
                    headerScale = 0.03;
                }
                else
                {
                    filmPageBarGrid.Visibility = Visibility.Visible;
                    Grid.SetRow(filmPageBarGrid, 0);
                    Grid.SetRow(filmingPageBarGridSimple, 1);
                }

                //计算viewcontrol尺寸,title尺寸的比例
                double scale = filmSize.Height > filmSize.Width
                                   ? headerScale
                                   : headerScale * filmSize.Width / filmSize.Height;


                //生成viewcontrol的Size并截屏
                var viewerControlSize = pageTitlePosition != "0"
                                             ? new Size(filmSize.Width, filmSize.Height * (1 - scale))
                                             : (ifPageNo ? new Size(filmSize.Width, filmSize.Height * (1 - headerScale)) : filmSize);
                var viewerControlBitmap = this.RenderViewerControlToBitmap(viewerControlSize,
                                                                           filmingPagePageControl,
                                                                           medViewerControl,
                                                                           ifSaveImageAsGreyScale);

                //判断title位置,决定是否截屏title,拼接两张图片生成最终胶片
                var headerSize = new Size(viewerControlBitmap.PixelWidth, filmSize.Height * (ifHeaderSimple?headerScale:scale));

                WriteableBitmap headerBitmap   = null;
                WriteableBitmap filmpageBitmap = null;
                if (pageTitlePosition == "0" && !ifPageNo) //no film page bar
                {
                    filmpageBitmap = viewerControlBitmap;
                    Logger.LogFuncDown();
                    return(filmpageBitmap);
                }

                headerBitmap = this.RenderHeaderToBitmap(headerSize, ifHeaderSimple?filmingPageBarGridSimple:filmingPageBarGrid, ifSaveImageAsGreyScale);
                if (pageTitlePosition == "2")
                {
                    filmpageBitmap = StitchBitmapsHorizontally(ifSaveImageAsGreyScale, viewerControlBitmap, headerBitmap);
                }
                else
                {
                    filmpageBitmap = StitchBitmapsHorizontally(ifSaveImageAsGreyScale, headerBitmap, viewerControlBitmap);
                }


                Logger.LogFuncDown();

                return(filmpageBitmap);
            }
            catch (Exception ex)
            {
                Logger.LogFuncException(ex.Message + ex.StackTrace);
                throw;
            }
        }