//Open MXD and get first dataframe then get the first layer from the data frame.
MapDocument tempMxd = new MapDocument();
tempMxd.esri_new("E:/OutputDirectory/tempmxd.mxd");
IMap map = tempMxd.getMap(0);
ILayer layer = map.getLayer(0);
//Create a workspace so we can work with the data
WorkspaceFactory wkspf = new RasterWorkspaceFactory();
IWorkspace wksp = wkspf.openFromFile("E:/outputDir/", 0);
IRasterLayerExport3 rle = new RasterLayerExport();
IRasterLayer rl = (IRasterLayer) layer;
//Tweak how we want to export (at least as far as possible)
rle.setRasterLayerByRef(rl);
rle.setExtent(rl.getAreaOfInterest());
rle.setForce2RGB(false);
//Don't compress
IRasterStorageDef rsd = new RasterStorageDef();
rsd.setCompressionType(esriRasterCompressionType.esriRasterCompressionUncompressed);
rle.setStorageDefByRef(rsd);
//Export.
rle.export(wksp, "exportLayer.bil", "BIL");
//Note: No other file types work here either but I am willing to accept any uncompressed raster type besides BIL if it works
Dim pMxDoc As IMxDocument
Dim pMap As IMap
Dim pRasterLayer As IRasterLayer
Dim pRaster As IRaster
Dim pGeometryProc As IRasterGeometryProc
pMxDoc = My.ArcMap.Application.Document
pMap = pMxDoc.FocusMap
pRasterLayer = pMap.Layer(0)
pRaster = pRasterLayer.Raster
pGeometryProc = New RasterGeometryProc
pGeometryProc.Resample(rstResamplingTypes.RSP_NearestNeighbor, 7, pRaster)
Dim pDataset As IDataset
pDataset = pRasterLayer
Dim pWS As IWorkspace
pWS = pDataset.Workspace
Dim str As String
str = pWS.PathName
killifexistsRaster("try", str)
Dim RasterDataset As IRasterDataset
Dim pRasBandCol As IRasterBandCollection
pRasBandCol = pRaster
'pDS = pRasBandCol.SaveAs("try3", pWS, "GRID")
RasterDataset = pRasBandCol.SaveAs("try", pWS, "GRID")
'***********************************
Dim pRasterLy As IRasterLayer
pRasterLy = New RasterLayer
' pRasterLayer.CreateFromRaster(pRaster)
pRasterLy.CreateFromDataset(RasterDataset)
pMap.AddLayer(pRasterLy)
pMxDoc.ActiveView.Refresh()
'***********************************
SaveAsWithoutBuildingPyramids(pRaster)
End Sub
Sub SaveAsWithoutBuildingPyramids(ByVal pRaster As IRaster) 'Or as IRasterDataset)
killifexistsRaster("tryexp", "C:\temp")
Dim pSaveAs2 As ISaveAs2
pSaveAs2 = pRaster
Dim pStorageDef As IRasterStorageDef2
pStorageDef = New RasterStorageDef
pStorageDef.PyramidLevel = 0
Dim pWs As IWorkspace
pWs = SetRasterWorkspace("c:\temp")
pSaveAs2.SaveAs("try_exp", pWs, "GRID")
End Sub
Public Function SetRasterWorkspace(ByVal sPath As String) As IRasterWorkspace
Dim pWsFact As IWorkspaceFactory
pWsFact = New RasterWorkspaceFactory
SetRasterWorkspace = pWsFact.OpenFromFile(sPath, 0)
End Function
Public Function killifexistsRaster(ByVal RasterName As String, ByVal strFolder As String)
'''''' Delete raster from disk
Dim pRWSF As IWorkspaceFactory
pRWSF = New RasterWorkspaceFactory
Dim pRWS As IRasterWorkspace
pRWS = pRWSF.OpenFromFile(strFolder, 0)
Dim pRasterDS As IRasterDataset
On Error Resume Next
pRasterDS = pRWS.OpenRasterDataset(RasterName)
If Not pRasterDS Is Nothing Then
Dim pDS As IDataset
pDS = pRasterDS
If pDS.CanDelete Then pDS.Delete()
End If
System.IO.Directory.Delete(strFolder & "\" & RasterName, True)
DeleteFolder(strFolder & "\" & RasterName)
End Function
Public Function DeleteFolder(ByVal strPath As String) As Boolean
Dim objDir As New IO.DirectoryInfo(strPath)
Try
objDir.Delete(True)
Return True
Catch
Return False
End Try
End Function
but how to use RasterLayerExport while keep Pixel Depth?
because I want to use RasterLayerExport to export only some area of this raster