ArcGis Engine中实现对符号的预览图输出_map2shp_新浪博客

在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;

  }

 }    

}

本篇文章来源于 GIS空间站 转载请以链接形式注明出处 网址:http://www.gissky.net/Article/1703.htm


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值