zoukankan      html  css  js  c++  java
  • AE栅格分类渲染问题解决

    一个0-255的波段图像,要分为三类,0-85,85-170,170-255,那么这个断点其实有四个,分别是0,85,170,255

    当按照下面方式写代码时,真正的分类break并没有设置成功。注意黑体部分;

     

            public static void ClassifyRenderRaster(IRasterLayer pRasterLayer, int ClassifyNum)
            {
                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;//this
                pRClassRend.ClassCount = ClassifyNum;
                pRRend.Update();//this
                //省略colorRamp的生成代码
    
    
                int[] breaks = { 0, 25, 50, 75, 100, 200 };
                IFillSymbol fillSymbol = new SimpleFillSymbol() as IFillSymbol;
                for (int i = 0; i < pRClassRend.ClassCount; i++)
                {
                    //fillSymbol.Color = colorRamp.get_Color(i);
                    fillSymbol.Color = GetColor(i);
                    pRClassRend.set_Symbol(i, fillSymbol as ISymbol);
                    pRClassRend.set_Break(i, breaks[i]);//this
                   //pRClassRend.set_Label(i, pRClassRend.get_Break(i).ToString("0.00"));
                 } 
                   pRasterLayer.Renderer = pRRend //this
                 }

    改动后成功。IRasterRenderer.Update须在设置break之后,并且IRasterLayer须赋值为IRasterClassifyColorRampRenderer。

     

            public static void ClassifyRenderRaster(IRasterLayer pRasterLayer, int ClassifyNum)
            {
                IRasterClassifyColorRampRenderer pRClassRend = new RasterClassifyColorRampRenderer() as IRasterClassifyColorRampRenderer;
                IRaster pRaster = pRasterLayer.Raster;
    
                IRasterBandCollection pRBandCol = pRaster as IRasterBandCollection;
                IRasterBand pRBand = pRBandCol.Item(0);
                if (pRBand.Histogram == null)
                {
                    pRBand.ComputeStatsAndHist();
                }
    
                pRClassRend.ClassCount = ClassifyNum;
    
                int[] breaks = { 0, 25, 50, 75, 100, 200 };
                IFillSymbol fillSymbol = new SimpleFillSymbol() as IFillSymbol;
                for (int i = 0; i < pRClassRend.ClassCount; i++)
                {
                    fillSymbol.Color = colorRamp.get_Color(i);
                    fillSymbol.Color = GetColor(i);
                    pRClassRend.set_Symbol(i, fillSymbol as ISymbol);
                    pRClassRend.set_Break(i, breaks[i]);
                    //pRClassRend.set_Label(i, pRClassRend.get_Break(i).ToString("0.00"));
                }
    
                //IRasterRenderer pRRend = pRClassRend as IRasterRenderer;
                //pRRend.Update(); 这两句可以省略
                pRasterLayer.Renderer = pRClassRend as IRasterRenderer; //this
            }

      

    开始主要参照这几个,没有解决

    AE 栅格图分级渲染 : 参照这里不重新设置break的话(就是不是自定义分类),只设置每个分级的颜色之类的,是可以的,

    arcengine栅格渲染(栅格重分类) IRasterClassifyColorRampRenderer :未测试

    IRasterClassifyColorRampRenderer 使用时的一些奇怪的地方: 这个顺序不行吧?

  • 相关阅读:
    D触发器的使用小结
    CAN通信帧ID的含义解析? (转载)
    mcp2515屏蔽寄存器和过滤寄存器的学习
    spi调试步骤,mcp2515调试整理
    最近工作小结2019.11.24
    Can总线上的电平及物理层仲裁
    can总线学习网上资料汇总
    can总线的远程帧(遥控帧)—说的很形象
    在IAR平台建立STC8ASK64S4A12单片机工程
    cortex-m系列的区别(图解)及今日碎片学习笔记
  • 原文地址:https://www.cnblogs.com/GISRSMAN/p/7306119.html
Copyright © 2011-2022 走看看