public IRasterRenderer CreateDefaultRasterRenderer(IRaster raster) { //Get raster dataset IRasterBandCollection rasterBandCollection = (IRasterBandCollection)raster; IRasterBand rasterBand = rasterBandCollection.Item(0); IRasterDataset rasterDataset = (IRasterDataset)rasterBand; //Check for TIFF format string format_Renamed = rasterDataset.Format; if (format_Renamed.Substring(0, 4) != "TIFF") { return(null); } //check for bit depth IRasterProps rasterProps = (IRasterProps)rasterBand; if (rasterProps.PixelType != rstPixelType.PT_U1) { return(null); } //create renderer for 1 bit raster //Create a unique value renderer and associate it with raster IRasterUniqueValueRenderer rasterUniqueValueRenderer = new RasterUniqueValueRendererClass(); IRasterRenderer rasterRenderer = (IRasterRenderer)rasterUniqueValueRenderer; rasterRenderer.Raster = raster; rasterRenderer.Update(); //Define the renderer rasterUniqueValueRenderer.HeadingCount = 1; rasterUniqueValueRenderer.set_Heading(0, ""); rasterUniqueValueRenderer.set_ClassCount(0, 2); rasterUniqueValueRenderer.Field = "VALUE"; rasterUniqueValueRenderer.AddValue(0, 0, 0); rasterUniqueValueRenderer.AddValue(0, 1, 1); rasterUniqueValueRenderer.set_Label(0, 0, "0"); rasterUniqueValueRenderer.set_Label(0, 1, "1"); // Define symbology for rendering value 0 IColor color1 = (IColor)(CreateRGBColor(200, 50, 0)); //Brown color ISimpleFillSymbol simpleFillSymbol1 = new SimpleFillSymbolClass(); simpleFillSymbol1.Color = color1; rasterUniqueValueRenderer.set_Symbol(0, 0, (ISymbol)simpleFillSymbol1); IColor color2 = new RgbColorClass(); color2.NullColor = true; ISimpleFillSymbol simpleFillSymbol2 = new SimpleFillSymbolClass(); simpleFillSymbol2.Color = color2; rasterUniqueValueRenderer.set_Symbol(0, 1, (ISymbol)simpleFillSymbol2); return(rasterRenderer); }
//渲染评价图 public void RenderPJT() { if (this.RasterLayerClass != null) { RasterUniqueValueRendererClass rUV = new RasterUniqueValueRendererClass(); rUV.Raster = this.RasterLayerClass.Raster; rUV.Update(); rUV.HeadingCount = 1; rUV.set_ClassCount(0, 4); rUV.Field = "Value"; //不适宜类 rUV.AddValue(0, 0, 0); RgbColorClass fc1 = new RgbColorClass(); fc1.Red = 255; //红色 fc1.Green = 0; fc1.Blue = 0; rUV.set_Label(0, 0, "不适宜类"); IFillSymbol cs1 = new SimpleFillSymbol(); cs1.Color = fc1 as IColor; rUV.set_Symbol(0, 0, cs1 as ISymbol); //基本适宜类 rUV.AddValue(0, 1, 1); RgbColorClass fc2 = new RgbColorClass(); fc2.Red = 255; // fc2.Green = 128; fc2.Blue = 64; rUV.set_Label(0, 1, "基本适宜类"); IFillSymbol cs2 = new SimpleFillSymbol(); cs2.Color = fc2 as IColor; rUV.set_Symbol(0, 1, cs2 as ISymbol); //中度适宜类 rUV.AddValue(0, 2, 2); RgbColorClass fc3 = new RgbColorClass(); fc3.Red = 141; // fc3.Green = 233; fc3.Blue = 86; rUV.set_Label(0, 2, "中度适宜类"); IFillSymbol cs3 = new SimpleFillSymbol(); cs3.Color = fc3 as IColor; rUV.set_Symbol(0, 2, cs3 as ISymbol); //高度适宜类 rUV.AddValue(0, 3, 3); RgbColorClass fc4 = new RgbColorClass(); fc4.Red = 0; // fc4.Green = 128; fc4.Blue = 0; rUV.set_Label(0, 3, "高度适宜类"); IFillSymbol cs4 = new SimpleFillSymbol(); cs4.Color = fc4 as IColor; rUV.set_Symbol(0, 3, cs4 as ISymbol); this.RasterLayerClass.Renderer = rUV; } }
public IRasterRenderer CreateDefaultRasterRenderer(IRaster raster) { //Get raster dataset IRasterBandCollection rasterBandCollection = (IRasterBandCollection)raster; IRasterBand rasterBand = rasterBandCollection.Item(0); IRasterDataset rasterDataset = (IRasterDataset)rasterBand; //Check for TIFF format string format_Renamed = rasterDataset.Format; if (format_Renamed.Substring(0, 4) != "TIFF") { return null; } //check for bit depth IRasterProps rasterProps = (IRasterProps)rasterBand; if (rasterProps.PixelType != rstPixelType.PT_U1) { return null; } //create renderer for 1 bit raster //Create a unique value renderer and associate it with raster IRasterUniqueValueRenderer rasterUniqueValueRenderer = new RasterUniqueValueRendererClass(); IRasterRenderer rasterRenderer = (IRasterRenderer)rasterUniqueValueRenderer; rasterRenderer.Raster = raster; rasterRenderer.Update(); //Define the renderer rasterUniqueValueRenderer.HeadingCount = 1; rasterUniqueValueRenderer.set_Heading(0, ""); rasterUniqueValueRenderer.set_ClassCount(0, 2); rasterUniqueValueRenderer.Field = "VALUE"; rasterUniqueValueRenderer.AddValue(0, 0, 0); rasterUniqueValueRenderer.AddValue(0, 1, 1); rasterUniqueValueRenderer.set_Label(0, 0, "0"); rasterUniqueValueRenderer.set_Label(0, 1, "1"); // Define symbology for rendering value 0 IColor color1 = (IColor)(CreateRGBColor(200, 50, 0)); //Brown color ISimpleFillSymbol simpleFillSymbol1 = new SimpleFillSymbolClass(); simpleFillSymbol1.Color = color1; rasterUniqueValueRenderer.set_Symbol(0, 0, (ISymbol)simpleFillSymbol1); IColor color2 = new RgbColorClass(); color2.NullColor = true; ISimpleFillSymbol simpleFillSymbol2 = new SimpleFillSymbolClass(); simpleFillSymbol2.Color = color2; rasterUniqueValueRenderer.set_Symbol(0, 1, (ISymbol)simpleFillSymbol2); return rasterRenderer; }
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); }
public static void uniqueRender(IRasterLayer rasterLayer) { if (rasterLayer == null) { return; } IRaster raster = rasterLayer.Raster; IRasterUniqueValueRenderer render = new RasterUniqueValueRendererClass(); IRasterRenderer rasterRender = render as IRasterRenderer; rasterRender.Raster = raster; rasterRender.Update(); IUniqueValues uniqueValues = new UniqueValuesClass(); IRasterCalcUniqueValues calcUniqueValues = new RasterCalcUniqueValuesClass(); calcUniqueValues.AddFromRaster(raster, 0, uniqueValues); IRasterRendererUniqueValues renderUniqueValues = render as IRasterRendererUniqueValues; renderUniqueValues.UniqueValues = uniqueValues; render.Field = "Value"; render.HeadingCount = 1; render.set_Heading(0, "淹没水深"); render.set_ClassCount(0, uniqueValues.Count); IRandomColorRamp ramp = new RandomColorRampClass(); ramp.Size = uniqueValues.Count; bool b = true; ramp.CreateRamp(out b); for (int i = 0; i < uniqueValues.Count; i++) { render.AddValue(0, i, uniqueValues.get_UniqueValue(i)); render.set_Label(0, i, uniqueValues.get_UniqueValue(i).ToString()); ISimpleFillSymbol fillSymbol = new SimpleFillSymbolClass(); fillSymbol.Color = ramp.get_Color(i); render.set_Symbol(0, i, fillSymbol as ISymbol); } rasterRender.Update(); rasterLayer.Renderer = rasterRender; }
//Ϊդ��ͼ�����ݽ���Ψһֵ��ɫ public static IRasterLayer GetRLayerUniqueColor(IRaster pRaster, double dMaxDis) { try { IRasterBandCollection pBandCol = pRaster as IRasterBandCollection; IRasterBand pBand = pBandCol.Item(0) as IRasterBand; bool ExistTable; ITable pTable = null; pBand.HasTable(out ExistTable); if (ExistTable == false) { pTable = pBand.AttributeTable as ITable; } int iNumOfValues = pTable.RowCount(null); string sFieldName = "Value"; int iFieldIndex = pTable.FindField(sFieldName); IRandomColorRamp pRamp = new RandomColorRampClass(); pRamp.Size = iNumOfValues; pRamp.Seed = 100; bool a = true; pRamp.CreateRamp(out a); IFillSymbol pFSymbol = new SimpleFillSymbolClass(); IRasterUniqueValueRenderer pUVRen = new RasterUniqueValueRendererClass(); IRasterRenderer pRasRen = pUVRen as IRasterRenderer; pRasRen.Raster = pRaster; pRasRen.Update(); pUVRen.HeadingCount = 1; pUVRen.set_Heading(0, "�ȼ�"); pUVRen.set_ClassCount(0, iNumOfValues); pUVRen.Field = sFieldName; //��ʼѭ��������ɫ double LabelValue; double s = Convert.ToDouble(dMaxDis / 5); IRgbColor pRGBColor = new RgbColorClass(); for (int i = 0; i < iNumOfValues - 1; i++) { IColor pColor = pRamp.get_Color(i); IRow pRow = pTable.GetRow(i); string sLabel = ""; LabelValue = Convert.ToDouble(pRow.get_Value(iFieldIndex)); if (LabelValue >= 0 || LabelValue <= s) { sLabel = "0" + "��" + s.ToString(); pRGBColor.Red = 0; pRGBColor.Green = 112; pRGBColor.Blue = 255; pColor = pRGBColor as IColor; } double h1 = s * 2; if (LabelValue >= s || LabelValue <= s * 2) { sLabel = s.ToString() + "��" + h1.ToString(); pRGBColor.Red = 0; pRGBColor.Green = 112; pRGBColor.Blue = 255; pColor = pRGBColor as IColor; } double h2 = s * 3; if (LabelValue >= s * 2 || LabelValue <= s * 3) { sLabel = h1.ToString() + "��" + h2.ToString(); pRGBColor.Red = 0; pRGBColor.Green = 112; pRGBColor.Blue = 255; pColor = pRGBColor as IColor; } double h3 = s * 4; if (LabelValue >= s * 3 || LabelValue <= s * 4) { sLabel = h2.ToString() + "��" + h3.ToString(); pRGBColor.Red = 0; pRGBColor.Green = 112; pRGBColor.Blue = 255; pColor = pRGBColor as IColor; } double h4 = s * 5; if (LabelValue >= s * 4 || LabelValue <= s * 5) { sLabel = h3.ToString() + "��" + h4.ToString(); pRGBColor.Red = 0; pRGBColor.Green = 112; pRGBColor.Blue = 255; pColor = pRGBColor as IColor; } pUVRen.AddValue(0, i, LabelValue); pUVRen.set_Label(0, i, sLabel); pFSymbol.Color = pColor; pUVRen.set_Symbol(0, i, pFSymbol as ISymbol); } pRasRen.Update(); IRasterLayer pRLayer = new RasterLayerClass(); pRLayer.CreateFromRaster(pRaster); pRLayer.Renderer = pUVRen as IRasterRenderer; return pRLayer; } catch (Exception ex) { Console.WriteLine(ex.Message); return null; } }
public static IRasterRenderer UniqueValueRenderer(IRasterLayer pRLayer, string strfield) { try { //Get the raster attribute table and the size of the table. IRaster2 raster = pRLayer.Raster as IRaster2; ITable rasterTable = (pRLayer as IAttributeTable) as ITable; if (rasterTable == null) { return null; } int tableRows = rasterTable.RowCount(null); //Create colors for each unique value. ArrayList value_array = new ArrayList(); for (int i = 0; i < rasterTable.RowCount(null); i++) { IRow row = rasterTable.GetRow(i); string value = row.get_Value(row.Fields.FindField(strfield)).ToString(); if (value_array.Contains(value)) { ; } else { value_array.Add(value); } } //Create a unique value renderer. IRasterUniqueValueRenderer uvRenderer = new RasterUniqueValueRendererClass(); IRasterRenderer rasterRenderer = (IRasterRenderer)uvRenderer; rasterRenderer.Raster = raster as IRaster; rasterRenderer.Update(); //Set the renderer properties. uvRenderer.HeadingCount = 1; //uvRenderer.set_Heading(0, "所有类别"); uvRenderer.set_ClassCount(0, value_array.Count); uvRenderer.Field = "VALUE"; //Or any other field in the table. ISimpleFillSymbol fillSymbol; for (int i = 0; i < tableRows; i++) { IRow row = rasterTable.GetRow(i); for (int value_index = 0; value_index < value_array.Count; value_index++) { string value = value_array[value_index].ToString(); string field = row.get_Value((row.Fields.FindField(strfield))).ToString(); if (value == field) { uvRenderer.AddValue(0, value_index, row.get_Value(1)); uvRenderer.set_Label(0, value_index, row.get_Value(row.Fields.FindField(strfield)).ToString()); fillSymbol = new SimpleFillSymbolClass(); if (value == "不适宜区") fillSymbol.Color = CvtRGB(255, 255, 255); else if (value == "次适宜区") fillSymbol.Color = CvtRGB(76, 230, 0); else fillSymbol.Color = CvtRGB(38, 115, 0); uvRenderer.set_Symbol(0, value_index, (ISymbol)fillSymbol); } } } 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); } }
//2009-5-21 /// <summary> /// Ψһֵ��ȾRaster /// </summary> /// <param name="pLayer">rasterͼ��</param> /// <remarks></remarks> public void UValueRenderer(IRasterLayer pLayer, string VlaueFieldName,IList<Color> lstColor/*IColor fromColor, IColor toColor*/,IColor noColor) { //��ȡRater IRasterLayer pRLayer = pLayer; IRaster pRaster = pRLayer.Raster; // ��ȡ������Ҳ���Ǽ�¼�� IRasterBandCollection pBandCol = pRaster as IRasterBandCollection; IRasterBand pBand = pBandCol.Item(0); bool TableExist ; pBand.HasTable(out TableExist); if (!TableExist) return ; ITable pTable = pBand.AttributeTable; int NumOfValues = 0; NumOfValues = pTable.RowCount(null); // Specified a field and get the field index for the specified field to be rendered. //ָ��һ���ֶΣ���ȡ���ֶζ�Ӧ���ֶ���ţ�ʹ�ø��ֶν�����Ⱦ int FieldIndex = 0; string FieldName =null; if (VlaueFieldName.Length > 0) FieldName = VlaueFieldName; //Value ��Ĭ�ϵ��ֶΣ�����ָ���������ֶ��� FieldIndex = pTable.FindField(FieldName); if (FieldIndex < 0) return; //bool bRamp; ISimpleFillSymbol pFSymbol = default(ISimpleFillSymbol); // Create UniqueValue renderer and QI RasterRenderer IRasterUniqueValueRenderer pUVRen = new RasterUniqueValueRendererClass(); IRasterRenderer pRasRen = pUVRen as IRasterRenderer; // Connect renderer and raster pRasRen.Raster = pRaster; pRasRen.Update(); // Set UniqueValue renerer pUVRen.HeadingCount = 1; // Use one heading pUVRen.set_Heading(0,"All Data Values"); pUVRen.set_ClassCount(0,NumOfValues); pUVRen.Field = FieldName; IRow pRow = default(IRow); object LabelValue = null; for (int i = 0; i <= NumOfValues - 1; i++) { pRow = pTable.GetRow(i); //Get a row from the table LabelValue = pRow.get_Value(FieldIndex); // Get value of the given index pUVRen.AddValue(0, i, LabelValue); //Set value for the renderer pUVRen.set_Label(0, i,LabelValue.ToString()); //Set label pFSymbol = new SimpleFillSymbol(); pFSymbol.Color = Convert2ESRIColor(lstColor[i])/*colorRamp.get_Color(I)*/; //Set symbol pUVRen.set_Symbol(0, i,pFSymbol as ISymbol); } if (noColor.RGB != 16777215) //255 + 65535 + 255 * 65535=16777215 //����ǰ�ɫ������ɫ���ӱ���ɫ��������ɫESRIĬ��Ϊ��ɫ (pUVRen as IRasterDisplayProps).NoDataColor = noColor; // Update render and refresh layer pRasRen.Update(); pRLayer.Renderer = pUVRen as IRasterRenderer; pRLayer.Draw(esriDrawPhase.esriDPGeography, m_MainMap.ActiveView.ScreenDisplay, null); m_MainMap.ActiveView.Refresh(); m_MainTOC.Update(); }