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

  }

 }   

}

引用:http://www.gissky.com/Gis/ShowSContent.asp?SbjID=1&ID=1133

 

下面是自己用VC开发出来的符号浏览器:

ArcEngine中实现对符号的预览图输出 - zfgis - zfgis的博客

ArcEngine中实现对符号的预览图输出 - zfgis - zfgis的博客

posted on 2010-03-27 14:46  zfgis  阅读(767)  评论(0编辑  收藏  举报