您的位置:首页 > 其它

AE IRasterCursor 改变栅格图层像素值

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

public void ChangePixelValue(double xMax, double xMin, double yMax, double yMin,double[,] PixelChanged)
{
IRaster pRaster = thisRasterLayer.Raster;
IRaster2 pRaster2 = pRaster as IRaster2;

//地图坐标转换为图中行列值
rowMax = pRaster2.ToPixelRow(yMin);
rowMin = pRaster2.ToPixelRow(yMax);
columnMin = pRaster2.ToPixelColumn(xMin);
columnMax = pRaster2.ToPixelColumn(xMax);

int Height = rowMax - rowMin + 1;
int Width = columnMax - columnMin + 1;

//按照需要的大小建立一个空的PixelBlock3
IPnt blocksize = new PntClass();
blocksize.SetCoords(Width, Height);

IPixelBlock3 pPixelBlock3 = pRaster.CreatePixelBlock(blocksize) as IPixelBlock3;

System.Array pixels = (System.Array)pPixelBlock3.get_PixelData(0);

//为新建的PixelBlock赋值
try
{
for (int i = 0; i < Height; i++)
{
for (int j = 0; j < Width; j++)
{
pixels.SetValue(Convert.ToByte(PixelChanged[i,j]), j, i);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

//把像素值赋予新建的PixelBlock3
pPixelBlock3.set_PixelData(0, pixels);

//PixelBlock3应在的位置
blocksize.SetCoords(columnMin, rowMin);

//改变的像素值写入图层
IRasterEdit pRasterEdit = pRaster as IRasterEdit;
pRasterEdit.Write(blocksize, (IPixelBlock)pPixelBlock3);
pRasterEdit.Refresh();

System.Runtime.InteropServices.Marshal.ReleaseComObject(pRasterEdit);
}


修改过的图层需要保存,不然重新加载时像素值还是没有修改过。

//要保存的图层;
IRasterLayer pRasterLayer = axMapControl1.get_Layer(0) as IRasterLayer;
IRaster pRaster = pRasterLayer.Raster;
IRaster2 pRaster2 = pRaster as IRaster2;

ISaveAs pSaveAs = pRaster2 as ISaveAs;
pSaveAs.SaveAs(@"F:\Work\DEM高程矩阵\DEM高程矩阵\bin\Debug\渲染图层2.tif", null, "TIFF");


文章地址:http://hi.baidu.com/fzoxeoomwvabkqe/item/6f92b02b30d59859469962e7
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: