About the Create a Function Raster dataset Sample
[C#]
CreateFunctionRasterDataset.cs
using System; using ESRI.ArcGIS.DataSourcesRaster; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.Geodatabase; namespace RasterSamples { class CreateFunctionRasterDataset { [STAThread] static void Main(string[] args) { ESRI.ArcGIS.esriSystem.AoInitialize aoInit; #region Initialize License try { Console.WriteLine("Obtaining license"); ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop); aoInit = new AoInitializeClass(); esriLicenseStatus licStatus = aoInit.Initialize(esriLicenseProductCode.esriLicenseProductCodeArcView); Console.WriteLine("Ready with license."); } catch (Exception exc) { // If it fails at this point, shutdown the test and ignore any subsequent errors. Console.WriteLine(exc.Message); return; } #endregion try { // Specify input directory and dataset name. string inputWorkspace = @"C:\Data"; string inputDatasetName = "8bitSampleImage.tif"; // Specify output filename. string outputDataset = @"c:\Temp\testArithmaticCS.afr"; // Open the Raster Dataset Type factoryType = Type.GetTypeFromProgID("esriDataSourcesRaster.RasterWorkspaceFactory"); IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType); IWorkspace workspace = workspaceFactory.OpenFromFile(inputWorkspace, 0); IRasterWorkspace rasterWorkspace = (IRasterWorkspace)workspace; IRasterDataset myRasterDataset = rasterWorkspace.OpenRasterDataset(inputDatasetName); // Create the Function Arguments object IArithmeticFunctionArguments rasterFunctionArguments = (IArithmeticFunctionArguments)new ArithmeticFunctionArguments(); // Set the parameters for the function: // Specify the operation as addition (esriRasterPlus) rasterFunctionArguments.Operation = esriRasterArithmeticOperation.esriRasterPlus; // Specify the first operand, i.e. the Raster Dataset opened above. rasterFunctionArguments.Raster = myRasterDataset; // For the second operand, create an array of double values // containing the scalar value to be used as the second operand // to each band of the input dataset. // The number of values in the array should equal the number // of bands of the input dataset. double[] scalars = { 128.0, 128.0, 128.0 }; // Create a new Scalar object and specify // the array as its value. IScalar scalarVals = new ScalarClass(); scalarVals.Value = scalars; // Specify the scalar object as the second operand. rasterFunctionArguments.Raster2 = scalarVals; // Create the Raster Function object. IRasterFunction rasterFunction = new ArithmeticFunction(); rasterFunction.PixelType = rstPixelType.PT_USHORT; // Create the Function Raster Dataset Object. IFunctionRasterDataset functionRasterDataset = new FunctionRasterDataset(); // Create a name object for the Function Raster Dataset. IFunctionRasterDatasetName functionRasterDatasetName = (IFunctionRasterDatasetName)new FunctionRasterDatasetName(); // Specify the output filename for the new dataset (including // the .afr extension at the end). functionRasterDatasetName.FullName = outputDataset; functionRasterDataset.FullName = (IName)functionRasterDatasetName; // Initialize the new Function Raster Dataset with the Raster Function // and its arguments. functionRasterDataset.Init(rasterFunction, rasterFunctionArguments); // QI for the Temporary Dataset interface ITemporaryDataset myTempDset = (ITemporaryDataset)functionRasterDataset; // and make it a permanent dataset. This creates the afr file. myTempDset.MakePermanent(); // Report Console.WriteLine("Success."); Console.WriteLine("Press any key..."); Console.ReadKey(); // Shutdown License aoInit.Shutdown(); } catch (Exception exc) { // Report Console.WriteLine("Exception Caught while creating Function Raster Dataset. " + exc.Message); Console.WriteLine("Failed."); Console.WriteLine("Press any key..."); Console.ReadKey(); // Shutdown License aoInit.Shutdown(); } } } }
[Visual Basic .NET]
CreateFunctionRasterDataset.vb
Imports ESRI.ArcGIS.DataSourcesRaster Imports ESRI.ArcGIS.esriSystem Imports ESRI.ArcGIS.Geodatabase Namespace RasterSamples Class CreateFunctionRasterDataset <STAThread> _ Friend Shared Sub Main(args As String()) Dim aoInit As ESRI.ArcGIS.esriSystem.AoInitialize '#Region "Initialize License" Try Console.WriteLine("Obtaining license") ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop) aoInit = New AoInitializeClass() Dim licStatus As esriLicenseStatus = aoInit.Initialize(esriLicenseProductCode.esriLicenseProductCodeArcView) Console.WriteLine("Ready with license.") Catch exc As Exception ' If it fails at this point, shutdown the test and ignore any subsequent errors. Console.WriteLine(exc.Message) Return End Try '#End Region Try ' Specify input directory and dataset name. Dim inputWorkspace As String = "C:\Data" Dim inputDatasetName As String = "8bitSampleImage.tif" ' Specify output filename. Dim outputDataset As String = "c:\Temp\testArithmaticVB.afr" ' Open the Raster Dataset Dim factoryType As Type = Type.GetTypeFromProgID("esriDataSourcesRaster.RasterWorkspaceFactory") Dim workspaceFactory As IWorkspaceFactory = DirectCast(Activator.CreateInstance(factoryType), IWorkspaceFactory) Dim workspace As IWorkspace = workspaceFactory.OpenFromFile(inputWorkspace, 0) Dim rasterWorkspace As IRasterWorkspace = DirectCast(workspace, IRasterWorkspace) Dim myRasterDataset As IRasterDataset = rasterWorkspace.OpenRasterDataset(inputDatasetName) ' Create the Function Arguments object Dim rasterFunctionArguments As IArithmeticFunctionArguments = DirectCast(New ArithmeticFunctionArguments(), IArithmeticFunctionArguments) ' Set the parameters for the function: ' Specify the operation as addition (esriRasterPlus) rasterFunctionArguments.Operation = esriRasterArithmeticOperation.esriRasterPlus ' Specify the first operand, i.e. the Raster Dataset opened above. rasterFunctionArguments.Raster = myRasterDataset ' For the second operand, create an array of double values ' containing the scalar value to be used as the second operand ' to each band of the input dataset. ' The number of values in the array should equal the number ' of bands of the input dataset. Dim scalars As Double() = {128.0, 128.0, 128.0} ' Create a new Scalar object and specify ' the array as its value. Dim scalarVals As IScalar = New ScalarClass() scalarVals.Value = scalars ' Specify the scalar object as the second operand. rasterFunctionArguments.Raster2 = scalarVals ' Create the Raster Function object. Dim rasterFunction As IRasterFunction = New ArithmeticFunction() rasterFunction.PixelType = rstPixelType.PT_USHORT ' Create the Function Raster Dataset Object. Dim functionRasterDataset As IFunctionRasterDataset = New FunctionRasterDataset() ' Create a name object for the Function Raster Dataset. Dim functionRasterDatasetName As IFunctionRasterDatasetName = DirectCast(New FunctionRasterDatasetName(), IFunctionRasterDatasetName) ' Specify the output filename for the new dataset (including ' the .afr extension at the end). functionRasterDatasetName.FullName = outputDataset functionRasterDataset.FullName = DirectCast(functionRasterDatasetName, IName) ' Initialize the new Function Raster Dataset with the Raster Function ' and its arguments. functionRasterDataset.Init(rasterFunction, rasterFunctionArguments) ' QI for the Temporary Dataset interface Dim myTempDset As ITemporaryDataset = DirectCast(functionRasterDataset, ITemporaryDataset) ' and make it a permanent dataset. This creates the afr file. myTempDset.MakePermanent() ' Report Console.WriteLine("Success.") Console.WriteLine("Press any key...") Console.ReadKey() ' Shutdown License aoInit.Shutdown() Catch exc As Exception ' Report Console.WriteLine("Exception Caught while creating Function Raster Dataset. " & exc.Message) Console.WriteLine("Failed.") Console.WriteLine("Press any key...") Console.ReadKey() ' Shutdown License aoInit.Shutdown() End Try End Sub End Class End Namespace