using System;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.DataSourcesRaster;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.esriSystem;
using DevComponents.DotNetBar.Controls;
namespace CASC.Class
{
///
/// 渲染栅格图层
///
class RenderRasterLayer
{
ILayer pLayerR;
public RenderRasterLayer(ILayer pLayer)
{
this.pLayerR = pLayer;
}
///
/// RGB渲染,必须为多波段影像
///
public void RGBRenderer(int bandred, int bandgreen, int bandblue, int alpha,
int styleindex, int param,bool backgorund,IColor pcolor)
{
IRasterLayer rasterLayer = this.pLayerR as IRasterLayer;
IRaster raster = rasterLayer.Raster;
IRasterBandCollection bandCol = raster as IRasterBandCollection;
if (bandCol.Count < 3) { return; }
IRasterRGBRenderer2 rasterRGBRen = new RasterRGBRendererClass();
IRasterRenderer rasterRen = (IRasterRenderer)rasterRGBRen;
rasterRen.Raster = raster;
rasterRen.Update();
if (bandred > -1)
{
rasterRGBRen.UseRedBand = true;
rasterRGBRen.RedBandIndex = bandred;
}
else
{
rasterRGBRen.UseRedBand = false;
}
if (bandgreen > -1)
{
rasterRGBRen.UseGreenBand = true;
rasterRGBRen.GreenBandIndex = bandgreen;
}
else
{
rasterRGBRen.UseGreenBand = false;
}
if (bandblue > -1)
{
rasterRGBRen.UseBlueBand = true;
rasterRGBRen.BlueBandIndex = bandblue;
}
else
{
rasterRGBRen.UseBlueBand = false;
}
if (alpha > -1)
{
rasterRGBRen.UseAlphaBand = true;
rasterRGBRen.AlphaBandIndex = alpha;
}
else
{
rasterRGBRen.UseAlphaBand = false;
}
IRasterStretch2 rasterStretchType = (IRasterStretch2)rasterRGBRen;
if (styleindex ==0)
{
rasterStretchType.StretchType =
esriRasterStretchTypesEnum.esriRasterStretch_StandardDeviations;
rasterStretchType.StandardDeviationsParam = param;
}
else if (styleindex == 1)
{
rasterStretchType.StretchType =
esriRasterStretchTypesEnum.esriRasterStretch_HistogramEqualize;
}
else if (styleindex == 2)
{
rasterStretchType.StretchType =
esriRasterStretchTypesEnum.esriRasterStretch_HistogramSpecification;
}
else if (styleindex == 3)
{
esriRasterStretchTypesEnum.esriRasterStretch_MinimumMaximum;
rasterStretchType.StretchType =
}
else
{
esriRasterStretchTypesEnum.esriRasterStretch_NONE;
rasterStretchType.StretchType =
}
rasterStretchType.Invert = true;
rasterStretchType.Background = backgorund;
rasterStretchType.BackgroundColor = pcolor;
rasterRen.Update();
rasterLayer.Renderer = rasterRGBRen as IRasterRenderer;
}
///
/// 分类色带渲染
///
///
分类数
///
色带
public void ClassifyColorRampRenderer( IColorRamp colorRamp,string
classfield,DataGridViewX datagridview)
{
try
{
IRasterLayer pRasterLayer = this.pLayerR as IRasterLayer;
IRaster raster = pRasterLayer.Raster;
IRasterRenderer pRasterRenderer = new
RasterClassifyColorRampRendererClass();
pRasterRenderer.Raster = raster;
IRasterClassifyColorRampRenderer classifyRenderer = pRasterRenderer
as IRasterClassifyColorRampRenderer;
int classcount = datagridview.RowCount;
classifyRenderer.ClassCount = classcount;
classifyRenderer.ClassField = classfield;
for (int i = 0; i < datagridview.RowCount; i++)
{
classifyRenderer.set_Break(i,double.Parse( datagridview.Rows[i].Cells[0].Value.ToS
tring()));
}
pRasterRenderer.Update();
colorRamp.Size = 15;
bool pOk;
colorRamp.CreateRamp(out pOk);
//create symbol for the classes
IFillSymbol fillSymbol = new SimpleFillSymbolClass();
for (int i = 0; i < classifyRenderer.ClassCount-1; i++)
{
fillSymbol.Color = colorRamp.get_Color(i);
classifyRenderer.set_Symbol(i, (ISymbol)fillSymbol);
classifyRenderer.set_Label(i,
classifyRenderer.get_Break(i).ToString() + "—" +
datagridview.Rows[i].Cells[1].Value.ToString());
}
pRasterLayer.Renderer = classifyRenderer as IRasterRenderer;
}
catch
{ }
}
///
/// 色带渲染,类似于拉伸渲染,这里没找到相应方法
///
public void ColorMapRenderer()
{
try
{
IRasterLayer pRasterLayer = this.pLayerR as IRasterLayer;
IRasterRenderer pRasterRenderer = new RasterColormapRendererClass();
pRasterRenderer.Raster = pRasterLayer.Raster;
}
catch
{ }
}
///
/// 唯一值渲染
///
///
public void UniqueValueRenderer(IColorRamp colorRamp,string renderfiled)
{
try
{
IRasterLayer pRasterLayer = this.pLayerR as IRasterLayer;
IRasterUniqueValueRenderer uniqueValueRenderer = new
RasterUniqueValueRendererClass();
IRasterRenderer pRasterRenderer = uniqueValueRenderer as
IRasterRenderer;
IUniqueValues uniqueValues = new UniqueValuesClass();
IRasterCalcUniqueValues calcUniqueValues = new
RasterCalcUniqueValuesClass();
calcUniqueValues.AddFromRaster(pRasterLayer.Raster, 0,
uniqueValues);
uniqueValueRenderer as IRasterRendererUniqueValues;
IRasterRendererUniqueValues renderUniqueValues =
renderUniqueValues.UniqueValues = uniqueValues;
uniqueValueRenderer.Field = renderfiled;
colorRamp.Size = uniqueValues.Count;
bool pOk;
colorRamp.CreateRamp(out pOk);
IRasterRendererColorRamp pRasterRendererColorRamp =
uniqueValueRenderer as IRasterRendererColorRamp;
pRasterRendererColorRamp.ColorRamp = colorRamp;
pRasterRenderer.Update();
pRasterLayer.Renderer = uniqueValueRenderer as IRasterRenderer;
}
catch
{ }
}
///
/// 拉伸渲染
///
///
色带
public void StretchColorRampRenderer(IColorRamp colorRamp,int bandindex,bool
background,int strechstyle,int parm,IColor pcolor)
{
try
{
IRasterLayer pRasterLayer = this.pLayerR as IRasterLayer;
IRasterRenderer pRasterRenderer = new
RasterStretchColorRampRendererClass();
pRasterRenderer.Raster = pRasterLayer.Raster;
IRasterStretchColorRampRenderer pRasterStretchRenderer =
pRasterRenderer as IRasterStretchColorRampRenderer;
IRasterStretch2 rasterStretchType = pRasterStretchRenderer as
IRasterStretch2;
if (strechstyle == 0)
{
rasterStretchType.StretchType =
esriRasterStretchTypesEnum.esriRasterStretch_StandardDeviations;
rasterStretchType.StandardDeviationsParam = parm;
}
else if (strechstyle == 1)
{
rasterStretchType.StretchType =
esriRasterStretchTypesEnum.esriRasterStretch_HistogramEqualize;
}
else if (strechstyle==2)
{
rasterStretchType.StretchType =
esriRasterStretchTypesEnum.esriRasterStretch_HistogramSpecification;
}
else if (strechstyle == 3)
{
esriRasterStretchTypesEnum.esriRasterStretch_MinimumMaximum ;
rasterStretchType.StretchType =
}
else
{
rasterStretchType.StretchType =
esriRasterStretchTypesEnum.esriRasterStretch_NONE;
}
rasterStretchType.Invert = true;
rasterStretchType.Background =background;
rasterStretchType.BackgroundColor = pcolor;
colorRamp.Size = 5;
bool pOk;
colorRamp.CreateRamp(out pOk);
pRasterStretchRenderer.BandIndex = bandindex;
pRasterStretchRenderer.ColorRamp = colorRamp;
pRasterLayer.Renderer = pRasterStretchRenderer as IRasterRenderer;
}
catch
{ }
}
///
/// 点密度渲染
///
///
public void DiscreteColorRenderer(IColorRamp colorRamp,int colornum)
{
try
{
IRasterLayer pRasterLayer = this.pLayerR as IRasterLayer;
IRasterDiscreteColorRenderer pDiscreteColorRenderer = new
RasterDiscreteColorRendererClass();
IRasterRenderer pRasterRenderer = pDiscreteColorRenderer as
IRasterRenderer;
colorRamp.Size = 300;
bool pOk;
colorRamp.CreateRamp(out pOk);
IRasterRendererColorRamp pRasterEndererColorRamp = pRasterRenderer
as IRasterRendererColorRamp;
pRasterEndererColorRamp.ColorRamp = colorRamp;
pDiscreteColorRenderer.NumColors = colornum;
pRasterRenderer.Raster = pRasterLayer.Raster;
pRasterLayer.Renderer = pRasterRenderer;
}
catch
{ }
}
public void uniquevalue(IColorRamp colorRamp)
{
IRasterUniqueValueRenderer pUVRenderer = new
RasterUniqueValueRendererClass();
IRasterRenderer pRenderer = (IRasterRenderer)pUVRenderer;
IRasterLayer prasterlayer = pLayerR as IRasterLayer;
//Get raster from layer and associate with renderer
IRaster pRaster =prasterlayer.Raster;
//Calculate unique values from the raster dataset.
IUniqueValues pUValues = new UniqueValuesClass();
IRasterCalcUniqueValues pUVCal = new RasterCalcUniqueValuesClass();
pUVCal.AddFromRaster(pRaster, 0, pUValues);
//Set the unique values to the renderer
IRasterRendererUniqueValues pRenUniqueValues =
(IRasterRendererUniqueValues)pUVRenderer;
pRenUniqueValues.UniqueValues = pUValues;
//Define color ramp for the renderer
IRasterRendererColorRamp pRamp = (IRasterRendererColorRamp)pUVRenderer;
//IRandomColorRamp pColorRamp = new RandomColorRampClass();
//pColorRamp.Size = pUValues.Count;
//pColorRamp.Seed = 500;
//Boolean createColorRamp;
//pColorRamp.CreateRamp(out createColorRamp);
pRamp.ColorRamp = colorRamp;
//Update the renderer and plug into layer
pRenderer.Update();
prasterlayer.Renderer = (IRasterRenderer)pUVRenderer;
}
///
/// 创建一个色带
///
///
public IColorRamp ColorRamp()
{
IRandomColorRamp pRandomColorRamp = new RandomColorRampClass();
//为渲染符号创建一个色带
pRandomColorRamp.MinSaturation = 20;
pRandomColorRamp.MaxSaturation = 40;
pRandomColorRamp.MinValue = 85;
pRandomColorRamp.MaxValue = 100;
pRandomColorRamp.StartHue = 76;
pRandomColorRamp.EndHue = 188;
pRandomColorRamp.UseSeed = true;
pRandomColorRamp.Seed = 43;
return pRandomColorRamp as IColorRamp;
}
}
}