基于VB6.0的MICAPS风云二号卫星云图转化实例(转载)
一、
在 Windows 3.0
二、
BMP
图1
位图文件头共分为4
位图文件信息头分为11
位图调色板数据,实际上是一个数组,该数组的大小是由位图的颜色位数和位图实际使用的颜色表中的颜色数所决定的。对于位图文件,只有当位图颜色位数为1
在图1
三、
1、
此格式规定了风云二号卫星云图在MICAPS
diamond 13 8
2、
此格式规定了MICAPS
例如卫星云图第四种调色板文件数据格式:
diamond 15 colorma
0 53295 61710 65535
1 0 0 0
2 2570 13107 2570
3 2570 13107 2570
4 2570 13107 2570
……
四、
1、
首先定义BMP
Type BITMAPFILEHEADER ‘用户自定义文件头类型
bfType(0 to 1) As Byte ‘BYTE数组,用于存放“BM”两个字, ‘需要化为ASCII码
bfSize As Long ‘位图文件大小,包括了BITMAPFILEHEADER
‘和BITMAPINFOHEADER的长度
bfReserved1 As Integer ‘保留字必须为0
bfReserved2 As Integer ‘保留字必须为0
bfOffBits As Long ‘位图数据距离文件头的偏移字节数
End Type
其次定义BMP
Type BITMAPINFOHEADER ‘
biSize As Long ‘BITMAPINFOHEADER
biWidth As Long ‘
biHeight As Long ‘
biPlanes As Integer ‘
biBitCount As Integer ‘
biCompression As Long ‘位图的压缩方式
biSizeImage As Long ‘位图数据块占用字节数
biXPelsPerMeter As Long ‘目标设备的水平分辨率
biYPelsPerMeter As Long ‘目标设备的垂直分辨率
biClrUsed As Long ‘示使用的颜色数
biClrImportant As Long ‘重要的颜色数
End Type
再次设置BMP调色板(RGBQUAD)
Type RGBQUAD ‘
rgbBlue As Byte ‘
rgbGreen As Byte ‘
rgbRed As Byte ‘
rgbReserved As Byte ‘
End Type
最后,将BITMAPINFOHEADER
Type BITMAPINFO ‘
bmiHeader As BITMAPINFOHEADER ‘
bmiColors(0 To 255) As RGBQUAD ‘
End Type
以 上的定义里,程序里需要计算的也就只有bfSize和biSizeImage项。因为对于256色的位图来说,bfOffBits 和biSize都是规定好大小的,bfOffBits为14(BMP文件头字节数)+40(BMP文件信息头字节数)+1024(BMP颜色表字节 数)=1078个字节,biSize为40个字节,而其他的定义在数据结构分析里已做了说明。
2、读取MICAPS调色板
Private MySerial As Integer ‘
Private MicapsBlue(255) As Long ‘
Private MicapsGreen(255) As Long ‘
Private MicapsRed(255) As Long ‘
通过VB的内存块拷贝函数,可以高速度的将MICAPS调色板信息赋值到RGBQUAD。具体指定如下:
CopyMemory FY2Map.bmiColors(I).rgbBlue, MicapsBlue(I), 1
3、写BMP文件
以写二进制文件的方式(For Binary),将BMP文件头、BMP文件信息头、BMP
调色板顺序写入(Put),然后,以二进制文件方式,将卫星云图资料读取后(Get),顺序写入,即可得到转化后的风云卫星BMP图片。转化后的卫星云图,如图2所示。
五、 结束语
本文通过分析BMP和MICAPS系统中的相关数据结构,运用VB6.0编程工具,实现了对MICAPS内的卫星云图批量转化为BMP格式的程序。同时,通过这种方式,也可以完成其他相关的图像类数据的转换和进行BMP文件定制。在本文,使用UltraEdit
参考文献:
[1]
[2]David F.Rogers等,计算机图形学算法基础,机械工业出版社,2002.1,第一版。