利用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文件的绿色注释部分有说明,类似下面所示:
// 修改标识:.......
//
修改说明:.......
利用修改后的【source
code】工程,重新生成,得到新的RSIMGControl.dll,替换掉原来的,放在你的工程的DEBUG文件夹下即可;当然为了方便,也可以将【souce
code】项目添加到你的工程中,然后通过选择【source
code】项目的属性将其生成dll的文件夹设置成你的工程的debug文件夹,通过选择【解决方案】的属性将你的工程设置为启动项目,同时将它的依赖项设置为【source
code】工程,这样就可以根据你自己的显示需求随时修改【source
code】的代码。
(图片来自LJ的小程序,在此感谢)
以上就是全部介绍了,希望能对别人有所帮助;呵呵,有什么问题请留言,继续交流!
补充:目前经测试,byte类型的数据显示正常;但是非byte类型的显示会有问题,应该是在DN值范围转换处的代码问题,暂缓,以后补充!O(∩_∩)O~
加载中,请稍候......