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

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

using System;

using System.IO;

using System.Runtime.InteropServices;

using OSGeo.GDAL;

///

/// 一个基于C#语言的简单示例,使用内存文件

///

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);

}

}

}

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

在很多时候,我们的图像数据往往都不是文件方式存储在磁盘上,而是可能从网络或者数据库中获取的是二进制的图像数据流.最简单的方式和最容易想到的方式就是将这个文件流保存到磁盘上形成一个文件,然后再使用GDA ...

十七、SAP中使用SQL语句读取一条数据

一.需要说明的是SAP不同类型的结构体类型之间是不能随意赋值的,如果需要赋值,可以使用CORRESPONDING FIELDS OF关键字, 不同类型结构体中同名的成员会被赋值,代码如下: 二.输出代 ...

GDAL中GDALDataset::RasterIO分块读取的实现

GDALDataset类中的RasterIO函数能够对图像任意指定区域.任意波段的数据按指定数据类型.指定排列方式读入内存和写入文件中,因此可以实现对大影像的分块读.写运算操作.针对特大的影像图像,有 ...

利用GDAL从内存中直接解析图像数据

对于网络数据源,调度中可以把数据写入本地,然后读取本地数据格式进行影像的解析(地形有时候也用tif等格式). 此种方式会每次调度进行不必要的IO开销和时间花费. GDAL提供了相应的接口,直接从内存中 ...

使用C#版本GDAL读取复数图像

GDAL的C#版本虽然在很多算法接口没有导出,但是在读写数据中的接口基本上都是完全导出了.使用ReadRaster和WriteRaster方法来进行读写,同时对这两个方法进行了重载,对于常用的数据类型 ...

[算法]最小的K个数和数据流中的中位数

1. 最小的K个数 题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 思路 Java 中的PriorityQueue是 ...

springboot请求体中的流只能读取一次的问题

场景交代 在springboot中添加拦截器进行权限拦截时,需要获取请求参数进行验证.当参数在url后面时(queryString)获取参数进行验证之后程序正常运行.但是,当请求参数在请求体中的时候, ...

matlab中imread 从图形文件读取图像

来源:https://ww2.mathworks.cn/help/matlab/ref/imread.html?searchHighlight=imread&s_tid=doc_srchtit ...

C++调用GDAL库读取并输出tif文件,并计算斑块面积输出景观指数:CSD

部分源码选自GDAL库的官方网址:www.gdal.org,其余的代码为笔者自己编写. // readfile.cpp : 定义控制台应用程序的入口点. // /* part of the codes ...

随机推荐

mysql表名查询sql

select table_schema,table_name,engine from information_schema.tables where table_schema not in('info ...

c++ 接口继承和实现继承

所谓接口继承,就是派生类只继承函数的接口,也就是声明:而实现继承,就是派生类同时继承函数的接口和实现. 我们都很清楚C++中有几个基本的概念,虚函数.纯虚函数.非虚函数. 虚函数: 虚函数是指一个类中 ...

Qualcomm Web Site For Android Development

https://www.codeaurora.org/xwiki/bin/QAEP/release https://support.cdmatech.com/login/ https://chipco ...

Java 随笔记录

1. java对象转json Message msg = generateMessage();ObjectMapper mapper = new ObjectMapper();String json ...

如何在Cocos2D 1.0 中掩饰一个精灵(二)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 让我们开始吧 打开Xcode,从New Project中选择co ...

windows环境 springboot+docker开发环境搭建与hello word

1,下载安装 docker toolbox 下载地址:http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/ docker t ...

[洛谷P4147] 玉蟾宫

类型:单调栈 传送门:>Here< 题意:求一个$01$矩阵中最大子矩形(全是$1$)的面积 解题思路 单调栈的一个经典应用 考虑维护一个数组$p[i][j]$表示$(i,j)$往上最多有 ...

用setuptools&lowbar;scm来自动控制Python包的版本

手动管理Python包的版本号一段时间后,寻求自动化的手段,是自然而然的. 手动管理版本 手动管理Python包的版本,需要注意两个方面: 每次发布新包前,要更新包的版本号. 在安装后的默认模块下应该 ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值