打开栅格目录中的一个数据
IRasterDataset GetRasterCatalogItem(IRasterCatalog pCatalog, int pObjectID)
{
//栅格目录继承了IFeatureClass
IFeatureClass pFeatureClass = (IFeatureClass)pCatalog;
IRasterCatalogItem pRasterCatalogItem =
(IRasterCatalogItem)pFeatureClass.GetFeature(pObjectID);
return pRasterCatalogItem.RasterDataset;
}
创建栅格数据集
public IRasterDataset CreateRasterDataset(string pRasterFolderPath, string
pFileName,string pRasterType,ISpatialReference pSpr )
{
IRasterWorkspace2 pRasterWs = GetRasterWorkspace(pRasterFolderPath) as
IRasterWorkspace2;
IPoint pPoint = new PointClass();
pPoint.PutCoords(15.0, 15.0); //设置想,x,y坐标
int pWidth = 300;
int pHeight = 300;
double xCell = 30;
double yCell = 30;
int NumBand = 1;
IRasterDataset pRasterDataset = pRasterWs.CreateRasterDataset(pFileName,
pRasterType, pPoint, pWidth, pHeight, xCell, yCell, NumBand, rstPixelType.PT_UCHAR, pSpr,true);
IRasterBandCollection pRasterBands =(IRasterBandCollection)pRasterDataset;
IRasterBand pRasterBand = pRasterBands.Item(0);
IRasterProps pRasterProps = (IRasterProps)pRasterBand;
pRasterProps.NoDataValue = 255;
IRaster pRaster = pRasterDataset.CreateDefaultRaster();
IPnt pPnt = new PntClass();
pPnt.SetCoords(30, 30);
IRaster2 pRaster2 = pRaster as IRaster2;
IRasterEdit pRasterEdit = (IRasterEdit)pRaster2;
IRasterCursor pRasterCursor = pRaster2.CreateCursorEx(pPnt);
do
{
IPixelBlock3 pPixelblock = pRasterCursor.PixelBlock as IPixelBlock3;
System.Array pixels = (System.Array)pPixelblock.get_PixelData(0);
for (int i = 0; i < pPixelblock.Width; i++)
for (int j = 0; j < pPixelblock.Height; j++)
if (i == j)
pixels.SetValue(Convert.ToByte(255), i, j);
else
pixels.SetValue(Convert.ToByte((i * j + 30) / 255), i, j);
pPixelblock.set_PixelData(0, (System.Array)pixels);
IPnt pUpperLeft = pRasterCursor.TopLeft;
pRasterEdit.Write(pUpperLeft, (IPixelBlock)pPixelblock);
} while (pRasterCursor.Next());
System.Runtime.InteropServices.Marshal.ReleaseComObject(pRasterEdit);
return pRasterDataset;
}