About the Create a custom default raster catalog renderer Sample
[C#]
CustomRasterCatalogRenderer_VBNET.cs
[Visual Basic .NET]
CustomRasterCatalogRenderer_VBNET.vb
' IMPORTANT INFORMATION: ' ====================== ' This project already has the COM Component Category Registration information embedded. If you build this project it will ' overwrite ArcMap's default behavior for rendering of RasterCatalogRenders. Since this project alters the default behavior it ' may be desirable to remove this projects functionality from the system to restore the default image rendering capabilities. ' This can be accomplished by: ' 1. Open a Visual Studio 2008 Command Prompt and navigate to the location of this projects .dll that gets created (for ' example: C:\temp\CustomRasterCatalogRendererPicker_VBNET\bin\Debug) ' 2. Use the esriregasm.exe utility from the Program Files\Common Files\ArcGIS\bin to unregister the DLL. Imports ESRI.ArcGIS.esriSystem Imports ESRI.ArcGIS.ADF.CATIDs Imports System.Runtime.InteropServices Imports ESRI.ArcGIS.Carto Imports ESRI.ArcGIS.Geodatabase Imports ESRI.ArcGIS.DataSourcesRaster Imports ESRI.ArcGIS.Display <ComClass(CustomRasterCatalogRenderer_VBNET.ClassId, CustomRasterCatalogRenderer_VBNET.InterfaceId, CustomRasterCatalogRenderer_VBNET.EventsId), _ ProgId("CustomRasterCatalogRendererPicker_VBNET.CustomRasterCatalogRenderer_VBNET")> _ Public Class CustomRasterCatalogRenderer_VBNET Implements ESRI.ArcGIS.Carto.IRasterCatalogRendererPicker #Region "COM Registration Function(s)" <ComRegisterFunction(), ComVisibleAttribute(False)> _ Public Shared Sub RegisterFunction(ByVal registerType As Type) ' Required for ArcGIS Component Category Registrar support ArcGISCategoryRegistration(registerType) 'Add any COM registration code after the ArcGISCategoryRegistration() call End Sub <ComUnregisterFunction(), ComVisibleAttribute(False)> _ Public Shared Sub UnregisterFunction(ByVal registerType As Type) ' Required for ArcGIS Component Category Registrar support ArcGISCategoryUnregistration(registerType) 'Add any COM unregistration code after the ArcGISCategoryUnregistration() call End Sub #Region "ArcGIS Component Category Registrar generated code" ''' <summary> ''' Required method for ArcGIS Component Category registration - ''' Do not modify the contents of this method with the code editor. ''' </summary> Private Shared Sub ArcGISCategoryRegistration(ByVal registerType As Type) Dim regKey As String = String.Format("HKEY_CLASSES_ROOT\CLSID\{{{0}}}", registerType.GUID) RasterCatalogRendererPickers.Register(regKey) End Sub ''' <summary> ''' Required method for ArcGIS Component Category unregistration - ''' Do not modify the contents of this method with the code editor. ''' </summary> Private Shared Sub ArcGISCategoryUnregistration(ByVal registerType As Type) Dim regKey As String = String.Format("HKEY_CLASSES_ROOT\CLSID\{{{0}}}", registerType.GUID) RasterCatalogRendererPickers.Unregister(regKey) End Sub #End Region #End Region #Region "COM GUIDs" ' These GUIDs provide the COM identity for this class ' and its COM interfaces. If you change them, existing ' clients will no longer be able to access the class. Public Const ClassId As String = "018daae4-dea8-4e0c-986e-db950ccc2e18" Public Const InterfaceId As String = "b6077420-e52d-4f1d-8728-91e0466769c5" Public Const EventsId As String = "c150f454-5e62-4b63-a092-83859b3ba7bc" #End Region ' A creatable COM class must have a Public Sub New() ' with no parameters, otherwise, the class will not be ' registered in the COM registry and cannot be created ' via CreateObject. Public Sub New() MyBase.New() End Sub Public ReadOnly Property AllAvailableRenderersCLSID() As String() Implements ESRI.ArcGIS.Carto.IRasterCatalogRendererPicker.AllAvailableRenderersCLSID Get Dim Renderers(1) As String 'Define the raster renderers using class ID Renderers(0) = "esriCarto.RasterRGBRenderer" Renderers(1) = "esriCarto.RasterStretchColorRampRenderer" Return Renderers End Get End Property Public ReadOnly Property DefaultUseRenderersCLSID() As String() Implements ESRI.ArcGIS.Carto.IRasterCatalogRendererPicker.DefaultUseRenderersCLSID Get Dim Renderers(1) As String 'Define the available raster renderers Renderers(0) = "esriCarto.RasterRGBRenderer" Renderers(1) = "esriCarto.RasterStretchColorRampRenderer" Return Renderers End Get End Property Public ReadOnly Property Priority() As Integer Implements ESRI.ArcGIS.Carto.IRasterCatalogRendererPicker.Priority Get Return 12 End Get End Property Public Function Pick(ByVal pRenderers As ESRI.ArcGIS.esriSystem.IArray, ByVal pRasterDataset As ESRI.ArcGIS.Geodatabase.IRasterDataset) As ESRI.ArcGIS.Carto.IRasterRenderer Implements ESRI.ArcGIS.Carto.IRasterCatalogRendererPicker.Pick Dim rasterRenderer As IRasterRenderer = Nothing Dim rasterRGBRenderer As IRasterRGBRenderer = Nothing Dim rasterStretchColorRampRenderer As IRasterStretchColorRampRenderer = Nothing ' Get the renderers Dim Count As Integer = pRenderers.Count Dim i As Integer For i = 0 To Count - 1 rasterRenderer = CType(pRenderers.Element(i), IRasterRenderer) If TypeOf rasterRenderer Is IRasterStretchColorRampRenderer Then rasterStretchColorRampRenderer = CType(rasterRenderer, IRasterStretchColorRampRenderer) ElseIf TypeOf rasterRenderer Is IRasterRGBRenderer Then rasterRGBRenderer = CType(rasterRenderer, IRasterRGBRenderer) End If Next i Dim rasterDataset2 As IRasterDataset2 = CType(pRasterDataset, IRasterDataset2) Dim rasterBandCollection As IRasterBandCollection = CType(rasterDataset2, IRasterBandCollection) If rasterBandCollection.Count > 5 Then ' Use band 4,5 and 3 as red, green and blue rasterRenderer = CType(rasterRGBRenderer, IRasterRenderer) rasterRGBRenderer.SetBandIndices(3, 4, 2) Return CType(rasterRGBRenderer, IRasterRenderer) Else ' Special stretch Dim rasterBand As IRasterBand = rasterBandCollection.Item(0) Dim hasTable As Boolean rasterBand.HasTable(hasTable) If hasTable = False Then ' Simply change the color ramp for the stretch renderer 'Dim fromColor As IColor = New RgbColorClass 'fromColor.RGB = RGB(255, 200, 50) Dim fromColor As IColor = CType(CreateRGBColor(255, 200, 50), IColor) 'Dim toColor As IColor = New RgbColorClass 'toColor.RGB = RGB(180, 125, 0) Dim toColor As IColor = CType(CreateRGBColor(180, 125, 0), IColor) ' Create color ramp Dim algorithmicColorRamp As IAlgorithmicColorRamp = New AlgorithmicColorRampClass algorithmicColorRamp.Size = 255 algorithmicColorRamp.FromColor = fromColor algorithmicColorRamp.ToColor = toColor Dim createRamp As Boolean algorithmicColorRamp.CreateRamp(createRamp) If createRamp = True Then rasterRenderer = CType(rasterStretchColorRampRenderer, IRasterRenderer) rasterStretchColorRampRenderer.BandIndex = 0 rasterStretchColorRampRenderer.ColorRamp = algorithmicColorRamp Return CType(rasterStretchColorRampRenderer, IRasterRenderer) End If End If End If Return rasterRenderer End Function #Region "Create RGBColor" '''<summary>Generate an RgbColor by specifying the amount of Red, Green and Blue.</summary> ''' '''<param name="myRed">A byte (0 to 255) used to represent the Red color. Example: 0</param> '''<param name="myGreen">A byte (0 to 255) used to represent the Green color. Example: 255</param> '''<param name="myBlue">A byte (0 to 255) used to represent the Blue color. Example: 123</param> ''' '''<returns>An IRgbColor interface</returns> ''' '''<remarks></remarks> Public Function CreateRGBColor(ByVal myRed As System.Byte, ByVal myGreen As System.Byte, ByVal myBlue As System.Byte) As IRgbColor Dim rgbColor As IRgbColor = New RgbColorClass With rgbColor .Red = CInt(myRed) .Green = CInt(myGreen) .Blue = CInt(myBlue) .UseWindowsDithering = True End With Return rgbColor End Function #End Region End Class