当前位置: 技术问答>linux和unix
请问如何在linux处理bmp图!!???哪有资料可查,或者有什么书?
来源: 互联网 发布时间:2015-06-24
本文导语: 很急,谢先了!!! | Windows 3.0 位图文件格式分析 Mircosoft Windows 3.0 中的画笔(Paintbrush)工具软件为用户提供了强有力的图 形绘制和编辑功能, 例如图形的旋转、缩放、...
很急,谢先了!!!
|
Windows 3.0 位图文件格式分析
Mircosoft Windows 3.0 中的画笔(Paintbrush)工具软件为用户提供了强有力的图
形绘制和编辑功能, 例如图形的旋转、缩放、拼接等[1].利用这些功能可以非常方便地
生成所需要的各种复杂的彩色画面. 生成的画面以位图文件的格式存储在磁盘上. 以此
文件为资源, 在Mircosoft Windows 3.0 的支持下, 可以在任何需要的时候在任何设备
上再现该画面[2].
在实际工作中经常遇到这样的问题: 在利用画笔工具软件生成了所需的画面之后,
能否脱离开Windows 的支持, 在其它系统中使用这些画面呢? 解决这一问题的关键在于
了解位图文件的记录格式. 只要了解位图文件的记录格式, 这一问题是容易解决的. 基
于这一目的, 文本将详细介绍Mircosoft Windows 3.0 位图文件的记录格式.
Mircosoft Windows 3.0 位图文件(以.BMP 为扩展名) 由以下三个部分组成:
* 位图文件头(BITMAPFILEHEADER) 数据结构
* 位图信息(BITMAPINFO)数据结构
* 位图阵列
一. 位图文件头的结构
位图文件头数据结构含有位图文件的类型、大小和打印格式等信息. 在 Windows.h
中对其进行了定义:
typedef stuct tagBITMAPFILEHEADER{
WORD bfType; /* 位图文件的类型, 必须为BM. */
DWORD bfSize; /* 位图文件的大小, 以字节为单位. */
WORD bfReservedl; /* 位图文件保留字, 必须为0. */
WORD bfReserved2; /* 位图文件保留字, 必须为0. */
DWORD bfoffbits; /* 位图阵列的起始位置,以相对于位图文件 */
/* 头的偏移量表示, 以字节为单位. */
}BITMAPFILEHEADER;
二. 位图信息的结构
位图信息数据结构含有位图文件的尺寸和颜色等信息. 在Windows.h 中对其进行了
定义:
typedef stuct tagBITMAPINFO{
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColor[];
}BITMAPINFO;
1. bmiHeader 是一个位图信息头(BIMMAPINFOHEADER) 类型的数据结构, 用于说明
位图的尺寸. BITMAPINFOHEADER 的定义:
typedef struct tagBITMAPINFOHEADER{
DWORD BiSize; /* bmiHeader 的长度, 以字节为单位. */
DWORD biWidth; /* 位图的宽度, 以象素为单位. */
DWORD biHight; /* 位图的高度, 以象素为单位. */
WORD biPlanes; /* 目标设备的级别, 必须为1. */
WORD biBitCount; /* 每个象素所需的位数, 必须是1(单色). */
/* 4(16色),8(256色),或24(2^24色)之一. */
DWORD biCompress; /* 位图的压缩类型, 必须是0(不压缩), */
/* 1(BI_RLE8 压缩类型)或2(BI_RLE4压缩类型)之一.*/
DWORD biSizeImage; /* 位图的大小, 以字节为单位. */
DOWRD biXPeIsPerMeter; /* 位图的目标设备水平分辨率,以每米象素数为单位.*/
DWORD biYPeIsPerMeter; /* 位图的目标设备水平分辨率,以每米象素数为单位.*/
DWORD biCIrUsed; /* 位图实际使用的颜色表中的颜色变址数, 详见[3].*/
DWORD biCIrImprotant; /* 位图显示过程中被认为重要颜色的变址数,详见[3]*/
}BITMAPINFOHEADER;
2. bimColor[] 是一个颜色表, 用于说明位图中的颜色. 它有若干个表项, 每一表
项是一个RGBQUAD 类型的结构, 定义了一种颜色. RGBQUAD 的定义:
typedef tagRGBQUAD{
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
}RGBQUAD;
在RGBQUAD定义的颜色中, 蓝色的亮度由rgbBlue来定, 绿色的亮度由rgbGreen来定, 红
色的亮度由rgbred来定, rgbRserved 必须为0.
例如: 若某表项为00,00,FF,00, 那么它定义的颜色为纯红色.
bimColor[]表项的个数由bmBitCount 来定:
当bmBitCount=1,4,8时, bimColor[] 分别有2,16,256个项. 若某点的象素值为n,
则该象素的颜色为bimColor[]所定义的颜色.
当bmBitCount=24时, bimColor[] 的表项为空. 位图阵列的每3 个字节代表一个
项素, 这3 个字节直接定义了象素颜色中蓝、绿、红的相对亮度,因此省去了bimColor[]
颜色表.