How to create a raster unique value renderer


Creating a raster unique value renderer

Do the following steps to create a raster unique value renderer:
  1. Get the raster attribute table and table size.
  2. Create colors for each unique value.
  3. Create a unique value renderer.
  4. Set the renderer properties.

    See the following code example:
[C#]

public IRasterRenderer UnqueValueRenderer(ESRI.ArcGIS.Geodatabase.IRasterDataset
    rasterDataset)
{
    try
    {
        //Get the raster attribute table and the size of the table.
        IRaster2 raster = (IRaster2)rasterDataset.CreateDefaultRaster();
        ITable rasterTable = raster.AttributeTable;
        if (rasterTable == null)
        {
            return null;
        }
        int tableRows = rasterTable.RowCount(null);
        //Create colors for each unique value.
        IRandomColorRamp colorRamp = new RandomColorRampClass();
        colorRamp.Size = tableRows;
        colorRamp.Seed = 100;
        bool createColorRamp;
        colorRamp.CreateRamp(out createColorRamp);
        if (createColorRamp == false)
        {
            return null;
        }
        //Create a unique value renderer.
        IRasterUniqueValueRenderer uvRenderer = new RasterUniqueValueRendererClass();
        IRasterRenderer rasterRenderer = (IRasterRenderer)uvRenderer;
        rasterRenderer.Raster = rasterDataset.CreateDefaultRaster();
        rasterRenderer.Update();
        //Set the renderer properties.
        uvRenderer.HeadingCount = 1;
        uvRenderer.set_Heading(0, "All Data Value");
        uvRenderer.set_ClassCount(0, tableRows);
        uvRenderer.Field = "Value"; //Or any other field in the table.
        IRow row;
        ISimpleFillSymbol fillSymbol;
        for (int i = 0; i < tableRows; i++)
        {
            row = rasterTable.GetRow(i);
            uvRenderer.AddValue(0, i, Convert.ToByte(row.get_Value(1))); 
                // Assuming the raster is 8-bit.
            uvRenderer.set_Label(0, i, Convert.ToString(row.get_Value(1)));
            fillSymbol = new SimpleFillSymbolClass();
            fillSymbol.Color = colorRamp.get_Color(i);
            uvRenderer.set_Symbol(0, i, (ISymbol)fillSymbol);
        }
        return rasterRenderer;
    }
    catch (Exception ex)
    {
        System.Diagnostics.Debug.WriteLine(ex.Message);
        return null;
    }
}
[VB.NET]
Public Function UnqueValueRenderer(ByVal rasterDataset As ESRI.ArcGIS.GeodataMyBase.IRasterDataset) As IRasterRenderer
    Try
    'Get the raster attribute table and the size of the table.
    Dim raster As IRaster2 = CType(rasterDataset.CreateDefaultRaster(), IRaster2)
    Dim rasterTable As ITable = raster.AttributeTable
    If rasterTable Is Nothing Then
        Return Nothing
    End If
    Dim tableRows As Integer = rasterTable.RowCount(Nothing)
    
    'Create colors for each unique value.
    Dim colorRamp As IRandomColorRamp = New RandomColorRampClass()
    colorRamp.Size = tableRows
    colorRamp.Seed = 100
    Dim createColorRamp As Boolean
    colorRamp.CreateRamp( createColorRamp)
    If createColorRamp = False Then
        Return Nothing
    End If
    
    'Create a unique value renderer.
    Dim uvRenderer As IRasterUniqueValueRenderer = New RasterUniqueValueRendererClass()
    Dim rasterRenderer As IRasterRenderer = CType(uvRenderer, IRasterRenderer)
    rasterRenderer.Raster = rasterDataset.CreateDefaultRaster()
    rasterRenderer.Update()
    
    'Set the renderer properties.
    uvRenderer.HeadingCount = 1
    uvRenderer.set_Heading(0, "All Data Value")
    uvRenderer.set_ClassCount(0, tableRows)
    uvRenderer.Field = "Value" 'Or any other field in the table.
    Dim row As IRow
    Dim fillSymbol As ISimpleFillSymbol
    Dim i As Integer
    For i = 0 To tableRows - 1 Step i + 1
        row = rasterTable.GetRow(i)
        Dim ' Assuming the raster is 8-bit As uvRenderer.AddValue(0,i,Convert.ToByte(row.get_Value(1))).
        uvRenderer.set_Label(0, i, Convert.ToString(row.get_Value(1)))
        fillSymbol = New SimpleFillSymbolClass()
        fillSymbol.Color = colorRamp.get_Color(i)
        uvRenderer.set_Symbol(0, i, CType(fillSymbol, ISymbol))
    Next
    Return rasterRenderer
    Catch ex As Exception
    System.Diagnostics.Debug.WriteLine(ex.Message)
    Return Nothing
    End Try
End Function

}


See Also:

How to create a raster layer




To use the code in this topic, reference the following assemblies in your Visual Studio project. In the code files, you will need using (C#) or Imports (VB .NET) directives for the corresponding namespaces (given in parenthesis below if different from the assembly name):
Development licensing Deployment licensing
ArcGIS for Desktop Standard ArcGIS for Desktop Advanced
ArcGIS for Desktop Standard ArcGIS for Desktop Standard
ArcGIS for Desktop Basic ArcGIS for Desktop Basic
Engine Developer Kit Engine