1、 (3).编写字节数据重排列存储代码:在读取了图像数据文件后,可以通过类按照目标类型格式文件组织顺序,把字节数据写入到文件中保存即可,具体代码见后文。3. 编译与调试:通过用预先知道内部字节数据的实验文件,进行测试,辅助断点调试,可排除一般问题,接着编译生成目标程序;4. 运行程序查看结果:通过对多种格式、多种基本数据类型、多种像素大小的文件进行多种方式转换,再利用ENVI打开两个图像查看是否一样,再辅以“Link”功能看同一像素点值是否相同,这样可以深层确定转换的正确性。五、 结果与分析1. 结果程序运行界面转换后结果2. 分析总结 (1).读取头文件时,不能通过各字段的现有位,按位读取,应
2、该按行读取,再利用字符串匹配方式,找到指定字段,这样避免字段位变化时读取出错误信息;(2).再读取数据文件和写入存储时,应该要以基本数据类型长度个字节为单位进行,不能单纯的以一个字节操作,不然会不具有普遍性,遇到以“int、float”为基本类型的文件时,就会出错;(3).要想节省代码,可先将各种格式数据读取存储为一种格式字节数组中,再从这个格式往其他格式进行转换,这样可以节省不少工作量,但是引入了中间数组,耗费了内存。六、 源代码附录1.读取头文件信息 / /读取头文件信息/summaryparamname=str/param头文件路径和名称iColumnsCount像素列数iLinesCo
3、unt像素行数iBandsCount波段数iType基本数据类型代码strInterLeave文件组织格式returns/returns返回是否读取成功 publicstaticboolReadHDR(Stringstr,outintiColumnsCount,outiLinesCount,outiBandsCount,outiType,outStringstrInterLeave)blnSuccess=false;iColumnsCount-1;iLinesCountiBandsCountiTypestrInterLeave;/初始化各个变量StreamReaderhdr;tryhdrfil
4、enewStreamReader(str);stringcontent=while(hdrtrue)/获取像素列数contenthdr();if(content.Contains(samples)samplescontent.Substring(content.IndexOf(=)+1,content.Length-content.IndexOf(-1).Trim();Convert.ToInt32(samples);System.Console.WriteLine(samples);break;while(hdr!true)/获取像素行数if(content.Contains(linesli
5、nes1).Trim();Convert.ToInt32(lines);System.Console.WriteLine(lines);/获取波段个数bands StringbandsConvert.ToInt32(bands);System.Console.WriteLine(bands); /获取数据种类datatypetypeConvert.ToInt32(type);System.Console.WriteLine(type);/获取数据解译方式interleaveinterleveinterleve;System.Console.WriteLine(interleve);true;c
6、atch/读取失败return/关闭文件流,释放内存blnSuccess;2.读取数据文件进行转换存储bip转换为bsqstrInputFile源文件名称与路径strOutputFile目标文件名称与路径pixComCountspixLineCounts是否转换成功publicBipToBsq(stringstrInputstrOutputpixComCounts,intpixLineCounts,intbands,inttype)inputF(strInputFile,.Open);outputF(strOutputFile,.CreateNew);totalsizepixComCounts
7、*pixLineCountstype;/计算输入文件总字节数(totalsizeinputF.Length)bytebtsbytetotalsize;num0,bt;(btinputF.ReadByte()-1)/读取出全部字节数据,存储在数组中btsnum(byte)bt;num+;for(intbandnum0;bands;bandnum+)/读取波段写入rowpixLineCounts;row+)/按行写入columnumpixComCounts;columnum+)/读取列写入startpostypenumtypenum+)/读取数据基本单元类型输入数据outputF.WriteByt
8、e(btsstartpostypenum); outputF.Flush();/保存缓存文件outputF.Close();/关闭撤销变量文件outputF.Dispose();inputF.Close();inputF.Dispose();bsq转换为bilBsqToBil(stringstrInputFile,strOutputFile,pixComCounts,pixLineCounts,bands,if(totalsize!=inputF.Length)0,bt;while(bt=inputF.ReadByte()/按行写入数据/按波段写入数据bandnum+row*pixComCounts*type;/写入没一列数据/按数据基本单元类型输入数据columnum*type+typenum);bil转换为bipBilToBip(stringbandnum+type*columnum;/获取基准位置
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1