AE IRasterCursor 获取栅格图层像素值
2014-04-30 09:17
435 查看
在编写使用栅格图层的代码时,常常要获取栅格图层的像素值(PixelValue)。如果想获取某一点的像素值,可以使用IRaster2中的getPixelValue方法。但如果想要获得的是图层中的某一块甚至整个图层,那么用getPixelValue方法就太过缓慢了。
如果利用IRasterCursor、IPixelBlock3接口,从内存入手,速度就会加快很多。说一下我对他们的理解。首先应用IRaster2中的CreateCursorEx方法实现一个IRasterCursor接口。根据传入的参数,系统将为这个RasterCursor设置相应的PixelBlock。这就相当于将栅格图层分成了几个方块。接下来,只要应用IRasterCursor的next方法,便可以让这个方块移动,最后将整个图层遍历。这就是获取像素的过程了。
另外,处理这部分数据时经常会弄混几个参数。不知道各位会不会有同样的经历。以下几个参数通常是想对应的:height, row, y, i;与其相对的是另外几个参数:width, column, x, j. 我是经常弄错,希望大家不会犯和我一样的错误。
以下是我获取图层内像素值的代码。由于是DEM文件,只有一个波段。根据需要可以对其他波段或所有波段进行遍历。
如果利用IRasterCursor、IPixelBlock3接口,从内存入手,速度就会加快很多。说一下我对他们的理解。首先应用IRaster2中的CreateCursorEx方法实现一个IRasterCursor接口。根据传入的参数,系统将为这个RasterCursor设置相应的PixelBlock。这就相当于将栅格图层分成了几个方块。接下来,只要应用IRasterCursor的next方法,便可以让这个方块移动,最后将整个图层遍历。这就是获取像素的过程了。
另外,处理这部分数据时经常会弄混几个参数。不知道各位会不会有同样的经历。以下几个参数通常是想对应的:height, row, y, i;与其相对的是另外几个参数:width, column, x, j. 我是经常弄错,希望大家不会犯和我一样的错误。
以下是我获取图层内像素值的代码。由于是DEM文件,只有一个波段。根据需要可以对其他波段或所有波段进行遍历。
public Class_GetPixelValue(IRasterLayer pRasterLayer) { IRaster pRaster = pRasterLayer.Raster; IRaster2 pRaster2 = pRaster as IRaster2; IRasterProps pRasterProps = pRaster as IRasterProps; //获取图层的行列值 int Height = pRasterProps.Height; int Width = pRasterProps.Width; //定义并初始化数组,用于存储栅格内所有像员像素值 PixelValue = new double[Height, Width]; thisRasterLayer = pRasterLayer; System.Array pixels; //定义RasterCursor初始化,参数设为null,内部自动设置PixelBlock大小 IRasterCursor pRasterCursor = pRaster2.CreateCursorEx(null); //用于存储PixelBlock的长宽 long blockwidth = 0; long blockheight = 0; IPixelBlock3 pPixelBlock3; try { do { //获取Cursor的左上角坐标 int left = (int)pRasterCursor.TopLeft.X; int top = (int)pRasterCursor.TopLeft.Y; pPixelBlock3 = pRasterCursor.PixelBlock as IPixelBlock3; blockheight = pPixelBlock3.Height; blockwidth = pPixelBlock3.Width; //pPixelBlock3.Mask(255); pixels = (System.Array)pPixelBlock3.get_PixelData(0); //获取该Cursor的PixelBlock中像素的值 for (int i = 0; i < blockheight; i++) { for (int j = 0; j < blockwidth; j++) { //一定要注意,pixels中的数组排序为[Width,Height] PixelValue[top + i, left + j] = Convert.ToDouble(pixels.GetValue(j, i)); } } } while (pRasterCursor.Next() == true); MessageBox.Show("完成遍历!"); } catch(Exception ex) { MessageBox.Show(ex.Message); } }
相关文章推荐
- AE IRasterCursor 改变栅格图层像素值
- AE IRasterCursor 改变栅格图层像素值
- AE构建获取栅格图层属性表(ITable)
- GDAL获取栅格数据各个像素对应的经纬度(Python版)
- AE获取图层中所有要素
- AE开发中栅格图层实现分级渲染
- AE中获取图层属性信息
- 显示栅格图层和矢量图层的属性表(AE开发)
- 显示栅格图层和矢量图层的属性表(AE开发)
- ArcObjects c++ 获取栅格或矢量图层的范围
- 获取栅格图层(Raster)的属性表
- AE二次开发-判断栅格图层是否存在属性表,获取栅格字段的唯一值
- AE_获取图层的SpatialRefrence
- c#+AE-图层唯一值渲染
- AE二次开发,空间分析图层相交操作代码
- 【技术类】如何获取镶嵌数据集中每一个栅格数据的物理路径
- Cursor来访问获取数据
- 转AE创建WMS图层的两种方式
- ArcGIS Server如何获取图层要素值?
- android 正确获取屏幕像素大小