Example #1
0
        private DicomAttributeCollection GenerateDataHeader(EFilmModel eFilmModel, Size size, bool ifPageNo)
        {
            try
            {
                Logger.LogFuncUp();

                bool ifGrayScalePrint = eFilmModel.IfSaveImageAsGrayScale;

                var bitmap = this.RenderToBitmap(size,
                                                 eFilmModel.PageTitlePosition,
                                                 this,
                                                 _filmingViewerControl,
                                                 filmPageBarGrid, filmPageBarGridSimple,
                                                 ifGrayScalePrint, ifPageNo);

                byte[] pixelData = Widget.ProcessImage(bitmap);
                //if (ifGrayScalePrint)
                //{
                //    //pixelData = ApplyLUT(pixelData);
                //    pixelData = PerformGammaCorrected(pixelData);
                //}
                eFilmModel.Rows    = (ushort)bitmap.PixelHeight;
                eFilmModel.Columns = (ushort)bitmap.PixelWidth;

                var dicomElements = new DicomElementWidget();
                var dataHeader    = dicomElements.AssembleSendData(pixelData, eFilmModel);

                Logger.LogFuncDown();

                return(dataHeader);
            }
            catch (Exception ex)
            {
                Logger.LogFuncException(ex.Message + ex.StackTrace);
                return(null);
            }
        }
Example #2
0
        private void PrintByGeneralPrinter(EFilmModel eFilmModel, bool ifPageNo)
        {
            try
            {
                Logger.LogFuncUp();
                var setting        = eFilmModel.PrintSettings;
                var dpi            = int.Parse(setting.CurrPrinterDPI);
                var isExistPrinter = true; //检测是否存在打印机

                // 设置页边距
                //const double margin = 30;
                double      widthMargin  = 30 * dpi / 96;
                double      heightMargin = 45 * dpi / 96;
                PrintDialog printDlg     = new PrintDialog();

                // 打印方向
                printDlg.PrintTicket.PageOrientation = setting.CurrOrientation == "0"
                                                           ? PageOrientation.Portrait
                                                           : PageOrientation.Landscape;

                //打印份数
                printDlg.PrintTicket.CopyCount = int.Parse(setting.CurrCopyCount);

                //选择纸张尺寸 //todo: FilmSize convertor
                var pageMediaSizeName = (PageMediaSizeName)Enum.Parse(typeof(PageMediaSizeName), setting.CurrFilmSize);
                printDlg.PrintTicket.PageMediaSize = new PageMediaSize(pageMediaSizeName);

                //选择一个打印机;
                if (eFilmModel.IfPrint)
                {
                    PrintQueue selectedPrinter;
                    try
                    {
                        selectedPrinter =
                            Printers.Instance.GeneralPrinters.FirstOrDefault(p => p.Name == setting.CurrPrinterAE);
                    }
                    catch (Exception)
                    {
                        var printers = new LocalPrintServer().GetPrintQueues();
                        selectedPrinter = printers.FirstOrDefault(p => p.Name == setting.CurrPrinterAE);
                    }
                    if (selectedPrinter == null)
                    {
                        Logger.LogError("没有找到" + setting.CurrPrinterAE);
                        isExistPrinter = false;
                        // return;
                    }
                    else
                    {
                        //设置打印;
                        printDlg.PrintQueue = selectedPrinter;
                    }
                }

                Size filmSize    = eFilmModel.FilmSize;
                bool ifGrayPrint = eFilmModel.IfSaveImageAsGrayScale;
                var  bitmap      = this.RenderToBitmap(filmSize,
                                                       eFilmModel.PageTitlePosition,
                                                       this,
                                                       _filmingViewerControl,
                                                       filmPageBarGrid, filmPageBarGridSimple, ifGrayPrint);

                if (isExistPrinter && eFilmModel.IfPrint)
                {
                    DrawingVisual visual = new DrawingVisual();
                    using (DrawingContext context = visual.RenderOpen())
                    {
                        // VisualBrush brush = new VisualBrush(this);

                        if (printDlg.PrintTicket.PageOrientation == PageOrientation.Portrait)
                        {
                            //context.DrawRectangle(brush, null, new Rect(new Point(30, 120),
                            //                                            new Size(this.ActualWidth, this.ActualHeight)));
                            context.DrawImage(bitmap,
                                              new Rect(new Point(widthMargin, heightMargin),
                                                       new Size(bitmap.PixelWidth, bitmap.PixelHeight)));
                        }
                        else if (printDlg.PrintTicket.PageOrientation == PageOrientation.Landscape)
                        {
                            //context.DrawRectangle(brush, null, new Rect(new Point(120, 30),
                            //                                            new Size(this.ActualWidth, this.ActualHeight)));
                            context.DrawImage(bitmap,
                                              new Rect(new Point(heightMargin, widthMargin),
                                                       new Size(bitmap.PixelWidth, bitmap.PixelHeight)));
                        }
                    }
                    double scale = Math.Min(printDlg.PrintableAreaWidth / (bitmap.PixelWidth + (widthMargin * 2)),
                                            printDlg.PrintableAreaHeight / (bitmap.PixelHeight + (widthMargin * 2)));
                    visual.Transform = new ScaleTransform(scale, scale);
                    printDlg.PrintVisual(visual, string.Empty);
                }


                if (!eFilmModel.IfSaveEFilm)
                {
                    return;
                }
                if (bool.Parse(eFilmModel.PrintSettings.IfSaveHighPrecisionEFilm))
                {
                    byte[] pixelData = Widget.ProcessImage(bitmap);

                    eFilmModel.Rows    = (ushort)bitmap.PixelHeight;
                    eFilmModel.Columns = (ushort)bitmap.PixelWidth;

                    var dicomElements = new DicomElementWidget();
                    eFilmModel.DataHeaderForSave = dicomElements.AssembleSendData(pixelData, eFilmModel);
                }
                else
                {
                    eFilmModel.DataHeaderForSave = GenerateDataHeader(eFilmModel, eFilmModel.LowPrecisionEFilmSize, ifPageNo);
                }


                Logger.LogFuncDown();
            }
            catch (Exception ex)
            {
                Logger.LogFuncException(ex.Message + ex.StackTrace);
            }
        }