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); } }
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); } }