About the Create a custom NoData pixel filter Sample
[C#]
TestApp.cs
using System; using Microsoft.Win32; using ESRI.ArcGIS.DataSourcesRaster; using ESRI.ArcGIS.DataSourcesGDB; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.esriSystem; //Tests the custom NodataFilter namespace TestNodataFilter { class App { static void Main() { #region Initialize license ESRI.ArcGIS.esriSystem.AoInitialize aoInit = null; try { ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop); aoInit = new AoInitializeClass(); esriLicenseStatus licStatus = aoInit.Initialize(esriLicenseProductCode.esriLicenseProductCodeArcView); Console.WriteLine("License Checkout successful."); } catch (Exception exc) { // If it fails at this point, shutdown the test and ignore any subsequent errors. Console.WriteLine(exc.Message); } #endregion try { //Get the location for data installed with .net sdk RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\ESRI\ArcObjectsSDK10.0\.NET"); string path = System.Convert.ToString(regKey.GetValue("MainDir")); string rasterFolder = System.IO.Path.Combine(path, @"Samples\ArcObjectsNET\CustomNodataFilter"); IPixelOperation raster = (IPixelOperation)OpenRasterDataset(rasterFolder, "testimage.tif"); if (raster == null) { Console.WriteLine("invalid raster"); return; } //create nodatafilter and set properties CustomNodataFilter.INodataFilter nFilter = new CustomNodataFilter.NodataFilter(); //filter out all values between 0 and 50 as nodata nFilter.MinNodataValue = 0; nFilter.MaxNodataValue = 50; //apply the convolutionfilter to raster raster.PixelFilter = nFilter; //set nodata value using the minimum of the nodata range IRasterProps rasterProps = (IRasterProps)raster; rasterProps.NoDataValue = 0; //save the filtered raster to a new raster dataset in TEMP directory ISaveAs saveAs = (ISaveAs)raster; //IWorkspace workspace = OpenWorkspace(Environment.GetEnvironmentVariable("TEMP")); IWorkspace workspace = OpenWorkspace(rasterFolder); saveAs.SaveAs("nodata.tif", workspace, "TIFF"); Console.WriteLine("Completed"); Console.ReadLine(); } catch (Exception e) { Console.WriteLine(e.Message); } //ESRI License Initializer generated code. //Do not make any call to ArcObjects after ShutDown() aoInit.Shutdown(); } //Open raster dataset and get raster static IRaster OpenRasterDataset(string path, string datasetName) { IRasterWorkspace rasterWorkspace = (IRasterWorkspace)OpenWorkspace(path); if (rasterWorkspace == null) return null; IRasterDataset2 rasterDataset; rasterDataset = (IRasterDataset2)rasterWorkspace.OpenRasterDataset(datasetName); if (rasterDataset == null) return null; return rasterDataset.CreateFullRaster(); } //Open file based raster workspace static IWorkspace OpenWorkspace(string path) { IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactoryClass(); IWorkspace rasterWorkspace = workspaceFactory.OpenFromFile(path, 0); return rasterWorkspace; } } }
[Visual Basic .NET]
TestApp.vb
Imports System Imports Microsoft.Win32 Imports ESRI.ArcGIS.DataSourcesRaster Imports ESRI.ArcGIS.DataSourcesGDB Imports ESRI.ArcGIS.Geodatabase Imports ESRI.ArcGIS.esriSystem 'Tests the custom NodataFilter Module Module1 Sub Main() 'Initialize the license Dim aoInit As ESRI.ArcGIS.esriSystem.AoInitialize = Nothing Try ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop) aoInit = New AoInitializeClass() Dim licStatus As esriLicenseStatus = aoInit.Initialize(esriLicenseProductCode.esriLicenseProductCodeArcView) Console.WriteLine("License checkout successful.") Catch exc As Exception ' If it fails at this point, shutdown the test and ignore any subsequent errors. Console.WriteLine(exc.Message) End Try Try 'Get the location for data installed with .net sdk Dim regKey As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\ESRI\ArcObjectsSDK10.0\.NET") Dim path As String = System.Convert.ToString(regKey.GetValue("MainDir")) Dim rasterFolder As String = System.IO.Path.Combine(path, "Samples\ArcObjectsNET\CustomNodataFilter") Dim raster As IPixelOperation = CType(OpenRasterDataset(rasterFolder, "testimage.tif"), IPixelOperation) If raster Is Nothing Then Console.WriteLine("invalid raster") Return End If 'create nodatafilter and set properties Dim nFilter As CustomFilter_VB.INodataFilter = New CustomFilter_VB.NodataFilter() 'filter out all values between 0 and 50 as nodata nFilter.MinNodataValue = 0 nFilter.MaxNodataValue = 50 'set nodata value using the minimum of the nodata range Dim rasterProps As IRasterProps rasterProps = CType(raster, IRasterProps) rasterProps.NoDataValue = 0 'apply the convolutionfilter to raster raster.PixelFilter = nFilter 'save the filtered raster to a new raster dataset in TEMP directory Dim saveAs As ISaveAs = CType(raster, ISaveAs) Dim workspace As IWorkspace = OpenWorkspace(rasterFolder) saveAs.SaveAs("nodataVB.tif", workspace, "IMAGINE Image") Console.WriteLine("Completed") Console.ReadLine() Catch e As Exception Console.WriteLine(e.Message) End Try 'Do not make any call to ArcObjects after ShutDown() aoInit.Shutdown() End Sub 'Open raster dataset and get raster Function OpenRasterDataset(ByVal path As String, ByVal datasetName As String) As IRaster Dim rasterWorkspace As IRasterWorkspace = CType(OpenWorkspace(path), IRasterWorkspace) If rasterWorkspace Is Nothing Then Return Nothing End If Dim rasterDataset As IRasterDataset2 rasterDataset = CType(rasterWorkspace.OpenRasterDataset(datasetName), IRasterDataset2) If rasterDataset Is Nothing Then Return Nothing End If Return rasterDataset.CreateFullRaster() End Function 'Open file based raster workspace Function OpenWorkspace(ByVal path As String) As IWorkspace Dim workspaceFactory As IWorkspaceFactory = New RasterWorkspaceFactoryClass() Dim rasterWorkspace As IWorkspace = workspaceFactory.OpenFromFile(path, 0) Return rasterWorkspace End Function End Module