zoukankan      html  css  js  c++  java
  • ArcEngine:栅格分级渲染

    ArcEngine对矢量数据进行风格化实在是得心应手,同样的对于栅格图像也能进行风格化!以前没接触过,今天正好需要,做出了栅格图像的渲染!下面实现的思路:

    1.定义渲染的一系列接口
    2.判断图像是否建立了直方图,如果没有则进行创建。
    3.定义颜色序列,为渲染提供渲染的方案。
    4.调用Render方法进行渲染。
    下面是代码:有两个方法,一个是加载栅格数据,一个是进行渲染,接着在事件里面调用方法,实现图像渲染!
    ///
            /// 栅格分类专题图
            ///
            /// 栅格图层
            public static void funColorForRaster_Classify(IRasterLayer pRasterLayer)
            {
                IRasterClassifyColorRampRenderer pRClassRend = new RasterClassifyColorRampRenderer() as IRasterClassifyColorRampRenderer;
                IRasterRenderer pRRend = pRClassRend as IRasterRenderer;
     
                IRaster pRaster = pRasterLayer.Raster;
                IRasterBandCollection pRBandCol = pRaster as IRasterBandCollection;
                IRasterBand pRBand = pRBandCol.Item(0);
                if (pRBand.Histogram == null)
                {
                    pRBand.ComputeStatsAndHist();
                }
                pRRend.Raster = pRaster;
                pRClassRend.ClassCount = 10;
                pRRend.Update();
     
                IRgbColor pFromColor = new RgbColor() as IRgbColor;
                pFromColor.Red = 255;
                pFromColor.Green = 0;
                pFromColor.Blue = 0;
                IRgbColor pToColor = new RgbColor() as IRgbColor;
                pToColor.Red = 0;
                pToColor.Green = 0;
                pToColor.Blue = 255;
     
                IAlgorithmicColorRamp colorRamp = new AlgorithmicColorRamp() as IAlgorithmicColorRamp;
                colorRamp.Size = 10;
                colorRamp.FromColor = pFromColor;
                colorRamp.ToColor = pToColor;          
                bool createColorRamp;
     
                colorRamp.CreateRamp(out createColorRamp);
     
                IFillSymbol fillSymbol = new SimpleFillSymbol() as IFillSymbol;
                for (int i = 0; i < pRClassRend.ClassCount; i++)
                {
                    fillSymbol.Color = colorRamp.get_Color(i);
                    pRClassRend.set_Symbol(i, fillSymbol as ISymbol);
                    pRClassRend.set_Label(i, pRClassRend.get_Break(i).ToString("0.00"));
                }
                pRasterLayer.Renderer = pRRend;
            }
            
            ///
            /// 打开遥感图像
            ///
            /// 图像的地址
            /// IRasterLayer
            private IRasterLayer OpenImage(string imagePath)
            {
                string ws = Path.GetDirectoryName(imagePath);
                string fbs = Path.GetFileName(imagePath);
     
                IWorkspaceFactory pWork = new RasterWorkspaceFactory();
                IRasterWorkspace pRasterWs = pWork.OpenFromFile(ws,0) as IRasterWorkspace;
                IRasterDataset pRasterDataset = pRasterWs.OpenRasterDataset(fbs);
                
                IRasterLayer pRasterLayer = new RasterLayer() as IRasterLayer;
                pRasterLayer.CreateFromDataset(pRasterDataset);
                return pRasterLayer;            
            }
    事件的逻辑:
    axMapControl1.Map.AddLayer(OpenImage(filePath));
    axMapControl1.ActiveView.Refresh();
    funColorForRaster_Classify(axMapControl1.get_layer(0) as IRasterLayer);//only one RasterLayer
    axMapControl1.Activeview.Refresh();
    下面是渲染前后的效果图:



    希望对大家有所帮助!
  • 相关阅读:
    [BZOJ] 2276: [Poi2011]Temperature
    [Codevs] 5037 线段树练习4加强版
    [Codevs] 4919 线段树练习4
    [Codevs] 1082 线段树练习3
    [Codevs] 1080 线段树练习
    [Codevs] 1081 线段树练习 2 ----“分块!”
    1629: [Usaco2007 Demo]Cow Acrobats
    Kruskal || BZOJ 1601: [Usaco2008 Oct]灌水 || Luogu P1550 [USACO08OCT]打井Watering Hole
    SET || BZOJ 1588: [HNOI2002]营业额统计 || Luogu P2234 [HNOI2002]营业额统计
    线段树合并+并查集 || BZOJ 2733: [HNOI2012]永无乡 || Luogu P3224 [HNOI2012]永无乡
  • 原文地址:https://www.cnblogs.com/ahnucao/p/4938791.html
Copyright © 2011-2022 走看看