引言
当前在开发管理信息系统中Sybase公司的Powerbuilder(下文中简称PB)是一个使用非常广泛的语言工具其数据窗口功能使得数据库系统的开发变得非常简单和快捷笔者在使用Powerbuilder 版本开发一个管理信息系统时要求把人员的身份证照片扫描并存入数据库在使用Kodak图像扫描控件时碰到了麻烦图像能够扫描并存成图像文件但是在PB中就是不能显示经过笔者查阅各种资料并对扫描形成的文件格式进行分析终于解决了这个问题笔者把相关技术知识及处理方法写出来以便大家参考
BMP文件的结构
首先介绍一下BMP文件的知识
BMP文件可分为四个部分位图文件头位图信息头彩色板图像数据阵列如
D E
B B
FF FF FF F F F E F…
图像文件头
():(这里的数字代表的是字即两个字节下同)图像文件头Dh=BM表示是Windows支持的BMP格式
():整个文件大小 为h=
():保留必须设置为
():从文件开始到位图数据之间的偏移量E 为Eh=
():位图图信息头长度一般为h=字节
():位图宽度以像素为单位 为h=
():位图高度以像素为单位 为h=
():位图的位面数该值总是为h=
位图信息头
():每个像素的位数有(单色)(色)(色)(K色高彩色)(M色真彩色)(M色增强型真彩色)为h=
():压缩说明有(不压缩)(RLE 位RLE压缩)(RLE 位RLE压缩)(Bitfields位域存放)RLE简单地说是采用像素数+像素值的方式进行压缩T采用的是位域存放方式用两个字节表示一个像素位域分配为rbg图中 为h=
():用字节数表示的位图数据的大小该数必须是的倍数数值上等于位图宽度×位图高度×每个像素位数 为h=××h=
():用像素/米表示的水平分辨率B 为 Bh=
():用像素/米表示的垂直分辨率B 为 Bh=
():位图使用的颜色索引数设为的话则说明使用所有调色板项
():对图象显示有重要影响的颜色索引的数目如果是表示都重要
彩色板
:彩色板规范
图像数据阵列
…每两个字节表示一个像素阵列中的第一个字节表示位图左下角的像素而最后一个字节表示位图右上角的像素
用Kodak图像扫描控件扫描出来的BMP不能显示的原因分析
通过BMP结构知识的了解我们对BMP的结构有了一个基本的认识对于PB中Kodak图像扫描控件扫描出来的BMP文件为什么不能显示我们来看看扫描出来的文件头部分
D AA A A C
DC
A B D B D
对比BMP文件结构知识里面的说明我们可以发现第字节的内容为C 而不是一般的 查阅其它资料后发现在Windows等操作系统中位图信息头的长度并不一定是h因为微软已经制定出了新的BMP文件格式其中的信息头结构变化比较大长度加长会不会是这个原因引起PB程序不能显示这个格式的Bmp文件呢?笔者把扫描的文件用UltraEdit进行了编辑保持其它的不动把字节从C 改为 然后用PB打开果然图像显示出来了这证明PB只是认识以前格式的BMP文件对新的BMP文件格式不能识别因而不能显示
[] []