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

本文介绍如何在ArcGIS Engine中实现符号的预览图生成。通过调用SymbolToBitmp方法,输入符号及尺寸参数,即可生成指定大小的预览图片。此方法适用于点、线等不同类型的符号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值