最近有同事问我ArcMap中的色带反转怎么实现,刚好我在整理以前的项目,找到了一些源码备忘。

先说下思路,简单来说就是得到栅格图层的IRasterRenderer,转换为IRasterStretchColorRampRenderer,在将这个接口转换为IRasterStretch,IRasterStretch中有个Invert的方法可以控制色带是否反转。下面详细说下实现过程。

1、重写一个可以添加图片的ComboBox

    public partial class ComboboxSymbol : ComboBox{public ComboboxSymbol(){DrawMode = DrawMode.OwnerDrawFixed;DropDownStyle = ComboBoxStyle.DropDownList;}//重写函数protected override void OnDrawItem(DrawItemEventArgs e){e.DrawBackground();e.DrawFocusRectangle();try{//显示图片Image image = (Image)Items[e.Index];System.Drawing.Rectangle rect = e.Bounds;e.Graphics.DrawImage(image, rect);}catch{}finally{base.OnDrawItem(e);}}}

2、设计一个窗体,就下图中的几个按钮,另外添加一个隐藏显示的AxSymbologyControl,用来调用显示系统色带

3、窗体下的代码如下

        private IRasterLayer _pRasyerLayer = null;public ColorRamp(IRasterLayer pRasterLayer,int X,int Y){InitializeComponent();_pRasyerLayer = pRasterLayer;this.Location = new System.Drawing.Point(X, Y); //得到当前鼠标位置,用来确定窗体显示的位置}private void btnCancel_Click(object sender, EventArgs e){this.Close();}private void LoadSymbolProperty(IRasterLayer mRasterLayer){IRasterStretchColorRampRenderer pStretchRen;try{pStretchRen = (IRasterStretchColorRampRenderer)mRasterLayer.Renderer;IRasterStretch pRasterStretch = pStretchRen as IRasterStretch;if (pRasterStretch.Invert){ckInvert.Checked = true;}}catch (Exception ex){WriteLog.LogWritter.WriteLogToFile(ex.Message);return;}try{//加载系统样式string sInstall = ESRI.ArcGIS.RuntimeManager.ActiveRuntime.Path;string defaultStyle = System.IO.Path.Combine(sInstall, "Styles\\ESRI.ServerStyle");axSymbologyControl1.LoadStyleFile(defaultStyle);axSymbologyControl1.StyleClass = esriSymbologyStyleClass.esriStyleClassColorRamps;ISymbologyStyleClass symbologyStyleClass = axSymbologyControl1.GetStyleClass(esriSymbologyStyleClass.esriStyleClassColorRamps);IStyleGalleryItem styleGalleryItem = new ServerStyleGalleryItem();styleGalleryItem.Item = pStretchRen.ColorRamp;styleGalleryItem.Name = "mySymbol";symbologyStyleClass.AddItem(styleGalleryItem, 0);symbologyStyleClass.SelectItem(0);//将样式转为图片并添加入ComboBoxfor (int i = 0; i < symbologyStyleClass.get_ItemCount(symbologyStyleClass.StyleCategory); i++){stdole.IPictureDisp picture = symbologyStyleClass.PreviewItem(symbologyStyleClass.GetItem(i), cbSymbol.Width, cbSymbol.Height);System.Drawing.Image image = System.Drawing.Image.FromHbitmap(new System.IntPtr(picture.Handle));cbSymbol.Items.Add(image);}if (cbSymbol.Items.Count > 0)cbSymbol.SelectedIndex = 0;}catch (Exception ex){WriteLog.LogWritter.WriteLogToFile(ex.Message);}}private void SetRasterSymbol(IRasterLayer mRasterLayer){try{//获取选择的序号int symbol_index = cbSymbol.SelectedIndex;ISymbologyStyleClass symbologyStyleClass = axSymbologyControl1.GetStyleClass(esriSymbologyStyleClass.esriStyleClassColorRamps);IStyleGalleryItem mStyleGalleryItem = symbologyStyleClass.GetItem(symbol_index);//获取选择的符号IColorRamp colorramp_select = (IColorRamp)mStyleGalleryItem.Item;IRasterStretchColorRampRenderer pStretchRen = (IRasterStretchColorRampRenderer)mRasterLayer.Renderer;pStretchRen.ColorRamp = colorramp_select;IRasterStretch pRasterStretch = pStretchRen as IRasterStretch;//控制色带是否反转if (ckInvert.Checked){pRasterStretch.Invert = true;}else{pRasterStretch.Invert = false;}}catch (Exception ex){WriteLog.LogWritter.WriteLogToFile(ex.Message);this.Close();}}private void ColorRamp_Load(object sender, EventArgs e){LoadSymbolProperty(_pRasyerLayer);}private void btnOk_Click(object sender, EventArgs e){SetRasterSymbol(_pRasyerLayer);this.DialogResult = DialogResult.OK;this.Close();}}

Arcgis Engine 实现单波段栅格图层色带渲染(包括色带反转)相关推荐

  1. ArcGIS Engine开发教程之图层符号化(四)——符号化之Renderer( 渲染)体系

     符号化之Renderer( 渲染)体系 ArcGIS Engine9.3对GIS数据的符号化分为矢量数据渲染和栅格数据渲染两大类.接下来分别介绍FeatureRender和RasterRende ...

  2. arcgis for js叠加栅格图层(Raster Layer)

    其实呢,这个问题或许与栅格图层(Raster Layer)关系并不十分大,也可能所有类型的图层都有这个问题,我对arcgis尚不十分了解,目前只在栅格图层遇到问题,所以先记下来,存疑. 栅格图层啥问题 ...

  3. ArcGIS 图像合并至新栅格图层(Mosaic To New Raster和Mosaic)

    1.介绍 Mosaic To New Raster 1)Input Raster.输入图层,没什么好说的,把要合并的图层加进来就好了:2)Output Location.这个是结果文件保存的文件夹,注 ...

  4. Arcgis Engine矢量裁剪栅格,调用Mask工具相关代码

    http://46aae4d1e2371e4aa769798941cef698.devproxy.yunshipei.com/hellolib/article/details/42029373

  5. ArcGIS介绍:ArcObjects、 ArcGIS Desktop、ArcGIS Engine 和 ArcSDE、ArcIMS、ArcGIS Server

    版权声明 :转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://hgg2002.blogbus.com/logs/45875381.html 在ArcGIS 9系列产品中,ArcGI ...

  6. ArcGIS Engine开发---图层符号化

    使用ServerStyle 如果熟悉ArcGIS Desktop的使用,就会对Style符号库文件有所了解,相对应的在ArcGIS Engine开发中对应的是ServerStyle符号库,它的结构体系 ...

  7. 【Arcgis Engine开发】AE开发把影像或者矢量加载到图层

    AE开发把影像或者加载到图层 1.创建一个类工厂 2.使用类工厂创建一个要使用的工作区 3.使用工作区打开并得到图层的dataset 4.把dataset装入到新建的图层实例 5.把图层加载到MapC ...

  8. 《ArcGIS Engine+C#实例开发教程》第七讲 图层符号选择器的实现2

    <ArcGIS Engine+C#实例开发教程>第七讲 图层符号选择器的实现2 原文:<ArcGIS Engine+C#实例开发教程>第七讲 图层符号选择器的实现2 摘要:在第 ...

  9. ArcGIS基础实验操作100例--实验49按分区划分栅格图层

    本实验专栏参考自汤国安教授<地理信息系统基础实验操作100例>一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 高级编辑篇--实验49 按分区划分栅格图层 目录 一 ...

