Hi All,I met a problem when trying to create a raster file using VBA with ArcGIS 9.3. I was using the sample codes provided by ESRI (http://help.arcgis.com/en/sdk/10.0/vba_desktop/conceptualhelp/index.html#//00010000011s000000). However, the debugging stopped at the function CreateRasterDataset with a warning of "Run-time error '91': Object variable or With block variable not set". I was sure that every variables in this function was appropriately defined and set. Anyone have any clue about the error source? Thanks in advance.This sample shows how to create a file raster dataset, set NoData and write pixel values.How to useReference libraries: ESRI.ArcGIS.DataSourcesRaster, ESRI.ArcGIS.Geodatabase, ESRI.ArcGIS.Geometry.Call this function from your code.[VBA]Sub CreateFileRasterDataset() 'open a raster workspace Dim pWs As IRasterWorkspace2 Set pWs = OpenRasterWorkspace("c:\temp") 'set the origin, width and height of the raster dataset Dim pOrigin As IPoint Dim Width As Long Dim Height As Long Set pOrigin = New Point pOrigin.PutCoords 15, 15 Width = 100 Height = 100 'Create the raster dataset Dim pRasterDs As IRasterDataset Set pRasterDs = pWs.CreateRasterDataset("myimage1.img", "IMAGINE Image", pOrigin, Width, Height, 30, 30, 3, PT_UCHAR, New UnknownCoordinateSystem, True) Dim pProp As IRasterProps Dim pBands As IRasterBandCollection Dim nBands As Integer Dim pBand As IRasterBand 'Set NoData if necessary Set pBands = pRasterDs nBands = pBands.Count For k = 0 To nBands - 1 Set pBand = pBands.Item(k) Set pProp = pBand pProp.NoDataValue = 255 Next k 'Create a Raster from the raster dataset Dim pRaster As IRaster Set pRaster = pRasterDs.CreateDefaultRaster 'Create a pixel block for the pixels that need to write Dim pPB As IPixelBlock3 Dim pPnt As IPnt Set pPnt = New Pnt pPnt.SetCoords Width, Height Set pPB = pRaster.CreatePixelBlock(pPnt) Dim v As Variant For k = 0 To nBands - 1 v = pPB.PixelData(k) For i = 0 To Width - 1 For j = 0 To Height - 1 If i = j Then v(i, j) = 255 Else v(i, j) = (i + j) / 8 'set some values that are in 8 bit range Next j Next i pPB.PixelData(k) = v Set v = Nothing Next k 'Write the pixel block with a (0,0) offset of the upper left corner Dim pRasterEdit As IRasterEdit Set pRasterEdit = pRaster pPnt.SetCoords 0, 0 pRasterEdit.Write pPnt, pPB 'clean up Set pRasterEdit = Nothing Set pRaster = Nothing Set pProp = Nothing Set pPB = Nothing Set pBand = Nothing Set pBands = Nothing Set pRasterDs = Nothing Set pWs = NothingEnd SubPublic Function OpenRasterWorkspace(sPath As String) As IRasterWorkspace2 ' Create RasterWorkspace Dim pWsFact As IWorkspaceFactory Set pWsFact = New RasterWorkspaceFactory If pWsFact.IsWorkspace(sPath) Then Set OpenRasterWorkspace = pWsFact.OpenFromFile(sPath, 0) End If Set pWsFact = Nothing End Function
Přihlášení členové mohou přispívat, sledovat aktualizace a další. Jste tu noví? Zaregistrujte si bezplatný účet.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.