zoukankan      html  css  js  c++  java
  • 从二进制数据流中构造GDAL可以读取的图像数据(C#)

    在上一篇博客中,讲了一下使用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);
    		}
    	}
    }

  • 相关阅读:
    模线性方程理解
    dp水题
    静态字典树模板
    KMPnext数组循环节理解 HDU1358
    layer开发随笔
    javascript时间格式转换
    ubuntu16创建开机启动服务
    es集群搭建
    mongodb集群搭建
    zookeeper集群搭建
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6313916.html
Copyright © 2011-2022 走看看