C# GDAL 打开遥感影像图片
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# GDAL 打开遥感影像图片相关的知识,希望对你有一定的参考价值。
最近用C# 做一个关于遥感影像的小程序,发现用BITMAP打开像素超过1W的图片后无法 DRAWIMAGE到控件上,了解到用GDAL可以,看了下,觉得没必要,为做个小板凳,搞个万吨机床来。谁有这方面的经验,来给点提示。不想采用图片分割的方法。谁知道用BITMAPDATA是怎么实现的,给个例子,感激不尽,另如果有GDAL 的C#使用例子,发个来学习下,也给分。
对于遥感来说,1W像素实在不算多。GDAL对你这个问题没有什么意义,因为GDAL是用来读写图像文件的,而你的问题是绘制。要绘制影像,以下几点要考虑到:1)如果只是显示局部影像,那么一定要先把这局部数据提取出来;2)如果要在窗口像素超出要显示的影像像素,那么要采用金字塔技术,根据像素多少判断该采用哪个金字塔层,建金字塔的技术有很多,比如最邻近法(最最简单的方法)、双线性插值法、立方卷积法等。最邻近法因为速度快,你在显示之前按照原理直接从基础影像中提取即可,其他方法最好要预先建立。 参考技术A 解决方法如下:它只是一个开源库,并不是一个单独的软件,
对于遥感来说,1W像素实在不算多。GDAL对你这个问题没有什么意义,因为GDAL是用来读写图像文件的,而你的问题是绘制。要绘制影像,以下几点要考虑到:
1,如果只是显示局部影像,那么一定要先把这局部数据提取出来;
2,如果要在窗口像素超出要显示的影像像素,那么要采用金字塔技术,根据像素多少判断该采用哪个金字塔层,建金字塔的技术有很多,比如最邻近法(最最简单的方法)、双线性插值法、立方卷积法等。最邻近法因为速度快,你在显示之前按照原理直接从基础影像中提取即可,其他方法最好要预先建立。 参考技术B GDAL 打开遥感影像图片具体如下:
首先,需要编译GDAL库的源代码。
GDAL是一个非常强悍的遥感数据格式解析库,支持多种遥感数据格式的读写,而且还有一些算法实现。然而,它只是一个开源库,并不是一个单独的软件,而
是C++写的源代码,需要编译成动态链接库后才能为我们程序调用,如果需要在C#/.Net环境下调用,还需特别编译C#版的DLL。
编译完成后,会得到9个DLL文件(以GDAL1.10版为例):gdal110.dll、
gdal_csharp.dll、gdal_wrap.dll、gdalconst_csharp.dll、gdalconst_wrap.dll、
ogr_csharp.dll、ogr_wrap.dll、osr_csharp.dll、osr_wrap.dll。
注意:需要强调的一点是,如果编译GDAL时添加了额外的依赖库,需要将其动态链接库一并拷贝过来。比如,我编译GDAL库时就添
加了HDF4、HDF5、JPEG2000、NetCDF、Proj4等文件格式支持,那么调用的时候就需要将hd425m.dll等拷贝到同上面几个
DLL一起。
其次,C#下的环境配置。
我们首先建立一个Windows窗体应用程序,将上面得到的9个DLL文件拷贝到项目所在的文件夹,然后在解决方案面板下找到引用项,右键添加引用,选择gdal_csharp.dll将它添加进来,这样就可以在C#调用GDAL函数了。
再次,初始化GDAL环境。具体做法是:
using OSGeo.GDAL;
将上面这一句添加到namespace这一行前面。
然后在构造函数或者Form_Load函数中添加下面两行:
OSGeo.GDAL.Gdal.AllRegister();
OSGeo.GDAL.Gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","YES");
说明:第一行是注册所有的格式驱动,第二行是支持中文路径和名称,由于GDAL默认不支持中文路径,所以在编译的时候会修改源码让它支持中文路径,C++代码就可以直接支持了,但是会发现C#版还是会不支持,所以需要加上第二句。
这样开发环境就搭建好了,可以直接调用GDAL函数进行图像处理了。 参考技术C GDAL没听说过,所以给不了建议了,这方面其实很好解决的,就是你说的那个“图像分割”的方法,不过不是预分割,而是读入内存后,要drawimage的时候,只画全图的一部分,然后通过上下左右等操作不断改变画图的初始点坐标后重绘来实现的,drawimage里面有个重载就是可以定义源图像的初始坐标及矩形大小的。
以上是关于C# GDAL 打开遥感影像图片的主要内容,如果未能解决你的问题,请参考以下文章
Python遥感图像处理应用篇(十六):GDAL 将归一化处理csv数据转化为遥感影像
Python遥感图像处理应用篇(十六):GDAL 将归一化处理csv数据转化为遥感影像