|
发表于 2008-1-19 19:35:04
|
显示全部楼层
这是不是BMP格式图像文件出现卷绕的问题?
一些在高档图形工作站上制作好的BMP格式的图像文件,在用WORD的图片插入功能调入WORD时总出现图像被截断,以致出现横向上前半部分在后半部分在前的所谓"卷绕"现象,并且这种现象只出现在水平方向上。当用Windows本身所提供的一些BMP文件试验时却是正常的。可见,这种现象的出现是与BMP图像文件的来源有关的。
BMP图像文件格式与问题根源
BMP图像文件格式最早应用在Windows系统上。由于Windows的流行,BMP图像文件格式得
到越来越广泛的支持。
BMP图像文件由三部分组成:文件头、位图信息和位图阵列。
BMP的文件头数据结构为:
typedef struct {
int bfType; /* 识别标志 */
long bfSize; /* 文件大小 */
int bfReserved1; /* 保留值,必为0 */
int bfReserved2; /* 保留值,必为0 */
long bfOffBits; /* 位图阵列的起始位置 */
}BITMAPFILEHEADER;
BMP的文件头数据结构长度为14个字节。
BMP的位图信息数据结构由BITMAPINFOHEADER和RGBQUAD两个数据结构组成,其结构为:
typedef struct tagBITMAP INFO{
BITMAP INFOHEADER bmiHeader;
RGBQUAD bmiColors[];
} BITMAPINFO;
其中BITMAP INFOHEADER数据结构包含了有关BMP图像的宽度、高度和其它信息,其数据
结构如下:
type struct{
long biSize; /* 结构信息长度 */
long biWidth; /* 图像宽度 */
long biHeight; /* 图像高度 */
int biPlanes; /* 位平面数 */
int biBitCount; /* 每个像素的位数 */
long biCompress; /* 压缩类型 */
long biSizeImage; /* 图像字节数 */
long biXpelsPerMeter;/* 图像水平分辨率*/
long biYpelsPerMeter;/* 图像垂直分辨率*/
long biClrUsed; /* 调色板颜色数 */
long biClrImportant; /*重要的颜色索引值*/
} BITMAPINFOHEADER;
BITMAPINFOHEADER数据结构长度一般为40个字节。其中从第25个字节开始的四个字节表
示水平方向的显示屏幕分辨率,从第29个字节开始的四个字节表示的是垂直方向的显示屏幕
分辨率,其单位是每米的像素点数。经过详细的研究,发现正是这两个数值造成了图像卷绕现
象的发生。这是因为高档图形工作站的显示屏幕分辨率一般很高,多为1280×1024,而普通微
机的屏幕分辨率则相对低得多。由于二者分辨率的差异造成了图像卷绕现象的出现。其实这
种现象不只是出现在WORD中,也会出现在PowerPoint和EXCEL中;此外由于图像扫描仪的分辨
率要远远大于一般的屏幕分辨率,当使用扫描仪生成的BMP图像文件时也会出现这种情况。
解决图像卷绕问题的三种方法
明白了问题的根源所在,即可对症下药,找出问题的解决方法。其实,要解决这个问题非
常简单,只要修改一下BMP图像文件的文件头就可以了。下面提出三种方法以供大家参考。
第一种方法:用C语言或其它高级语言写一段小程序,将BMP文件的第39、40、41、42、3
、44、45、46字节的值全部改为0就可以了。
第二种方法:用其它图像格式替换BMP图像格式,如在使用图像扫描仪扫描图像时将其保
存为PCX格式就可避免卷绕现象的出现。
第三种方法:在Windows环境下,打开PaintBrush,将要修改的BMP图像文件调入,不加任何
编辑立即以原文件名保存为BMP格式文件即可,但需注意的是图像的彩色索引表可能有所变化 |
|