1. 功能简介
在我们的实际应用中,对于一般16bit或者更大比特深度的影像,像元值都是大于255的。这种情况下,RGB的显示器是不能够直接使用像元值进行显示的,需要将像元值换算到0~255的区间内以用于显示。常用的增强方式是通过拉伸来增大栅格显示的视觉对比度,以生成一副更清晰的影像,从而使某些要素变得更容易识别。
常用的拉伸方式包括标包括最常见的标准差(Standard Deviation),最大最小值( Minimum–Maximum),直方图均衡( Histogram Equalize)等等。对于不同栅格数据情况,应选择最适合其的拉伸方式。
2. 功能实现说明
2.1. 实现思路及原理说明
第一步 | 获取栅格图层的Render并进行接口转换。 |
第二步 | 设置拉伸类型。 |
第三步 | 根据拉伸类型进行参数设置。 |
第四步 | 触发渲染改变事件,重新绘制。 |
2.2. 核心接口与方法
接口/类 | 方法 | 说明 |
Carto. IRasterStretch | StretchType | 栅格拉伸类型属性 |
LinearStretchPercent | 拉伸百分比属性 | |
SetMinimumMaximum | 设置指定波段拉伸显示的最大值、最小值 |
2.3. 示例代码
项目路径 | 百度云盘地址下/PIE示例程序/07图层渲染/11.栅格拉伸控制 |
数据路径 | 百度云盘地址下/PIE示例数据/栅格数据/01.GF1/ GF1_PMS1_E116.5_N39.4_20131127_L1A0000117600-MSS1.tif |
视频路径 | 百度云盘地址下/PIE视频教程/07图层渲染/11.栅格拉伸控制.avi |
示例代码 | |
1 方法(一)百分比拉伸 2 if (mapControlMain.ActiveView.CurrentLayer == null) return; 3 //获取待拉伸的图层 4 IRasterLayer rasterLayer = mapControlMain.ActiveView.CurrentLayer as IRasterLayer; 5 if (rasterLayer == null) 6 return; 7 //获取拉伸对象 8 IRasterRender render = rasterLayer.Render; 9 IRasterStretch stretch = render as IRasterStretch;10 //设置拉伸类型11 stretch.StretchType = PIE.Carto.RasterStretchType.RasterStretch_PercentMinimumMaximum;12 stretch.LinearStretchPercent = 4.0;13 rasterLayer.RaiseRenderChanged();14 //刷新地图15 mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);16 17 方法(二)标准差拉伸18 if (mapControlMain.ActiveView.CurrentLayer == null) return;19 //获取待拉伸的图层20 IRasterLayer rasterLayer = mapControlMain.ActiveView.CurrentLayer as IRasterLayer;21 if (rasterLayer == null) return;22 //获取拉伸对象23 IRasterRender render = rasterLayer.Render;24 IRasterStretch stretch = render as IRasterStretch;25 //设置拉伸类型26 stretch.StretchType = PIE.Carto.RasterStretchType.RasterStretch_StandardDeviations;27 rasterLayer.RaiseRenderChanged(); mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll); |
2.4. 示例截图
(一)4%拉伸效果图
(二)标准差拉伸效果