ArcEngine对影像拉伸显示

最近开始学习ArcEngine对遥感影像处理的方法,对于影像的显示是最基本的。有用过Arcmap的童鞋都会有这样的经验:当一幅影像没有拉伸时其在Arcmap里显示都是一片的灰色,要使其正常显示需要对其拉伸处理,最近在网上也进行相关信息的查找,一般都只是针对半波段进行的拉伸,也可以赋予不同的颜色通道,一般单波段通常拉伸到0~255从黑到白,以下是对单波段数据拉伸的代码显示(其他网站上也会找到):


       public IRasterRenderer StretchRenderer_SigleBand(ESRI.ArcGIS.Geodatabase.IRaster raster, esriRasterStretchTypesEnum sketchType)
        {
            try
            {
                //定义拉伸颜色条
                IRgbColor pFromColor = new RgbColorClass();

                pFromColor.Red = 0;
                pFromColor.Green = 0;
                pFromColor.Blue = 0;
                IRgbColor pToColor = new RgbColorClass();


                pToColor.Red = 255;
                pToColor.Green = 255;
                pToColor.Blue = 255;
                //create the color ramp
                IAlgorithmicColorRamp pRamp = new AlgorithmicColorRampClass();
                pRamp.Size = 255;
                pRamp.FromColor = pFromColor;
                pRamp.ToColor = pToColor;
                bool createColorRamp;


                pRamp.CreateRamp(out createColorRamp);
                //产生拉伸通道
                IRasterStretchColorRampRenderer pStrechRenderer = new RasterStretchColorRampRendererClass();
                IRasterRenderer pRasterRenderer = (IRasterRenderer)pStrechRenderer;
             
  
                //set the renderer properties
                IRaster pRaster = raster;
                pRasterRenderer.Raster = pRaster;
                pRasterRenderer.Update();
           
                pStrechRenderer.BandIndex = 0;
                pStrechRenderer.ColorRamp = pRamp;
                //set the stretch type
                IRasterStretch pStretchType = (IRasterStretch)pRasterRenderer;
                //设置不同的拉伸方法
                pStretchType.StretchType = sketchType;
                pStretchType.StandardDeviationsParam = 2;
                return pRasterRenderer;
                

            }
            catch (System.Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
                return null;
            }
        }

实验结果:

拉伸前:


拉伸后:


但遥感也有很多处理多波段的,找了很久,发现使用IRasterRGBRenderer这个接口,以下是具体代码:

 //
        public IRasterRenderer StretchRenderer_MultiBand(ESRI.ArcGIS.Geodatabase.IRaster raster, esriRasterStretchTypesEnum sketchType)
        {
            try
            {
     
                IRasterRenderer rasterRender = new RasterRGBRendererClass();
                rasterRender.Raster = raster;
                IRasterRGBRenderer rasterStretchRender = rasterRender as IRasterRGBRenderer;
                rasterRender.Update();
                IRasterStretch2 rasterStretchType = rasterStretchRender as IRasterStretch2;
                rasterStretchType.StretchType = sketchType;
                rasterStretchType.StandardDeviationsParam = 2;
                rasterStretchType.StretchStatsType = esriRasterStretchStatsTypeEnum.esriRasterStretchStats_AreaOfView;
                return rasterStretchRender as IRasterRenderer;

            }
            catch (System.Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
                return null;
            }
        }

拉伸前:


拉伸后:


结果显示完好。

在这里感谢中国农大的孙家波学长,他给予宝贵的意见和相关代码。希望以后还能各学ArcEngine的学者多多学习,大家提出宝贵意见。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值