加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

个人整理-基于GDAL读取并显示遥感影像

(2014-08-31 16:39:06)
标签:

gdal

c

遥感

影像显示

vs2008

分类: 易康整理
        利用GDAL来读取遥感影像,显示遥感影像可以利用PictureBox Control控件。在codeproject网站找到了一个程序,它重新写了类似PictrueBox Control的控件,将其封装为DLL。使用时将【RSIMGControl.dll】放在你的程序的DEBUG文件夹下,在工程的程序集里对其引用,并且在工具那【选择项】里添加该DLL,就可以得到专门用来显示遥感影像的PictrueBox Control控件;将其拖到你的窗体上,然后按照作者给出的说明(链接网页还包括dll源代码和一个demo源代码,后面也给出了下载地址)通过几句简单的代码便可使用该控件。GDAL的版本直接使用他的demo里debug文件夹下的GDAL5的【gdal5.dll】、【gdal_wrap.dll】、【gdal_csharp.dll】、【gdalconst_csharp.dll】、【gdalconst_wrap.dll】即可,同样是将它们拷贝到你的程序的DEBUG文件夹下,并且在工程的程序集里添加引用。详细说明如下所示:
   (1)关于使用该dll
    Step1——将GDAL5的dll复制到你的工程的debug文件夹下,并且在程序集里添加对它们的引用。
    Step2——将RSIMGControl.dll复制到你的工程的debug文件夹下,并且在程序集里添加对它的引用。
        Step3 —— 在工具栏的选择项里添加RSIMGControl.dll,工具栏中会出现该控件,将其拖到你的窗体上。
    Step4——在使用该控件的窗体代码最上面,加入两行代码
        // using RSIMGControl.control;(这个是作者原来给出的,是不对的)
        using RSIMGControl;
         using OSGeo.GDAL;
   (2)关于利用RSIMGControl控件读取并显示影像
    Topic1——关于显示遥感影像
           // 在你的【打开】或者【窗体加载】里加入以下代码
           RSPicturebox rsPicburebox1=new RSPicturebox(); // 这里也可以直接使用你拖进去的RSIMAControl控件的名称
          OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "regular digital image|*.jpg;*.png;*.bmp*|remote sensing image|*.tif;*.img;*.int";
           if(ofd.ShowDialog() == DialogResult.OK)
           {
               rsPicturebox1.ImagePath = ofd.FileName;
            }
    Topic2——关于设置波段显示的组合,即RGB波段号
         int[] displayBands = new int[3] {2,3,4}; //将读入的影像的234波段分别作为RGB波段
         rsimgPicburebox1.DisplayBands =displayBands; // 【DisplayBands】是RSIMGControl控件属性
         rsimgPicburebox1.Invalidate();
   (3)使用发现该控件存在的问题
    问题1:按照(1)和(2)来显示不同的波段组合,发现源代码里不支持灰度显示,或者说灰度显示有问题,体现在如果设置波段组合为{n,n,n},这里的n表示1,2,3都可以,它不会显示成黑白色,而只会显示成红色或者绿色或者蓝色。
    问题2:按照(1)和(2)来显示不同的波段组合,发现源代码的RGB显示效果是错误的,和预期或者说和软件中的显示效果不一致。
    考虑到以上两个问题,查看了其RSIMGControl.dll生成的源代码,并对其进行了修改,解决了这两个问题。修改了源代码中的核心函数,在RSIMGPicturebox.cs文件的绿色注释部分有说明,类似下面所示:
         // 修改标识:.......
         // 修改说明:.......       
       因为作者之前提供了两个下载,一个是【demo】——1.67M,一个是【source code】——31.37kb。前者基本没什么用,而且显示的效果存在上面所说的问题1和问题2。将作者的【demo】与【source code】,与修改后的【source code】放在一起,其下载地址是http://download.csdn.net/detail/sjbsdlj/4369900
      利用修改后的【source code】工程,重新生成,得到新的RSIMGControl.dll,替换掉原来的,放在你的工程的DEBUG文件夹下即可;当然为了方便,也可以将【souce code】项目添加到你的工程中,然后通过选择【source code】项目的属性将其生成dll的文件夹设置成你的工程的debug文件夹,通过选择【解决方案】的属性将你的工程设置为启动项目,同时将它的依赖项设置为【source code】工程,这样就可以根据你自己的显示需求随时修改【source code】的代码。
      (图片来自LJ的小程序,在此感谢)
       以上就是全部介绍了,希望能对别人有所帮助;呵呵,有什么问题请留言,继续交流!
       补充:目前经测试,byte类型的数据显示正常;但是非byte类型的显示会有问题,应该是在DN值范围转换处的代码问题,暂缓,以后补充!O(∩_∩)O~

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有