如何解决栅格色彩拉伸后TocControl里的图例不能更新的问题2

12 篇文章 3 订阅
12 篇文章 0 订阅

    之前对栅格图层拉伸渲染后图例不能更新的问题做了深入的探索和研究,虽然找到了解决办法,但是感觉还是和ArcMap的处理方式有差异,因为ArcMap做相同处理后其图例项的符号转换为IColorRampSymbol后,LegendClassIndex属性都是0。因为偶然的一瞥,发现RasterStretchColorRampRendererClass实现了IRasterRendererColorRamp接口,这个接口引起我的注意。实验发现,使用IRasterStretchColorRampRenderer接口的ColorRamp属性修改色带后图例不能自动更新,而如果转换为IRasterRendererColorRamp接口,然后使用IRasterRendererColorRamp接口的ColorRamp修改色带,图例就可以自动更新了。综上所述,对前一篇的研究结果做一下修正,以下是完整代码:

                IRasterLayer pRasterLayer = wndMap.CustomProperty as IRasterLayer;
                IRasterRenderer pRasterRender = pRasterLayer.Renderer;
                IRasterRenderer pNewRasterRender = null;

                IRgbColor pFromColor = new RgbColorClass();
                pFromColor.RGB = 0xffffff;
                IRgbColor pToColor = new RgbColorClass();
                pToColor.RGB = 0x000000;
                IAlgorithmicColorRamp pAlgorithmColorRamp = new AlgorithmicColorRampClass();
                pAlgorithmColorRamp.Size = 256;
                pAlgorithmColorRamp.FromColor = pFromColor;
                pAlgorithmColorRamp.ToColor = pToColor;
                bool bColorRampCreated = false;
                pAlgorithmColorRamp.CreateRamp(out bColorRampCreated);

                IRasterStretchColorRampRenderer pRasterStretchColorRamp = new RasterStretchColorRampRendererClass();                
                pNewRasterRender = pRasterStretchColorRamp as IRasterRenderer;
                pNewRasterRender.Raster = pRasterLayer.Raster;
                pRasterStretchColorRamp.BandIndex = 0;
                IRasterStretch pRasterStretch = pNewRasterRender as IRasterStretch;
                pRasterStretch.StretchType = esriRasterStretchTypesEnum.esriRasterStretch_MinimumMaximum;

                //应该使用IRasterRendererColorRamp的ColorRamp修改色阶,不要用IRasterStretchColorRampRenderer的ColorRamp修改色阶
                //否则图例不能自动更新
                IRasterRendererColorRamp pRasterRendererColorRamp = pRasterStretchColorRamp as IRasterRendererColorRamp;
                pRasterRendererColorRamp.ColorRamp = pAlgorithmColorRamp as IColorRamp;

                pNewRasterRender.Update();
                pRasterLayer.Renderer = pNewRasterRender;


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深蓝静音

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值