最近开始学习ArcEngine对遥感影像处理的方法,对于影像的显示是最基本的。有用过Arcmap的童鞋都会有这样的经验:当一幅影像没有拉伸时其在Arcmap里显示都是一片的灰色,要使其正常显示需要对其拉伸处理,最近在网上也进行相关信息的查找,一般都只是针对半波段进行的拉伸,也可以赋予不同的颜色通道,一般单波段通常拉伸到0~255从黑到白,以下是对单波段数据拉伸的代码显示(其他网站上也会找到):
public IRasterRenderer StretchRenderer_SigleBand(ESRI.ArcGIS.Geodatabase.IRaster raster, esriRasterStretchTypesEnum sketchType)
{
try
{
//定义拉伸颜色条
IRgbColor pFromColor = new RgbColorClass();
pFromColor.Red = 0;
pFromColor.Green = 0;
pFromColor.Blue = 0;
IRgbColor pToColor = new RgbColorClass();
pToColor.Red = 255;
pToColor.Green = 255;
pToColor.Blue = 255;
//create the color ramp
IAlgorithmicColorRamp pRamp = new AlgorithmicColorRampClass();
pRamp.Size = 255;
pRamp.FromColor = pFromColor;
pRamp.ToColor = pToColor;
bool createColorRamp;
pRamp.CreateRamp(out createColorRamp);
//产生拉伸通道
IRasterStretchColorRampRenderer pStrechRenderer = new RasterStretchColorRampRendererClass();
IRasterRenderer pRasterRenderer = (IRasterRenderer)pStrechRenderer;
//set the renderer properties
IRaster pRaster = raster;
pRasterRenderer.Raster = pRaster;
pRasterRenderer.Update();
pStrechRenderer.BandIndex = 0;
pStrechRenderer.ColorRamp = pRamp;
//set the stretch type
IRasterStretch pStretchType = (IRasterStretch)pRasterRenderer;
//设置不同的拉伸方法
pStretchType.StretchType = sketchType;
pStretchType.StandardDeviationsParam = 2;
return pRasterRenderer;
}
catch (System.Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
return null;
}
}
实验结果:
拉伸前:
拉伸后:
但遥感也有很多处理多波段的,找了很久,发现使用IRasterRGBRenderer这个接口,以下是具体代码:
//
public IRasterRenderer StretchRenderer_MultiBand(ESRI.ArcGIS.Geodatabase.IRaster raster, esriRasterStretchTypesEnum sketchType)
{
try
{
IRasterRenderer rasterRender = new RasterRGBRendererClass();
rasterRender.Raster = raster;
IRasterRGBRenderer rasterStretchRender = rasterRender as IRasterRGBRenderer;
rasterRender.Update();
IRasterStretch2 rasterStretchType = rasterStretchRender as IRasterStretch2;
rasterStretchType.StretchType = sketchType;
rasterStretchType.StandardDeviationsParam = 2;
rasterStretchType.StretchStatsType = esriRasterStretchStatsTypeEnum.esriRasterStretchStats_AreaOfView;
return rasterStretchRender as IRasterRenderer;
}
catch (System.Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
return null;
}
}
拉伸前:
拉伸后:
结果显示完好。
在这里感谢中国农大的孙家波学长,他给予宝贵的意见和相关代码。希望以后还能各学ArcEngine的学者多多学习,大家提出宝贵意见。