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

  • 相关阅读:
    hdu 1863
    数据结构与算法分析–Minimum Spanning Tree(最小生成树)
    hdu 1856 More is better
    hdu 1272 小希的迷宫
    数据结构与算法分析 – Disjoint Set(并查集)
    数字逻辑电路课程设计报告
    高校成绩管理数据库系统的设计与实现
    PL/0编译器(java version) – SymbolTable.java
    [jquery]添加行内容后根据下拉菜单选择内容对比之前已有选项,若有重置再提示
    bootstrap-datetimepicker 日期控件的开始日期
  • 原文地址:https://www.cnblogs.com/yuanbao/p/977951.html
Copyright © 2011-2022 走看看