PIE SDK柵格拉伸控制
阿新 • • 發佈:2018-12-24
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示例資料/柵格資料/ GF1/ |
視訊路徑 |
百度雲盤地址下/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);View Code |
2.4 示例截圖
(一)4%拉伸效果圖
(二)標準差拉伸效果