从二进制数据流中构造GDAL可以读取的图像数据(C#)

来源:互联网 发布:苹果cms模板下载 编辑:程序博客网 时间:2024/05/22 18:22

在上一篇博客中,讲了一下使用GDAL从文件流中构造一个GDAL可以识别的数据来进行处理。原以为这个接口在C#中没有,仔细看了下GDAL库中源码,发现C#版本也有类似的函数,下面是GDAL库中的一个C#使用示例代码。

using System;using System.IO;using System.Runtime.InteropServices;using OSGeo.GDAL;/// <summary>/// 一个基于C#语言的简单示例,使用内存文件/// </summary> class VSIMem{public static void usage() { Console.WriteLine("使用例子: vsimem [image file]");System.Environment.Exit(-1);} public static void Main(string[] args){if (args.Length != 1)//如果输入的参数不等于1,返回usage();byte[] imageBuffer; //定义一个buffer用来存储命令行输入的信息//将输入的信息写入buffer中using (FileStream fs = new FileStream(args[0], FileMode.Open, FileAccess.Read)){using (BinaryReader br = new BinaryReader(fs)){long numBytes = new FileInfo(args[0]).Length;imageBuffer = br.ReadBytes((int)numBytes);br.Close();fs.Close();}}//注册GDAL驱动Gdal.AllRegister();//构造内存文件名称,必须以/vsimem/开头string memFilename = "/vsimem/inmemfile";try{//从二进制流中构造内存文件Gdal.FileFromMemBuffer(memFilename, imageBuffer);//使用GDAL打开数据进行处理Dataset ds = Gdal.Open(memFilename, Access.GA_ReadOnly);Console.WriteLine("Raster dataset parameters:");Console.WriteLine("  RasterCount: " + ds.RasterCount);Console.WriteLine("  RasterSize (" + ds.RasterXSize + "," + ds.RasterYSize + ")");//将内存文件转存为一个GeoTiff文件Driver drv = Gdal.GetDriverByName("GTiff");if (drv == null){Console.WriteLine("Can't get driver.");System.Environment.Exit(-1);}drv.CreateCopy("sample.tif", ds, 0, null, null, null);}catch (Exception ex){Console.WriteLine(ex.Message);}finally{Gdal.Unlink(memFilename);}}}

0 0
原创粉丝点击