在运行过程中不要使用arcgis打开栅格,否则会因为程序锁而无法修改。其原理是 根据图像创建合适的移动窗口,移动遍历读取并修改栅格像元值,数组array保存一个波段的全部像元值,最后写回。 另存为栅格,使用 复制原始栅格并修改像元值 达到目的。需要添加引用:
using ESRI.ArcGIS.Geoprocessor;
using ESRI.ArcGIS.DataManagementTools;
using ESRI.ArcGIS.Geoprocessing;
private void button_Click(object sender, EventArgs e) //复制栅格传入修改函数
{
IRasterLayer rasterLyr = this.axMapControl1.get_Layer(0) as IRasterLayer;
string directoryName = rasterLyr.FilePath.Substring(0, rasterLyr.FilePath.LastIndexOf("\\")) + "\\kls";
ESRI.ArcGIS.DataManagementTools.CopyRaster cpy = new CopyRaster();
cpy.in_raster = rasterLyr.FilePath;
cpy.out_rasterdataset = directoryName;
Geoprocessor gp = new Geoprocessor();
gp.Execute(cpy, null);
IRasterLayer rasterLayer = GetRasterLayer(directoryName);
ChangePixelValue(rasterLayer);
axMapControl1.AddLayer(rasterLayer);
}
public void ChangePixelValue(IRasterLayer