大侠练刀的时候到了!!——读取这种类型的图像并显示 ( 积分: 200 )

  • 主题发起人 主题发起人 jijinhu
  • 开始时间 开始时间
J

jijinhu

Unregistered / Unconfirmed
GUEST, unregistred user!
该文件头为128个字节,结构如下
wFileID: SmallInt; //文件标识
// LA

wSatelliteID: SmallInt; //标识 1001
wOrbitNo: SmallInt; //号码
WUporDown: SmallInt ; //1 或 0
wYeat: SmallInt; //年
wMonth: SmallInt; //月
wDay: SmallInt; //日
wHour: SmallInt; //时
wminute: SmallInt; //分
wDayorNight: SmallInt ; //白天黑夜标识。0:白天 1:黑夜
wChannelNums: SmallInt ; //通道数
wProjectType: SmallInt ; //
wWidth: SmallInt; // 列数
wHeight: SmallInt ; //行数
fLonPrecision: single; //经度分辨率--等角投影 x分辨率
fLatPrecision: single; //纬度分辨率 -等角投影 y分辨率
fStandardLat1: single; //标准纬度
fStandardLat2: single; //标准经度
fEarthR: single; //地球半径
fMinLat: single; //最小纬度
fmaxLat: single; // 最大纬度
fminlon: single; // 最小经度
fmaxlon: single; // 最大经度
fStandardlon: single; // 圆锥投影中心经度
fCenterlon: single; // 图像中心经度
fCenterlan: single; // 图像中心纬度
bChIndex : array[1..40] of Byte; //通道索引
wComposedDays: word; //已合成天数
wVersion: word; //版本号
wBytes: word; //
dwSkiplength:cardinal; //局地文件头记录后填充字段长度

其后是每个通道按两个字节一个值来存放。每个通道都连续存放,例如:一通道排完接着排二通道的。。。。。。
请问怎么读取这个文件,然后显示出来啊?转换为bmp也行啊!!
大侠出手啊!!!!

我拿他和bmp格式文件来对比说明吧
bmp(p24)是按象素倒着排,每个象素是3个字节,一幅图是这样BGRBGRBGRBGRBGRBGRBGRBGRBGR.....来排。而这个是RRRR......GGGG......BBBB....来排的每个B(或G或R)值是按2个字节来存的。每个通道大小都是 2×行数×列数(一个r或一个g或一个b是两字节)
行列数是:
( wWidth: SmallInt; // 列数
wHeight: SmallInt ; //行数)

要作的工作是1: 把按两个字节存放的值div 10 后 存到一个字节里
2: 3个通道合成一个图 显示出来(图像为:p24宽:wWidth: SmallInt;高:wHeight: SmallInt ;)
 
该文件头为128个字节,结构如下
wFileID: SmallInt; //文件标识
// LA

wSatelliteID: SmallInt; //标识 1001
wOrbitNo: SmallInt; //号码
WUporDown: SmallInt ; //1 或 0
wYeat: SmallInt; //年
wMonth: SmallInt; //月
wDay: SmallInt; //日
wHour: SmallInt; //时
wminute: SmallInt; //分
wDayorNight: SmallInt ; //白天黑夜标识。0:白天 1:黑夜
wChannelNums: SmallInt ; //通道数
wProjectType: SmallInt ; //
wWidth: SmallInt; // 列数
wHeight: SmallInt ; //行数
fLonPrecision: single; //经度分辨率--等角投影 x分辨率
fLatPrecision: single; //纬度分辨率 -等角投影 y分辨率
fStandardLat1: single; //标准纬度
fStandardLat2: single; //标准经度
fEarthR: single; //地球半径
fMinLat: single; //最小纬度
fmaxLat: single; // 最大纬度
fminlon: single; // 最小经度
fmaxlon: single; // 最大经度
fStandardlon: single; // 圆锥投影中心经度
fCenterlon: single; // 图像中心经度
fCenterlan: single; // 图像中心纬度
bChIndex : array[1..40] of Byte; //通道索引
wComposedDays: word; //已合成天数
wVersion: word; //版本号
wBytes: word; //
dwSkiplength:cardinal; //局地文件头记录后填充字段长度

其后是每个通道按两个字节一个值来存放。每个通道都连续存放,例如:一通道排完接着排二通道的。。。。。。
请问怎么读取这个文件,然后显示出来啊?转换为bmp也行啊!!
大侠出手啊!!!!

我拿他和bmp格式文件来对比说明吧
bmp(p24)是按象素倒着排,每个象素是3个字节,一幅图是这样BGRBGRBGRBGRBGRBGRBGRBGRBGR.....来排。而这个是RRRR......GGGG......BBBB....来排的每个B(或G或R)值是按2个字节来存的。每个通道大小都是 2×行数×列数(一个r或一个g或一个b是两字节)
行列数是:
( wWidth: SmallInt; // 列数
wHeight: SmallInt ; //行数)

要作的工作是1: 把按两个字节存放的值div 10 后 存到一个字节里
2: 3个通道合成一个图 显示出来(图像为:p24宽:wWidth: SmallInt;高:wHeight: SmallInt ;)
 
每个通道的字节数一样吗?
“两个字节一个值”??这样存储,那图片是黑白还是彩色的呢?否则怎么保证还原的图片与实际一至?
每个通道的数据分别按其它(如bmp)文件格式,拼好文件头和数值,倒是可以出图的。
 
你定义好文件头数据类型,
打开文件不就一下读出来啦
 
to 竹本无心 如果能把这样的格式文件转换为bmp格式的也可以啊
就可以直接显示了。我在考虑怎么快速的每读出两个字节数据除10 后在用一个字节来存(好像是24位bmp图的一个颜色分量),三个通道都处理完后,就好像是一幅bmp图的RGB三分量都分开放了。下面我觉得就是把三个通道合成一幅bmp图(或直接显示?)

to Netsoft 用流读取头可以看到图像的所有信息,但是要显示这样的图就要考虑3个通道看作是3个颜色的分量来合成位dib图了

很感谢你们两位的参与,继续啊!多指点啊
 
呵呵,楼主是搞遥感的?
 
是的,欢迎爱好编程和gis,遥感的朋友加我作好友,
我 的qq 34403831 验证:大富翁
msn jijinhu@hotmail.com
 
我猜可能是某种现成格式的变种?
比如tiff?
 
大侠救命啊
看我都夜里3点了还在头痛这件事啊!!
 
自己把他顶上去,请高手出手
 
在顶上去!呵呵
 
我再顶,大侠帮忙啊!!
 
请大侠出手
 
楼主还没解决这个问题?主要是大虾们没有文件,不好出手。

其实文件头格式你知道了,自己先照着定义变量,用filestream的方式打开文件,读出数据你一看就明白了
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
I
回复
0
查看
659
import
I
后退
顶部