zoukankan      html  css  js  c++  java
  • ArcGis Engine中实现对符号的预览图输出

    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);
     doubledpi = 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;
      }
     }   
    }

  • 相关阅读:
    android 蓝牙串口通讯使用简介
    【C】C语言可变参va_start/va_arg/va_end使用说明
    【Codecs】CABAC深入分析与理解
    【Bugs】VS单步调试的无法进入断点、行号错乱等问题解决方法
    【SVAC1】NAL单元的封装
    【CV】傅里叶描绘子原理及应用简介
    【CV】骨架提取
    【SVAC】千目聚云:SVAC2.0已来 未来发展道路一片光明
    【Debug】当前不会命中断点,源代码与原始版本不同
    【Base】POE供电
  • 原文地址:https://www.cnblogs.com/yuanbao/p/977951.html
Copyright © 2011-2022 走看看