public static IRasterRenderer CreateContinuousRenderer(Raster gRaster, IColorRamp pColorRamp, bool bInvert = false) { try { gRaster.ComputeStatistics(); Dictionary <string, decimal> stats = gRaster.GetStatistics(); double rMin = (double)stats["min"]; double rMax = (double)stats["max"]; RasterStretchColorRampRenderer stretchRenderer = new RasterStretchColorRampRenderer(); IRasterRenderer rasterRenderer = (IRasterRenderer)stretchRenderer; IRasterDataset rasterDataset = ArcMapUtilities.GetRasterDataset(gRaster); IRaster raster = rasterDataset.CreateDefaultRaster(); rasterRenderer.Raster = raster; IRasterRendererColorRamp pRenderColorRamp = (IRasterRendererColorRamp)rasterRenderer; pRenderColorRamp.ColorRamp = pColorRamp; int iRound = GetMagnitude(rMin); stretchRenderer.LabelHigh = Math.Round(rMax, Math.Abs(iRound)).ToString(); stretchRenderer.LabelLow = Math.Round(rMin, Math.Abs(iRound)).ToString(); if (bInvert) { IRasterStretch2 pStretch = (IRasterStretch2)stretchRenderer; pStretch.Invert = true; } rasterRenderer.Update(); return(rasterRenderer); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); return(null); } }
public static IRasterRenderer CreateDoDClassifyRenderer(Raster gRaster, int iClassCount, double rampRange) { try { // Open file raster dataset and ensure that statistics and histograms are present (absence of histograms will cause Renderer.Update() to crash) IRasterDataset rasterDataset = ArcMapUtilities.GetRasterDataset(gRaster); ESRI.ArcGIS.DataSourcesRaster.IRasterBandCollection pRastBands = (ESRI.ArcGIS.DataSourcesRaster.IRasterBandCollection)rasterDataset; ESRI.ArcGIS.DataSourcesRaster.IEnumRasterBand enumRasterBand = (ESRI.ArcGIS.DataSourcesRaster.IEnumRasterBand)pRastBands.Bands; rasterDataset.PrecalculateStats(0); ESRI.ArcGIS.DataSourcesRaster.IRasterBand pRastBand = enumRasterBand.Next(); pRastBand.ComputeStatsAndHist(); IRasterClassifyColorRampRenderer classifyRenderer = new RasterClassifyColorRampRendererClass(); IRasterRenderer rasterRenderer = (IRasterRenderer)classifyRenderer; IFillSymbol fillSymbol = new SimpleFillSymbolClass(); IRaster raster = rasterDataset.CreateDefaultRaster(); double rMin = -2.5; double rMax = 2.5; if (rampRange == 0) { gRaster.ComputeStatistics(); Dictionary <string, decimal> rasterStats = gRaster.GetStatistics(); rMin = (double)rasterStats["min"]; rMax = (double)rasterStats["max"]; } else { rMin = rampRange * -1; rMax = rampRange; } rasterRenderer.Raster = raster; if ((rMin == double.MinValue & rMax == double.MaxValue) | (rMin == double.MaxValue & rMax == double.MinValue) | (rMin == float.MinValue & rMax == float.MaxValue) | (rMin == float.MaxValue & rMax == float.MinValue)) { classifyRenderer.ClassCount = 1; ESRI.ArcGIS.Display.IRgbColor rgbColor = CreateRGBColor(255, 255, 255); rgbColor.Transparency = 0; fillSymbol.Color = rgbColor; classifyRenderer.Symbol[0] = (ISymbol)fillSymbol; classifyRenderer.Label[0] = "No Data (no change detected)"; return(rasterRenderer); } classifyRenderer.ClassCount = iClassCount; rasterRenderer.Update(); CreateDoDClassBreaks(rMax, rMin, iClassCount, ref classifyRenderer); List <IColor> lColors = CreateDoDColorRamp(); for (int i = 0; i < classifyRenderer.ClassCount; i++) { fillSymbol.Color = lColors[i]; classifyRenderer.Symbol[i] = (ISymbol)fillSymbol; } return(rasterRenderer); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); return(null); } }