ArcEngine对栅格图像进行分级渲染

ArcEngine对矢量数据进行风格化实在是得心应手,同样的对于栅格图像也能进行风格化!以前没接触过,今天正好需要,做出了栅格图像的渲染!下面实现的思路:
1.定义渲染的一系列接口
2.判断图像是否建立了直方图,如果没有则进行创建。
3.定义颜色序列,为渲染提供渲染的方案。
4.调用Render方法进行渲染。
下面是代码:有两个方法,一个是加载栅格数据,一个是进行渲染,接着在事件里面调用方法,实现图像渲染!
///
            /// 栅格分类专题图
            ///
            /// 栅格图层
            public static void funColorForRaster_Classify(IRasterLayer pRasterLayer)
            {
                  IRasterClassifyColorRamp Renderer pRClassRend = new RasterClassifyColorRampR enderer() as IRasterClassifyColorRamp Renderer;
                  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();
下面是渲染前后的效果图:
ArcEngine对栅格图像进行分级渲染

ArcEngine对栅格图像进行分级渲染
希望对大家有所帮助!
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值