不借助其它工具,一句DOS命令实现Micaps云图转换BMP图片?不要怀疑,就是只需一句COPY命令。
为了增加你的信心,我将转换命令写成了批处理,连同所需数据打包上传,可以先下载试试: http://download.csdn.net/source/2881453
一、转换原理:
Micaps格式的卫星云图,是气象部门最常用的卫星云图格式,在Micaps定义为第13类格式,Micaps云图有一个128字节的文件头,后面为一个像素一个字节的点阵,数据格式描述如下:
======================================================================================================== 第十三类数据格式:图象数据(卫星云图、雷达拼图、地形图) |
文件头:(文件头为TEXT格式)
diamond (8个字符)13 (3个字符) 数据说明(40个字符)
年 (5个字符)月(3个字符)日 (3个字符)时次 (3个字符)X方向图象大小 (5个字符)Y方向图象大小 (5个字符)图象左下角经度坐标(8个字符)图象左下角纬度坐标 (8个字符)投影方式(2个字符,1-lambert 2-mecator 3-北半球 4-南半球) 放缩系数(5个字符)图象类型(2个字符,1—红外云图 2—雷达拼图 3—地形图 4—可见光云图 5—水汽图)象素值与相应物理量对照表文件名(12个字符)中心经度(8个字符)、中心纬度(8个字符)
(文件头部分共128个字符)
数据:(数据格式为二进制数据)
一个象素点占一个字节,先沿X方向后Y方向。
========================================================================================================
BMP文件,大家应该很熟悉了,这里我就不再啰嗦了,格式参考这里:http://baike.baidu.com/view/189487.htm
先来做个试验,用photoshop把它显示出来看看。!!!!photoshop能打开Micaps云图?不要怀疑,就是photoshop。
启动photoshop,菜单“文件”-“打开为”,出现打开文件对话框,在最下面“打开为”组合框里选“RAW(*.RAW)”类型,任选一个Micaps云图文件,出现“RAW选项”对话框,填写:高度:512,宽度:512,通道:1,颜色深度:8位,标题大小:128,
试验证明,Micaps卫星云图点阵数据实际上与8位BMP点阵数据是一样的。
看到这里,大家应该能明白,Micaps云图除了128个字节的文件头和BMP不一样,后面的点阵数据格式是完全一致的。所以,我们可以用大小颜色深度与Micaps一致的BMP文件头代替Micaps的文件头,即可完成转换。
二、、实践:
思路有了,但如何才能用一句COPY命令就实现转换呢?
用过DOS的人应该知道COPY命令,它是用来拷贝文件的,但它还有一个功能,就是连接文件,就是把两个文件合并成一个文件,COPY命令的说明如下:
========================================================================================================
C:/Documents and Settings/Administrator>copy/?
将一份或多份文件复制到另一个位置。
COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/A | /B ] sou
[+ source [/A | /B] [+ ...]] [destination [/A
source 指定要复制的文件。
/A 表示一个 ASCII 文本文件。
/B 表示一个二进位文件。
/D 允许解密要创建的目标文件
destination 为新文件指定目录和/或文件名。
/V 验证新文件写入是否正确。
/N 复制带有非 8dot3 名称的文件时,
尽可能使用短文件名。
/Y 不使用确认是否要改写现有目标文件
的提示。
/-Y 使用确认是否要改写现有目标文件
的提示。
/Z 用可重新启动模式复制已联网的文件。
========================================================================================================
可以看到,copy中使用"+"号,即可把两个文件合并成一个,因为Micaps云图和BMP都是二进制文件,参数中还应该加上“/B”。
为了使用copy命令连接BMP文件头和Micaps数据,我们需要做一个BMP文件头。用Windows“画图”新建一个BMP,改变图像大小为512*513,另存为“256色位图”,再用UltraEdit或者HexEdit等16进制编辑器删除该BMP文件的点阵数据部分保存为cloudhead.dat。为啥图像大小是512*513而不是512*512呢,因为为了简单,我们把Micaps云图所有内容都当做点阵数据,包括128字节的文件头,所以给BMP增加了一个扫描行,制作cloudhead.dat时也要给它后面再加上(512-128)字节空数据。另外,画图默认调色板不太适合显示卫星云图,最好能用卫星云图调色板代替cloudehead.dat中的调色板。这些过程还是挺麻烦的,不过不用担心,下载的包中已经包含制作好的cloudhead.dat,直接使用就是了。
最后,这句DOS命令隆重登场:
copy cloudhead.dat/b+1011260130.000/b 1011260130.bmp
其中,"1011260130.000"为要转换的Micaps格式云图,1011260130.bmp为转换后的BMP云图。
为了再简单些,再给大家提供一个批处理“Cloud2Bmp2.bat”,可以用命令行跟参数的形式转换:
Cloud2Bmp2.bat <Micaps云图文件名(不包含扩展名)>
其实,它也只有一行命令,利用批处理参数可以让大家少输一次文件名,命令如下:
copy/b cloudhead.dat/b+%1.000/b %1.bmp
三、总结:
转换过程就是这么简单,实际上就是给Micaps云图加上BMP文件头。只要研究清楚原理,就可以举一反三。Micaps下还有传真图,也可以用类似方法进行转换。
最后,你可能还要问,如何给它叠加上地图?这个工作用批处理就没法完成,需要写程序了,你可以在图上划线,还可以在上面叠加一层透明地图.....