文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>在ArcGis Engine中实现对符号的预览,生成预览图片

在ArcGis Engine中实现对符号的预览,生成预览图片

时间:2010-09-17  来源:aqi0530

ArcGis Engine中实现对符号的预览图输出-2
在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;
  }
}   
}
收藏 分享 评分
相关阅读 更多 +
排行榜 更多 +
战术任务

战术任务

飞行射击 下载
愤怒的兽人战争安卓版

愤怒的兽人战争安卓版

冒险解谜 下载
粉碎射手跑安卓版

粉碎射手跑安卓版

冒险解谜 下载