首页 > 代码库 > AE IRasterCursor 改变栅格图层像素值

AE IRasterCursor 改变栅格图层像素值

刚刚说的是获取像素值。如果要进一步改变像素值的话,需要用到IRasterEdit接口的Write方法。Write方法的参数有两个,一个是在栅格图像中的左上角位置(行列值不是坐标值),另一个就是获取像素值时提到的PixelBlock. 执行完Write方法后要对实现IRasterEdit接口的对象进行释放。

 1 public void ChangePixelValue(double xMax, double xMin, double yMax, double yMin,double[,] PixelChanged)
 2 {
 3     IRaster pRaster = thisRasterLayer.Raster;
 4     IRaster2 pRaster2 = pRaster as IRaster2;       
 5       
 6     //地图坐标转换为图中行列值
 7     rowMax = pRaster2.ToPixelRow(yMin);
 8     rowMin = pRaster2.ToPixelRow(yMax);
 9     columnMin = pRaster2.ToPixelColumn(xMin);
10     columnMax = pRaster2.ToPixelColumn(xMax);
11       
12     int Height = rowMax - rowMin + 1;
13     int Width = columnMax - columnMin + 1;
14       
15     //按照需要的大小建立一个空的PixelBlock3
16     IPnt blocksize = new PntClass();
17     blocksize.SetCoords(Width, Height);
18       
19     IPixelBlock3 pPixelBlock3 = pRaster.CreatePixelBlock(blocksize) as IPixelBlock3;
20       
21     System.Array pixels = (System.Array)pPixelBlock3.get_PixelData(0);
22       
23     //为新建的PixelBlock赋值
24     try
25     {
26         for (int i = 0; i < Height; i++)
27         {
28             for (int j = 0; j < Width; j++)
29             {
30                 pixels.SetValue(Convert.ToByte(PixelChanged[i,j]), j, i);
31             }
32         }
33     }
34     catch (Exception ex)
35     {
36         MessageBox.Show(ex.Message);
37     }
38       
39     //把像素值赋予新建的PixelBlock3
40     pPixelBlock3.set_PixelData(0, pixels);
41       
42     //PixelBlock3应在的位置
43     blocksize.SetCoords(columnMin, rowMin);
44       
45     //改变的像素值写入图层
46     IRasterEdit pRasterEdit = pRaster as IRasterEdit;
47     pRasterEdit.Write(blocksize, (IPixelBlock)pPixelBlock3);
48     pRasterEdit.Refresh();
49       
50     System.Runtime.InteropServices.Marshal.ReleaseComObject(pRasterEdit);    
51 }

修改过的图层需要保存:

1 //要保存的图层;
2 IRasterLayer pRasterLayer = axMapControl1.get_Layer(0) as IRasterLayer;  
3 IRaster pRaster = pRasterLayer.Raster;
4 IRaster2 pRaster2 = pRaster as IRaster2;
5     
6 ISaveAs pSaveAs = pRaster2 as ISaveAs;
7 pSaveAs.SaveAs(@"F:\Work\DEM高程矩阵\DEM高程矩阵\bin\Debug\渲染图层2.tif", null, "TIFF");