欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap 谈天说地
   您现在位于: 首页技术专栏ArcGIS应用与开发AO开发 → 正文
ArcGis Engine中实现对符号的预览图输出
07-11-12 11:24:09 作者:Aji 出处:中国GIS资讯网
在ArcGis Engine中实现对符号的预览,生成预览图片。使用的时候只要调用SymbolToBitmp(符号,宽,高)就可以返回生成的图片了。关键代码如下:

public System.Drawing.Bitmap SymbolToBitmp(ESRI.ArcGIS.Display.ISymbol pSymbol,int iwidth,int iheight)
{   
 //根据高宽创建图象
 Bitmap bmp = new Bitmap(iwidth,iheight);
 Graphics gImage = Graphics.FromImage(bmp);
 gImage.Clear(Color.White);
 double dpi = gImage.DpiX;

 IEnvelope pEnvelope = new EnvelopeClass();
 pEnvelope.PutCoords(0,0,(double)bmp.Width,(double)bmp.Height);

 tagRECT deviceRect;   
 deviceRect.left = 0;
 deviceRect.right = bmp.Width;
 deviceRect.top = 0;
 deviceRect.bottom = bmp.Height;   

 IDisplayTransformation pDisplayTransformation = new DisplayTransformationClass();
 pDisplayTransformation.VisibleBounds = pEnvelope;
 pDisplayTransformation.Bounds = pEnvelope;
 pDisplayTransformation.set_DeviceFrame(ref deviceRect);
 pDisplayTransformation.Resolution = dpi;
 
 IGeometry pGeo = CreateSymShape(pSymbol,pEnvelope);

 System.IntPtr hdc = new IntPtr();
 hdc = gImage.GetHdc();

 //将符号的形状绘制到图象中
 pSymbol.SetupDC((int)hdc,pDisplayTransformation);
 pSymbol.Draw(pGeo);
 pSymbol.ResetDC();
 gImage.ReleaseHdc(hdc);      
 gImage.Dispose();

 return bmp;
 
}

public ESRI.ArcGIS.Geometry.IGeometry CreateSymShape(ISymbol pSymbol,IEnvelope pEnvelope)
{// 根据传入的符号以及外包矩形区域返回对应的几何空间实体(点,线、面)
 //判断是否为“点”符号

 ESRI.ArcGIS.Display.IMarkerSymbol IMarkerSym;
 IMarkerSym = pSymbol as IMarkerSymbol;
 if (IMarkerSym != null)
 {
  // 为“点”符号则返回IEnvelope的中心点
  IArea pArea ;
  pArea = pEnvelope as IArea;
  return pArea.Centroid as IGeometry;
 }
 else
 {
  //判断是否为“线”符号
  ESRI.ArcGIS.Display.ILineSymbol IlineSym;
  ESRI.ArcGIS.Display.ITextSymbol ITextSym;
  IlineSym = pSymbol as ILineSymbol;
  ITextSym = pSymbol as ITextSymbol;
  if(IlineSym != null || ITextSym != null)
  {
   //返回45度的对角线
   ESRI.ArcGIS.Geometry.IPolyline IpLine;
   IpLine = new PolylineClass();
   IpLine.FromPoint = pEnvelope.LowerLeft;
   IpLine.ToPoint  = pEnvelope.UpperRight;
   return IpLine as IGeometry;
  }
  else
  {
   //直接返回一个IEnvelope矩形区域
   return pEnvelope as IGeometry;
  }
 }   
}


(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  
    根据外部关联表格的字段值来符号化图层
    点状符号数据导出与绘制
    面状符号图片填充和渐进色填充的实现
    MapObjects地图填充符号库扩展
    制作等级符号专题图
    MO符号化标注
    ArcEngine符号化

    关于我们 友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.

                   滇ICP备05006901号