/// <summary> /// Ge the render color of the input layer rendering with discrete color ramp. /// </summary> /// <param name="layer">Input raster layer</param> /// <param name="value">Pixel value</param> /// <returns></returns> private static IColor GetRenderColor_UniqueValues(ILayer layer, double value) { IRasterLayer rasterLayer = (IRasterLayer)layer; // Check whether the value is NoData value IRasterProps rasterProps = (IRasterProps)rasterLayer.Raster; System.Array noDataValue = (System.Array)rasterProps.NoDataValue; if ((rasterProps.NoDataValue != null) && (Convert.ToDouble(noDataValue.GetValue(0)) == value)) { return(null); } IRasterRendererUniqueValues uniqueValues = (IRasterRendererUniqueValues)rasterLayer.Renderer; IRasterRendererColorRamp colorRamp = (IRasterRendererColorRamp)rasterLayer.Renderer; for (int i = 0; i < uniqueValues.UniqueValues.Count; i++) { if (value == Convert.ToDouble(uniqueValues.UniqueValues.UniqueValue[i])) { return(colorRamp.ColorRamp.Color[i]); } } return(null); }
/// <summary> /// Ge the render color of the input layer rendering with classified color ramp. /// </summary> /// <param name="layer">Input raster layer</param> /// <param name="value">Pixel value</param> /// <returns></returns> private static IColor GetRenderColor_Classified(ILayer layer, double value) { IRasterLayer rasterLayer = (IRasterLayer)layer; // Check whether the value is NoData value IRasterProps rasterProps = (IRasterProps)rasterLayer.Raster; System.Array noDataValue = (System.Array)rasterProps.NoDataValue; if ((rasterProps.NoDataValue != null) && (Convert.ToDouble(noDataValue.GetValue(0)) == value)) { return(null); } RasterClassifyColorRampRenderer rasterRender = (RasterClassifyColorRampRenderer)rasterLayer.Renderer; IRasterRendererColorRamp colorRamp = (IRasterRendererColorRamp)rasterRender; for (int index = 0; index < rasterRender.ClassCount - 1; index++) { if (value <= rasterRender.Break[index]) { return(colorRamp.ColorRamp.Color[index]); } } return(colorRamp.ColorRamp.Color[rasterRender.ClassCount - 1]); }
public static bool UniqueValueRenderer(IColorRamp colorRamp, IRasterLayer rasterLayer, string renderfiled = "Value") { try { IRasterUniqueValueRenderer uniqueValueRenderer = new RasterUniqueValueRendererClass(); IRasterRenderer pRasterRenderer = uniqueValueRenderer as IRasterRenderer; pRasterRenderer.Raster = rasterLayer.Raster; pRasterRenderer.Update(); IUniqueValues uniqueValues = new UniqueValuesClass(); IRasterCalcUniqueValues calcUniqueValues = new RasterCalcUniqueValuesClass(); calcUniqueValues.AddFromRaster(rasterLayer.Raster, 0, uniqueValues);//iBand=0 IRasterRendererUniqueValues renderUniqueValues = uniqueValueRenderer as IRasterRendererUniqueValues; renderUniqueValues.UniqueValues = uniqueValues; uniqueValueRenderer.Field = renderfiled; colorRamp.Size = uniqueValues.Count; uniqueValueRenderer.HeadingCount = 1; uniqueValueRenderer.set_Heading(0, "All Data Value"); uniqueValueRenderer.set_ClassCount(0, uniqueValues.Count); bool pOk; colorRamp.CreateRamp(out pOk); IRasterRendererColorRamp pRasterRendererColorRamp = uniqueValueRenderer as IRasterRendererColorRamp; pRasterRendererColorRamp.ColorRamp = colorRamp; for (int i = 0; i < uniqueValues.Count; i++) { uniqueValueRenderer.AddValue(0, i, uniqueValues.get_UniqueValue(i)); uniqueValueRenderer.set_Label(0, i, uniqueValues.get_UniqueValue(i).ToString()); IFillSymbol fs = new SimpleFillSymbol(); //fs.Color = colorRamp.get_Color(i); IColor color = new RgbColorClass(); if ((Convert.ToByte(uniqueValues.get_UniqueValue(i)) == 255) || (Convert.ToByte(uniqueValues.get_UniqueValue(i)) == 0)) { color.NullColor = true; color.Transparency = 0; fs.Color = color; } else { IRgbColor rgbColor = color as IRgbColor; rgbColor.Red = 0; rgbColor.Green = 255; rgbColor.Blue = 0; fs.Color = rgbColor as IColor; } uniqueValueRenderer.set_Symbol(0, i, fs as ISymbol); } pRasterRenderer.Update(); rasterLayer.Renderer = pRasterRenderer; } catch (Exception ex) { return(false); } return(true); }
/// <summary> /// Ge the render color of the input layer rendering with discrete color ramp. /// </summary> /// <param name="layer">Input raster layer</param> /// <param name="value">Pixel value</param> /// <returns></returns> private static IColor GetRenderColor_DiscreteColor(ILayer layer, double value) { IRasterLayer rasterLayer = (IRasterLayer)layer; // Check whether the value is NoData value IRasterProps rasterProps = (IRasterProps)rasterLayer.Raster; System.Array noDataValue = (System.Array)rasterProps.NoDataValue; if ((rasterProps.NoDataValue != null) && (Convert.ToDouble(noDataValue.GetValue(0)) == value)) { return(null); } IRasterRendererColorRamp colorRamp = (IRasterRendererColorRamp)rasterLayer.Renderer; Random rnd = new Random(); return(colorRamp.ColorRamp.Color[rnd.Next(colorRamp.ColorRamp.Size)]); }
/// <summary> /// Ge the render color of the input layer rendering with stretched color ramp. /// </summary> /// <param name="layer">Input raster layer</param> /// <param name="value">Pixel value</param> /// <returns></returns> private static IColor GetRenderColor_Stretched(ILayer layer, double value) { IRasterLayer rasterLayer = (IRasterLayer)layer; // Check whether the value is NoData value IRasterProps rasterProps = (IRasterProps)rasterLayer.Raster; System.Array noDataValue = (System.Array)rasterProps.NoDataValue; if ((rasterProps.NoDataValue != null) && (Convert.ToDouble(noDataValue.GetValue(0)) == value)) { return(null); } IRasterRendererColorRamp colorRamp = (IRasterRendererColorRamp)rasterLayer.Renderer; IRasterStretchMinMax stretchMinMax = (IRasterStretchMinMax)rasterLayer.Renderer; double min = 0; double max = 0; if (stretchMinMax.UseCustomStretchMinMax) { min = stretchMinMax.CustomStretchMin; max = stretchMinMax.CustomStretchMax; } else { min = stretchMinMax.StretchMin; max = stretchMinMax.StretchMax; } if (value >= max) { return(colorRamp.ColorRamp.Color[255]); } if (value <= min) { return(colorRamp.ColorRamp.Color[0]); } return(colorRamp.ColorRamp.Color[Convert.ToInt32(System.Math.Round(255 * (value - min)))]); }
private void DiscreteColorRender(ILayer pLayerR) { //Get raster input from layer IRasterLayer pRLayer = (IRasterLayer)pLayerR; IRaster pRaster = pRLayer.Raster; IRasterDiscreteColorRenderer pDiscreteColorRenderer = new RasterDiscreteColorRenderer(); IRasterRenderer pRasterRenderer = pDiscreteColorRenderer as IRasterRenderer; IColorRamp MyColorRamp; MyColorRamp = UniqueValueRandomColorRamp(300, 100); int colornum = 300; IRasterRendererColorRamp pRasterEndererColorRamp = pRasterRenderer as IRasterRendererColorRamp; pRasterEndererColorRamp.ColorRamp = MyColorRamp; pDiscreteColorRenderer.NumColors = colornum; pRasterRenderer.Raster = pRLayer.Raster; pRLayer.Renderer = pRasterRenderer; }
public static IRasterRenderer CreateESRIDefinedContinuousRenderer(GCDConsoleLib.Raster gRaster, int iClassCount, string sColorRampName, bool bInvert = false) { try { gRaster.ComputeStatistics(); decimal maxValue = gRaster.GetStatistics()["max"]; int iRound = GetMagnitude(maxValue); double maxValueRounded = Math.Round((double)maxValue, Math.Abs(iRound)); RasterStretchColorRampRenderer stretchRenderer = new RasterStretchColorRampRendererClass(); IRasterRenderer rasterRenderer = (IRasterRenderer)stretchRenderer; IRasterDataset rasterDataset = ArcMapUtilities.GetRasterDataset(gRaster); IRaster raster = rasterDataset.CreateDefaultRaster(); rasterRenderer.Raster = raster; IColorRamp pColorRamp = null; IStyleGalleryItem pStyleItem = GetESRIStyleColorRamp(out pColorRamp, sColorRampName); IRasterRendererColorRamp pRenderColorRamp = (IRasterRendererColorRamp)rasterRenderer; pRenderColorRamp.ColorScheme = pStyleItem.Name; IRasterStretchMinMax pStretchInfo = (IRasterStretchMinMax)stretchRenderer; pStretchInfo.CustomStretchMin = 0; pStretchInfo.CustomStretchMax = maxValueRounded; pStretchInfo.UseCustomStretchMinMax = true; stretchRenderer.LabelHigh = maxValueRounded.ToString(); stretchRenderer.LabelLow = "0.0"; 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 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); } }
/// <summary> /// 设置图层渲染器。 /// </summary> /// <param name="rasterLayer">需要渲染唯一值的栅格图层。</param> /// <param name="renderfiled">渲染的字段(可选,默认为Value)。</param> /// <returns></returns> public IRasterRenderer UniqueValueRender(IRasterLayer rasterLayer, string renderfiled = "Value") { try { //这是从头用到尾的对象 IRasterUniqueValueRenderer uniqueValueRenderer = new RasterUniqueValueRendererClass { Field = renderfiled }; IRasterRenderer pRasterRenderer = uniqueValueRenderer as IRasterRenderer; //计算栅格唯一值 IRasterCalcUniqueValues calcUniqueValues = new RasterCalcUniqueValuesClass(); IUniqueValues uniqueValues = new UniqueValuesClass(); calcUniqueValues.AddFromRaster(rasterLayer.Raster, 0, uniqueValues); //设置唯一值 IRasterRendererUniqueValues renderUniqueValues = uniqueValueRenderer as IRasterRendererUniqueValues; renderUniqueValues.UniqueValues = uniqueValues; //创建色带 IRgbColor pFromColor = FromIC; IRgbColor pToColor = ToIC; IAlgorithmicColorRamp colorRamp = new AlgorithmicColorRampClass { FromColor = pFromColor, ToColor = pToColor, Size = uniqueValues.Count }; bool pOk; colorRamp.CreateRamp(out pOk); //设置标题 uniqueValueRenderer.HeadingCount = 1; uniqueValueRenderer.set_Heading(0, "All Data Value"); uniqueValueRenderer.set_ClassCount(0, uniqueValues.Count); //设置色带 IRasterRendererColorRamp pRasterRendererColorRamp = uniqueValueRenderer as IRasterRendererColorRamp; pRasterRendererColorRamp.ColorRamp = colorRamp; //需要对算出来的唯一值升序重排 double[] tmp = new double[uniqueValues.Count]; for (int i = 0; i < uniqueValues.Count; i++) { tmp[i] = Convert.ToDouble(uniqueValues.get_UniqueValue(i)); } System.Array.Sort(tmp); //对每一个唯一值设置颜色 for (int i = 0; i < uniqueValues.Count; i++) { //添加唯一值并设置标签 uniqueValueRenderer.AddValue(0, i, tmp[i]); uniqueValueRenderer.set_Label(0, i, tmp[i].ToString()); //透明色及参数 IRgbColor zerocolor = new RgbColorClass() { Transparency = 0, NullColor = true, }; IFillSymbol fs = new SimpleFillSymbol(); //唯一值填充符号 if (tmp[i] == 0) //将值为0的栅格颜色设为透明 { fs = new SimpleFillSymbol { Color = zerocolor }; } else //值不为零则设置为色带对应索引颜色 { fs.Color = colorRamp.get_Color(i); } uniqueValueRenderer.set_Symbol(0, i, fs as ISymbol); //对唯一值设置色带对应颜色 } return(pRasterRenderer); } catch (Exception ex) { MessageBox.Show(ex.ToString()); return(null); } }
/// <summary> /// 初始化与拉伸相关控件 /// </summary> private void initstreach() { string sInstall = ClsGDBDataCommon.GetParentPathofExe() + @"Resource\Style\ESRI.ServerStyle"; axSymbologyControl1.LoadStyleFile(sInstall); axSymbologyControl1.StyleClass = esriSymbologyStyleClass.esriStyleClassColorRamps; pSymbolClass = axSymbologyControl1.GetStyleClass(esriSymbologyStyleClass.esriStyleClassColorRamps); pRasterRender = pRLayer.Renderer; pRasterRenderColorRamp = pRasterRender as IRasterRendererColorRamp; //生成色度带 if (pRasterRender is IRasterStretchColorRampRenderer) { IStyleGalleryItem pStyleGalleryItem = new ServerStyleGalleryItem(); pStyleGalleryItem.Item = pRasterRenderColorRamp.ColorRamp; pSymbolClass.AddItem(pStyleGalleryItem, 0); pSymbolClass.SelectItem(0); } for (int i = 0; i < pSymbolClass.get_ItemCount(pSymbolClass.StyleCategory); i++) { stdole.IPictureDisp pPicture = pSymbolClass.PreviewItem(pSymbolClass.GetItem(i), cmbColorRamp.Width, cmbColorRamp.Height); Image image = Image.FromHbitmap(new System.IntPtr(pPicture.Handle)); cmbColorRamp.Items.Add(image); } if (cmbColorRamp.Items.Count > 0) { cmbColorRamp.SelectedIndex = 0; } //判断拉伸方式和拉伸波段 if (pRasterRender is IRasterStretchColorRampRenderer) { pSCRampRender = pRasterRender as IRasterStretchColorRampRenderer; pRasterStretch = pRasterRender as IRasterStretch; int bandindex = pSCRampRender.BandIndex; cmbBand.SelectedIndex = bandindex; if (pRasterStretch.StretchType == esriRasterStretchTypesEnum.esriRasterStretch_Custom) { cmbStreach.SelectedIndex = 1; } else if (pRasterStretch.StretchType == esriRasterStretchTypesEnum.esriRasterStretch_MinimumMaximum) { cmbStreach.SelectedIndex = 2; } else if (pRasterStretch.StretchType == esriRasterStretchTypesEnum.esriRasterStretch_StandardDeviations) { cmbStreach.SelectedIndex = 3; } else if (pRasterStretch.StretchType == esriRasterStretchTypesEnum.esriRasterStretch_HistogramEqualize) { cmbStreach.SelectedIndex = 4; } else { cmbStreach.SelectedIndex = 0; } lblminstr.Text = pSCRampRender.LabelLow; lblmaxstr.Text = pSCRampRender.LabelHigh; txtmin.Text = pSCRampRender.LabelLow; txtmax.Text = pSCRampRender.LabelHigh; if (pRasterStretch.StretchType == esriRasterStretchTypesEnum.esriRasterStretch_MinimumMaximum) { txtmax.Visible = true; txtmin.Visible = false; } } else { cmbBand.SelectedIndex = 0; cmbStreach.SelectedIndex = 0; } isminmax = true; }