编程实现BIPBSQBIL三种格式转换详解Word下载.docx

上传人:b****5 文档编号:19133201 上传时间:2023-01-04 格式:DOCX 页数:13 大小:591.08KB
下载 相关 举报
编程实现BIPBSQBIL三种格式转换详解Word下载.docx_第1页
第1页 / 共13页
编程实现BIPBSQBIL三种格式转换详解Word下载.docx_第2页
第2页 / 共13页
编程实现BIPBSQBIL三种格式转换详解Word下载.docx_第3页
第3页 / 共13页
编程实现BIPBSQBIL三种格式转换详解Word下载.docx_第4页
第4页 / 共13页
编程实现BIPBSQBIL三种格式转换详解Word下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

编程实现BIPBSQBIL三种格式转换详解Word下载.docx

《编程实现BIPBSQBIL三种格式转换详解Word下载.docx》由会员分享,可在线阅读,更多相关《编程实现BIPBSQBIL三种格式转换详解Word下载.docx(13页珍藏版)》请在冰豆网上搜索。

编程实现BIPBSQBIL三种格式转换详解Word下载.docx

(3).编写字节数据重排列存储代码:

在读取了图像数据文件后,可以通过类按照目标类型格式文件组织顺序,把字节数据写入到文件中保存即可,具体代码见后文。

3.编译与调试:

通过用预先知道内部字节数据的实验文件,进行测试,辅助断点调试,可排除一般问题,接着编译生成目标程序;

4.运行程序查看结果:

通过对多种格式、多种基本数据类型、多种像素大小的文件进行多种方式转换,再利用ENVI打开两个图像查看是否一样,再辅以“Link”功能看同一像素点值是否相同,这样可以深层确定转换的正确性。

五、结果与分析

1.结果

程序运行界面

转换后结果

2.分析总结

(1).读取头文件时,不能通过各字段的现有位,按位读取,应该按行读取,再利用字符串匹配方式,找到指定字段,这样避免字段位变化时读取出错误信息;

(2).再读取数据文件和写入存储时,应该要以基本数据类型长度个字节为单位进行,不能单纯的以一个字节操作,不然会不具有普遍性,遇到以“int、float”为基本类型的文件时,就会出错;

(3).要想节省代码,可先将各种格式数据读取存储为一种格式字节数组中,再从这个格式往其他格式进行转换,这样可以节省不少工作量,但是引入了中间数组,耗费了内存。

六、源代码附录

1.读取头文件信息

/// 

<

summary>

 

/// 

读取头文件信息

/summary>

param 

name="

str"

>

/param>

头文件路径和名称

iColumnsCount"

像素列数

iLinesCount"

像素行数

iBandsCount"

波段数

iType"

基本数据类型代码

strInterLeave"

文件组织格式

returns>

/returns>

返回是否读取成功

public 

static 

bool 

ReadHDR(String 

str,out 

int 

iColumnsCount,out 

iLinesCount,out 

iBandsCount,out 

iType,out 

String 

strInterLeave)

{

blnSuccess 

false;

iColumnsCount 

-1;

iLinesCount 

iBandsCount 

iType 

strInterLeave 

"

;

//初始化各个变量

StreamReader 

hdr;

try

hdrfile 

new 

StreamReader(str);

string 

content="

while(hdrtrue)

{//获取像素列数

content 

hdr();

if(content.Contains("

samples"

))

samples 

content.Substring(content.IndexOf("

="

) 

1, 

content.Length 

content.IndexOf("

-1).Trim();

Convert.ToInt32(samples);

System.Console.WriteLine(samples);

break;

}

while 

(hdr 

!

true)

{//获取像素行数

if 

(content.Contains("

lines"

lines 

1).Trim();

Convert.ToInt32(lines);

System.Console.WriteLine(lines);

{//获取波段个数

bands"

String 

bands 

Convert.ToInt32(bands);

System.Console.WriteLine(bands);

}

//获取数据种类

data 

type"

type 

Convert.ToInt32(type);

System.Console.WriteLine(type);

//获取数据解译方式

interleave"

interleve 

interleve;

System.Console.WriteLine(interleve);

true;

catch

{//读取失败

return 

//关闭文件流,释放内存

blnSuccess;

2.读取数据文件进行转换存储

bip转换为bsq

strInputFile"

源文件名称与路径

strOutputFile"

目标文件名称与路径

pixComCounts"

pixLineCounts"

是否转换成功

public 

BipToBsq(string 

strInput 

strOutput 

pixComCounts,int 

pixLineCounts,int 

bands,int 

type)

inputF 

(strInputFile, 

.Open);

outputF 

(strOutputFile, 

.CreateNew);

totalsize 

pixComCounts 

pixLineCounts 

type;

//计算输入文件总字节数

(totalsize 

inputF.Length)

byte[] 

bts 

byte[totalsize];

num 

0, 

bt;

((bt 

inputF.ReadByte()) 

-1)

{//读取出全部字节数据,存储在数组中

bts[num] 

(byte)bt;

num++;

for 

(int 

bandnum 

0;

bands;

bandnum++)

{//读取波段写入

row 

pixLineCounts;

row++)

{//按行写入

columnum 

pixComCounts;

columnum++)

//读取列写入

startpos 

typenum 

typenum++)

{//读取数据基本单元类型输入数据

outputF.WriteByte(bts[startpos 

typenum]);

outputF.Flush();

//保存缓存文件

outputF.Close();

//关闭撤销变量文件

outputF.Dispose();

inputF.Close();

inputF.Dispose();

bsq转换为bil

BsqToBil(string 

strInputFile, 

strOutputFile, 

pixComCounts, 

pixLineCounts, 

bands, 

if(totalsize!

=inputF.Length)

0,bt;

while((bt=inputF.ReadByte())>

{//按行写入数据

{//按波段写入数据

bandnum+row*pixComCounts*type;

//写入没一列数据

{//按数据基本单元类型输入数据

columnum*type+typenum]);

bil转换为bip

BilToBip(string 

bandnum+type*columnum;

//获取基准位置

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 国外设计风格

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1