/// <summary> /// 打印输出.该功能目前测试只适用于JPEG,BMP.格式 /// </summary> /// <param name="pExport"></param> /// <param name="dResolution">分辨率</param> /// <param name="outputPath">输出路径</param> /// <param name="pVisibleBounds">自定义可见区域</param> private void FunExportImage(IExport pExport, double dResolution, string outputPath,IEnvelope pVisibleBounds) { IEnvelope pPixelBounds; ESRI.ArcGIS.Display.tagRECT outtagRECT; ESRI.ArcGIS.Display.tagRECT DisplayBounds = m_ActiveView.ExportFrame; double iScreenResolution; if (pExport == null) { MessageBox.Show("打印类型未指定"); return; } if(pVisibleBounds!=null) //自定义框范围 { IDisplayTransformation pDisplayTransformation = m_ActiveView.ScreenDisplay.DisplayTransformation; pDisplayTransformation.TransformRect(pVisibleBounds, ref DisplayBounds, 8);//8代表esriDisplayTransformEnum.esriTransformToDevice } if (pExport is IExportImage) { IExportImage pExportImage = pExport as IExportImage; pExportImage.ImageType = esriExportImageType.esriExportImageTypeTrueColor; } iScreenResolution = m_ActiveView.ScreenDisplay.DisplayTransformation.Resolution; double l_resolution = Convert.ToDouble(domainResolution.Value); //===================================================================== // //方法一 // //一厘米包含37.79524个像素 //double dPixel = 37.79524; ////按照设置输入分辨率计算一厘米所含的像素数 //double tempratio = l_resolution * dPixel / iScreenResolution; ////输出图形的高度 //double tempbottom = (DisplayBounds.bottom - DisplayBounds.top) * tempratio; ////输出图形的宽度 //double tempright = (DisplayBounds.right - DisplayBounds.left) * tempratio + 0.1 * tempratio; //====================================================================== // //方法二:暂时可行. // double tempratio = l_resolution / iScreenResolution; double tempbottom = (DisplayBounds.bottom - DisplayBounds.top) * tempratio; double tempright = (DisplayBounds.right - DisplayBounds.left) * tempratio; //===================================================================== outtagRECT.left = 0; outtagRECT.top = 0; outtagRECT.bottom = Convert.ToInt32(Math.Truncate(tempbottom)); outtagRECT.right = Convert.ToInt32(Math.Truncate(tempright)); pPixelBounds = new EnvelopeClass(); pPixelBounds.PutCoords(outtagRECT.left, outtagRECT.top, outtagRECT.right, outtagRECT.bottom); pExport.Resolution = dResolution; pExport.PixelBounds = pPixelBounds; pExport.ExportFileName = outputPath; try { ITrackCancel pTrackCancel = new TrackCancelClass(); int hDC; hDC = pExport.StartExporting(); if (m_frmProBar == null) //m_frmProBar为进度条窗体 FunProgressBar(); m_frmProBar.Show(); m_ActiveView.Output(hDC, (int)dResolution, ref outtagRECT, pVisibleBounds, pTrackCancel); pExport.FinishExporting(); m_frmProBar.Hide(); if (DialogResult.Yes == MessageBox.Show("出图成功! \n图片保存在" + txtOutPutPath.Text+"\n是否需要打开文件所在的目录?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information)) { System.Diagnostics.Process.Start("explorer.exe", txtOutPutPath.Text); } pExport.Cleanup(); } catch { MessageBox.Show("出图失败!","警告",MessageBoxButtons.OK,MessageBoxIcon.Warning); //释放变量 m_frmProBar = null; pExport = null; pVisibleBounds = null; } //释放变量 pExport = null; pVisibleBounds = null; }