使用ArcEngine修改栅格数据的像素值时,要调用IRasterEdit接口的刷新方法,并用C#回收资源,否则像素值可能无法保存成功,出现像素值为零的情况。相关代码如下:
//Create a raster from the dataset.
IRaster raster = rasterDataset.CreateFullRaster();
//Create a pixel block using the weight and height of the raster dataset.
//If the raster dataset is large, a smaller pixel block should be used.
//Refer to the topic "How to access pixel data using a raster cursor".
IPnt blocksize = new PntClass();
blocksize.SetCoords(width, height);
IPixelBlock3 pixelblock = raster.CreatePixelBlock(blocksize) as IPixelBlock3;
//Populate some pixel values to the pixel block.
System.Array pixels;
pixels = (System.Array)pixelblock.get_PixelData(0);
m_pSeismicIntensityModel.SetPixelBlock(EQCenter.X, EQCenter.Y, magnitude, EQSrcDepth, pLowerLeft.X, pLowerLeft.Y, width, height, xCell, yCell, ref pixels);
pixelblock.set_PixelData(0, (System.Array)pixels);
//Define the location that the upper left corner of the pixel block is to write.
IPnt upperLeft = new PntClass();
upperLeft.SetCoords(0, 0);
//Write the pixel block.
IRasterEdit rasterEdit = (IRasterEdit)raster;
rasterEdit.Write(upperLeft, (IPixelBlock)pixelblock);
rasterEdit.Refresh();
GC.Collect();
//Release rasterEdit explicitly.
System.Runtime.InteropServices.Marshal.ReleaseComObject(rasterEdit);