在编写使用栅格图层的代码时,常常要获取栅格图层的像素值(PixelValue)。如果想获取某一点的像素值,可以使用IRaster2中的getPixelValue方法。但如果想要获得的是图层中的某一块甚至整个图层,那么用getPixelValue方法就太过缓慢了。

如果利用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 = ;
        long blockheight = ;
   
        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();
   
                //获取该Cursor的PixelBlock中像素的值
                for (int i = ; i < blockheight; i++)
                {
                    for (int j = ; 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 获取栅格图层像素值的更多相关文章

  1. AE IRasterCursor 改变栅格图层像素值

    1 public void ChangePixelValue(double xMax, double xMin, double yMax, double yMin,double[,] PixelCha ...

  2. HTML5 Canvas 获取网页的像素值。

    我之前在网上看过一个插件叫做出JScolor   颜色拾取器  说白了就是通过1*1PX的DOM设置颜色值通过JS来获取当前鼠标点击位置DOM的颜色值. 自从HTML5 画布出来之后.就有更好的方法来 ...

  3. AE开发中栅格图层实现分级渲染

    GP工具IDW执行后,生成的栅格图层是黑白二色,需要手动进行分级渲染,似乎不是所有栅格图层都可以进行分级渲染,注意异常处理.注意ARCMAP中是有颜色的,无需自己处理. IRasterClassify ...

  4. 获取屏幕中某个点的RGB值与CAD屏幕像素值

    '获取CAD屏幕像素的比值 Function ViewScreen() As Double Dim ScreenSize As Variant ScreenSize = ThisDrawing.Get ...

  5. js获取不带单位的像素值

    所谓获取不带单位的像素值就是获取比如元素的宽度.高度.字体大小.外边距.内边距等值但是去掉像素单位. 比如:某一个元素的宽度是100px,现在我要获取这个这个值但是不带单位“px”,对于这种问题你会怎 ...

  6. c#图像处理入门(-bitmap类和图像像素值获取方法)

    c#图像处理入门 -bitmap类和图像像素值获取方法 一.Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义 ...

  7. Opencv之像素值的获取

    灰度图像${\rm{M}} \times {\rm{N}}$的像素矩阵值为0~255,像素值越大越亮.${{\rm{I}}_{{\rm{i}}{\rm{j}}}}$,i表示行的位置,j 表示列的位置即 ...

  8. (八)WebGIS中栅格图层的设计

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.    前言 我们在上一章里了解到WebGIS中栅格图层的本质—— ...

  9. ArcGIS二次开发之读取遥感图像像素值的做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 首先是读取遥感图像的R.G.B波段数据的做法.读取R.G.B波段数据的像素值主要通过IRaster接口的Read方法在 ...

随机推荐

  1. tensorflow笔记之softmax_cross_enropy

    tf.nn.sparse_softmax_cross_entropy_with_logits() 当正确结果只有一个时,可以加速计算,比如MNIST数字识别,每张图片中仅包含一个数字,所以可以使用这个 ...

  2. 正则表达式(Swift)

    课题 使用正则表达式匹配字符串 使用正则表达式 "\d{3}-(\d{4})-\d{2}" 匹配字符串 "123-4567-89" 返回匹配结果:'" ...

  3. jsp页面转发获取不到参数

    使用的是<input type="hidden" name="nameid" value="${nameid}"/>,隐藏默认值 ...

  4. 扩展C#与元编程(二)

    如果你对Windows Workflow Foundation(WF)一无所知,当看到扩展C#与元编程(一)中由MW编译器生成的FirstLook.mw.cs时,也许这么在想:我KAO,这是C#版的汇 ...

  5. python闭包和装饰器(转)

    一.python闭包 1.内嵌函数 >>> def func1(): ... print ('func1 running...') ... def func2(): ... prin ...

  6. jQuery height()、innerHeight()、outerHeight()函数的区别详解

    参考来源:http://www.jb51.net/article/84897.htm 代码示例(可复制到编辑器直接打开): <!DOCTYPE html> <html lang=&q ...

  7. win10关闭后台应用程序进程的方法

    一)win10系统后台应用有两大特点: 1.win10系统有许多系统自带应用软件,在系统任务栏中看不到任何自带的应用程序运行 2.但通过任务管理器的进程中,可直观的看到许多非系统进程正在运行. 二)后 ...

  8. ubuntu的文本界面修改字体大小

    使用命令: dpkg-reconfigure console-setup

  9. Python bytearray() 函数

    Python bytearray() 函数  Python 内置函数 描述 bytearray() 方法返回一个新字节数组.这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < ...

  10. Lunch Time(费用流变型题,以时间为费用)

    Lunch Time http://acm.hdu.edu.cn/showproblem.php?pid=4807 Time Limit: 4000/2000 MS (Java/Others)     ...