打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Arcgis style/serverstyle符号库管理器

搞了一个星期终于把符号管理器写好了。用    IStyleGallery ,IStyleGalleryStorage 接口更新符号时总是提示com错误,即使释放资源也不行,后来才发现原来是用arcgis的symbocontrol控件会一直点用样式文件,导致更新时出错,没办法,只能不用arcgis的控件了,只能把style生成图片显示在listview中。

以下是由symbol生成图片的方法,也是从网上查的,在此分享。

      /// <summary>
         ///  由symbol创建图片
         /// </summary>
         /// <param name="pSymbol"></param>
         /// <param name="iwidth"></param>
         /// <param name="iheight"></param>
         /// <param name="styleclass">styleclass类型集名称</param>
         /// <returns></returns>
         public System.Drawing.Bitmap SymbolToBitmp(ESRI.ArcGIS.Display.ISymbol pSymbol, int iwidth, int iheight, string styleclass)
         {
             //根据高宽创建图象
             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, styleclass);
 
             System.IntPtr hdc = new IntPtr();
             hdc = gImage.GetHdc();
 
 
             ISimpleTextSymbol symbol1 = pSymbol as ISimpleTextSymbol;
             if (symbol1 != null)
             {
                 string text1 = symbol1.Text;
                 bool flag1 = symbol1.Clip;
                 symbol1.Text = "AaBbYyZz";
             }
          
 
 
             //将符号的形状绘制到图象中
             pSymbol.SetupDC((int)hdc, pDisplayTransformation);
             pSymbol.Draw(pGeo);
             pSymbol.ResetDC();
             gImage.ReleaseHdc(hdc);
             gImage.Dispose();  
 
             return bmp;
 
         }
         /// <summary>
         /// 
         /// </summary>
         /// <param name="pSymbol"></param>
         /// <param name="pEnvelope"></param>
         /// <param name="styleclass"></param>
         /// <returns></returns>
         private ESRI.ArcGIS.Geometry.IGeometry CreateSymShape(ISymbol pSymbol, IEnvelope pEnvelope, string styleclass)
         {           
             switch (styleclass)
             {
                 case "Marker Symbols":
                     IArea pArea;
                     pArea = pEnvelope as IArea;
                     return pArea.Centroid as IGeometry;
                 case "Line Symbols":
                 case "Text Symbols":
                     //判断是否为“线”符号  
                     ESRI.ArcGIS.Geometry.IPolyline IpLine;
                     IpLine = new PolylineClass();
 
                     IPoint fpt = new PointClass();
                     IPoint tpt = new PointClass();
 
                     fpt.PutCoords(pEnvelope.LowerLeft.X, (pEnvelope.LowerLeft.Y + pEnvelope.UpperRight.Y) / 2);
                     tpt.PutCoords(pEnvelope.UpperRight.X, (pEnvelope.LowerLeft.Y + pEnvelope.UpperRight.Y) / 2);
 
                     IpLine.FromPoint = fpt;
                     IpLine.ToPoint = tpt;
 
                     return IpLine as IGeometry;
 
                 case "Fill Symbols":
                     //直接返回一个IEnvelope矩形区域
                     return pEnvelope as IGeometry;             
                 default:
                     return pEnvelope as IGeometry;
             }
         }        
 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
幼科折衷
2686960127697075503.bmp (640×487)
科学家发现,独特的胰腺干细胞再生疗法,有望治愈糖尿病!
如何在MFC的picture控件中动态显示图片
ArcEngine获取ArcGIS Server上的地图服务
设置图片透明度的四种方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服