PIE SDK栅格拉伸控制
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%拉伸效果图
(二)标准差拉伸效果