『公告』 预祝您龙年大吉,万事如意, 过节期间, 大家如需数据服务,请拨打400 或直接添加客服微信,再祝大家龙年,心想事成。
关注我们 新浪 腾讯

ArcGis Engine中实现对符号的预览图输出

ArcGis Engine中实现对符号的预览图输出
在ArcGis Engine中实现对符号的预览,生成预览图片。使用的时候只要调用SymbolToBitmp(符号,宽,高)就可以返回生成的图片了。

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

  }

 }   

}

      京ICP备2025132830号-1 京公网安备 号