在咱們的實際應用中,對於通常16bit或者更大比特深度的影像,像元值都是大於255的。這種狀況下,RGB的顯示器是不可以直接使用像元值進行顯示的,須要將像元值換算到0~255的區間內以用於顯示。經常使用的加強方式是經過拉伸來增大柵格顯示的視覺對比度,以生成一副更清晰的影像,從而使某些要素變得更容易識別。ide
經常使用的拉伸方式包括標包括最多見的標準差(Standard Deviation),最大最小值( Minimum–Maximum),直方圖均衡( Histogram Equalize)等等。對於不一樣柵格數據狀況,應選擇最適合其的拉伸方式。spa
第一步code |
獲取柵格圖層的Render並進行接口轉換。視頻 |
第二步對象 |
設置拉伸類型。blog |
第三步教程 |
根據拉伸類型進行參數設置。接口 |
第四步事件 |
觸發渲染改變事件,從新繪製。ci |
接口/類 |
方法 |
說明 |
Carto. IRasterStretch |
StretchType |
柵格拉伸類型屬性 |
LinearStretchPercent |
拉伸百分比屬性 |
|
SetMinimumMaximum |
設置指定波段拉伸顯示的最大值、最小值 |
項目路徑 |
百度雲盤地址下/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); |
(一)4%拉伸效果圖
(二)標準差拉伸效果