转自:http://blog.sina.com.cn/s/blog_4c5f70df0100a0ti.html

在ArcGIS的开发中,我们经常需要将当前地图打印(或是转出)到图片文件中。将Map或Layout中的图象转出有两种方法,一种为通过
IActiveView的OutPut函数,另外一种是通过IExport接口来实现。第一种方法导出速度较快,实现也比较方便,但该方法对于图片的行或
列数超过10000左右时,导出经常会失败(具体原因未知),第二种方法导出速度较慢,但效果较好,且可以在导出过程中通过ITrackCancel来中
止导出操作。
通过IActiveView的方式导出是通过创建Graphics对象来实现,具体示例代码如下:

/// <summary>

/// 将Map上指定范围(该范围为规则区域)内的内容输出到Image,注意,当图片的行数或列数超过10000左右时,出现原因示知的失败

/// </summary>

/// <param name="pMap">需转出的MAP</param>/// <param name="outRect">输出的图片大小</param>/// <param name="pEnvelope">指定的输出范围(为Envelope类型)</param>/// <returns>输出的Image 具体需要保存为什么格式,可通过Image对象来实现</returns>public static Image SaveCurrentToImage(IMap pMap, Size outRect, IEnvelope pEnvelope) {      //赋值      tagRECT rect = new tagRECT();      rect.left = rect.top = 0;      rect.right = outRect.Width;      rect.bottom = outRect.Height;      try      {                          //转换成activeView,若为ILayout,则将Layout转换为IActiveView          IActiveView pActiveView = (IActiveView)pMap;          // 创建图像,为24位色          Image image = new Bitmap(outRect.Width, outRect.Height); //, System.Drawing.Imaging.PixelFormat.Format24bppRgb);          System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);

          // 填充背景色(白色)          g.FillRectangle(Brushes.White, 0, 0, outRect.Width, outRect.Height);

          int dpi = (int)(outRect.Width / pEnvelope.Width);

          pActiveView.Output(g.GetHdc().ToInt32(), dpi, ref rect, pEnvelope, null);

          g.ReleaseHdc();            

          return image;     }

     catch (Exception excp)     {        MessageBox.Show(excp.Message + "将当前地图转出出错,原因未知", "出错提示", MessageBoxButtons.OK, MessageBoxIcon.Error);

          return null;      } }

通过IExport接口实现的导出,也需要通过IActiveView的OutPut来实现,但其转出句柄为IExport的StartExporting函数返回的DC,具体示例代码如下:

//输出当前地图至指定的文件    public void ExportMapExtent(IActiveView pView, Size outRect,string outPath){               try    {        //参数检查        if pView == null )        {            throw new Exception("输入参数错误,无法生成图片文件!");        }          //根据给定的文件扩展名,来决定生成不同类型的对象        ESRI.ArcGIS.Output.IExport export = null;        if (outPath.EndsWith(".jpg"))        {            export = new ESRI.ArcGIS.Output.ExportJPEGClass();        }        else if (outPath.EndsWith(".tiff"))        {            export = new ESRI.ArcGIS.Output.ExportTIFFClass();        }        else if (outPath.EndsWith(".bmp"))        {            export = new ESRI.ArcGIS.Output.ExportBMPClass();        }        else if (outPath.EndsWith(".emf"))        {            export = new ESRI.ArcGIS.Output.ExportEMFClass();        }        else if (outPath.EndsWith(".png"))        {            export = new ESRI.ArcGIS.Output.ExportPNGClass();        }        else if (outPath.EndsWith(".gif"))        {            export = new ESRI.ArcGIS.Output.ExportGIFClass();        }

        export.ExportFileName = outPath;        IEnvelope pEnvelope = pView.Extent;        //导出参数                   export.Resolution = 300;        tagRECT exportRect = new tagRECT();        exportRect.left = exportRect.top = 0;        exportRect.right = outRect.Width;        exportRect.bottom = (int)(exportRect.right * pEnvelope.Height / pEnvelope.Width);        ESRI.ArcGIS.Geometry.IEnvelope envelope = new ESRI.ArcGIS.Geometry.EnvelopeClass();        //输出范围        envelope.PutCoords(exportRect.left, exportRect.top, exportRect.right, exportRect.bottom);        export.PixelBounds = envelope;        //可用于取消操作        ITrackCancel pCancel = new CancelTrackerClass();        export.TrackCancel = pCancel;        pCancel.Reset();        //点击ESC键时,中止转出        pCancel.CancelOnKeyPress = true;        pCancel.CancelOnClick = false;        pCancel.ProcessMessages = true;        //获取handle        System.Int32 hDC = export.StartExporting();        //开始转出        pView.Output(hDC, (System.Int16)export.Resolution, ref exportRect, pEnvelope, pCancel);        bool bContinue = pCancel.Continue();        //捕获是否继续        if (bContinue)        {                                          export.FinishExporting();            export.Cleanup();        }        else        {                              export.Cleanup();        }        bContinue = pCancel.Continue();                   }    catch (Exception excep)    {        //错误信息提示    }}