最新文章

  1. 数位DP 回文序列 POJ-3280 Cheapest Palindrome
  2. 《C语言程序设计基础》第2章作业,清华大学出版社-图书详情-《C语言程序设计基础实验与题解》...
  3. Markdown基本语法使用
  4. apache 访问出现403 Forbidden
  5. 用CMake编译运行在网上下载的源文件src
  6. spark mapreduce术语梳理
  7. 翻译职称计算机能力,2018年职称计算机word2003考点辅导:用好Office2003中的翻译功能...
  8. Win7系统中Cookie位置
  9. iOS设置UIWebView的UserAgent
  10. 无法确定域的标识_标识标牌设计的基本要求:虽然是基本要求,你未必也都知道哦...
  11. Nodejs中puppeteer通过Event抓取HAR数据
  12. java开源对象池,java 对象池 - 差不多先生的个人空间 - OSCHINA - 中文开源技术交流社区...
  13. Java完全自学手册,从外包到大厂,再到年薪100万都靠它
  14. 在网页中实现:手势解锁密码
  15. windows批处理for循环用法
  16. Weblogic10.3.6反序列化漏洞补丁更新
  17. 软件体系结构期末考试总结
  18. wordpress主题开发教程
  19. [计算机网络]十、TCP的拥塞控制和4个计时器、常用协议原理和命令
  20. Ping++ 牵手招商银行,正式为商户开放一网通支付渠道

热门文章

  1. 前端使用jsencrypt的rsa加密算法加密信息后,在openresty搭建的网关处进行密文解密遇到的坑
  2. kylin v10系统_Kylin10正式版 银河麒麟桌面操作系统(Kylin) V10 x86/兆芯版/海光版下载-520下载...
  3. 【C++机考1反思】铁匠铺结构化设计问题
  4. AH6953锂电池9V升12V输出大电流3A-5A
  5. Activiti6.0 (三)核心API
  6. Java引用界的四大天王
  7. python下批量下载专利-欧洲专利局
  8. C++深度模型部署bili视频的tensorrt onnx和知乎的libtorch
  9. 第六章 林冲为什么休妻
  10. 食品赛道崛起,舌尖美食走俏礼品市场