ArcGIS Engine开发系列:将地图导出为图片的两种方法相关推荐

  1. AE 将地图导出为图片的两种方法

    在ArcGIS的开发中,我们经常需要将当前地图打印(或是转出)到图片文件中.将Map或Layout中的图象转出有两种方法,一种为通过IActiveView的OutPut函数,另外一种是通过IExpor ...

  2. Matlab导出eps图片的两种方法

    0.引言 在论文撰写的过程中,期刊往往对图片的格式有所要求,分辨率为600dpi的eps图片一种常见的要求.科研人员常用的Matab提供了多种导出eps的方法,本人目前使用了两种方法导出eps,在使用 ...

  3. ios录音文件路径_导出iPhone6录音文件两种方法可搞定!-手机录音在哪个文件夹...

    iPhone6录音如何导出?以下华子上网就为大家带来iPhone6录音两种导出方法,详细方法如下: 方法一.借助蓝牙.短信或者邮箱导出 1.打开iPhone6的语音备忘录,然后点击我们此前已经存储的录 ...

  4. .NET CORE 2.1 导出excel文件的两种方法

    最近在做 MVC 项目的时候遇到项目的导出,下面总结下两种导出到excel 的方法 第一种方法: 将文件写到本地,然后返回这个File 或者返回这个 File 的绝对地址  其中  _hostingE ...

  5. 记账一段时间后,导出保存账目的两种方法

    怎么记账,收入.支出的账目可以在电脑上记录吗?记录一段时间后,怎么保存账目呢?今天小编给大家分享一个新的记账技巧, 下面一起来试试. 需要哪些工具? 一台电脑 怎么快速记账? 运行[晨曦记账本],主界 ...

  6. oraclek导出表_Oracle导出DMP文件的两种方法

    导出: 方法一:利用PL/SQL Developer工具导出: 菜单栏---->Tools---->Export Tables,如下图,设置相关参数即可: 方法二:利用cmd的操作命令导入 ...

  7. Oracle导出DMP文件的两种方法

    导出: 方法一: 利用PL/SQL Developer工具导出: 菜单栏----> Tools---->Export Tables,如下图,设置相关参数即可: 方法二: 利用cmd的操作命 ...

  8. 【Win 10 应用开发】将墨迹保存到图像的两种方法

    IT界最近这几年,各种乱七八糟的东西不断出现,其中能用在实际工作与生活中的,大概也就那么几个.Web 前端也冒出各种框架,这就为那些喜欢乱用框架的公司提供了很好的机会,于是造成很多项目体积越来越庞大, ...

  9. linux系列之: 你知道查看文件空间的两种方法吗?

    文章目录 简介 du命令 df命令 总结 简介 linux系统中查看文件空间大小应该是一个非常常见的命令了,今天给大家介绍linux系统中查看文件空间的两种方法和在使用中可能会遇到的奇怪问题. 为什么 ...

最新文章

  1. mysql学习资料_一不小心,我就上传了 279674 字的 MySQL 学习资料到 github 上了
  2. ERP 已死,中台已凉,DDD 称王!
  3. JavaScript 笔记 ( Prototype )
  4. Linux 内核中的 GCC 特性(zz)
  5. WebServices中使用cxf开发日志拦截器以及自定义拦截器
  6. Anaconda 安装 Python 库(MySQLdb)的方法
  7. android国家坐标,从坐标获取国家?
  8. 1000 驱动_布加迪首款SUV渲染图曝光!采用纯电驱动,马力或将突破1000匹!
  9. 爆料者称苹果仍在继续研发iPhone屏下Touch ID
  10. 打开pdf文件提示文件过大_pdf文件太大如何用pdf转换工具进行压缩?
  11. Javascript中for循环别名
  12. SharePoint 2013 Preview Single Server 评估环境安装与简单试用
  13. 面向对象编程三大特性------封装、继承、多态
  14. pytorch 模型输出特征 保存npy
  15. java重载和重写的区别_Java重载和重写的区别
  16. 坚果pro3刷miui_锤子科技坚果Pro 3(12GB/256GB/全网通)手机卡怎么办?
  17. iphone 如何给cydia添加中文源和威锋源
  18. 年会抽奖程序,基于 Express + Three.js的 3D 球体抽奖程序
  19. OpenGL入门示例8——图形平移、旋转、缩放
  20. 邓号用计算机怎么输入,电脑上顿号怎么打出来

热门文章

  1. javascript中== 和===完整比较图 666
  2. 远程桌面连接不上解决方法
  3. java解决跨域问题_Java项目中如何解决跨域问题
  4. linux 非登录shell自动,Linux 交互/非交互/登录/非登录 shell 的区别
  5. 被Vim退出困住的百万程序员,到底采取了哪些错误的退出方法?
  6. 一次简单的问题排查背后蕴含的巨大的知识量
  7. 缓存三连问:项目中如何使用、为什么要使用、使用不当会造成什么后果?
  8. IDEA+Java控制台实现学生档案管理系统
  9. 什么是物理地址、虚拟地址、总线地址
  10. Python: 判断字符串是否包含空白符/删除字符串中空白符