位图文件结构
来源:互联网 发布:爱淘宝每日抽红包 编辑:程序博客网 时间:2024/06/09 20:36
一、位图文件结构
位图文件由三部分组成:文件头 + 位图信息 + 位图像素数据。其中位图信息是由位图信息头和若干个颜色表项两部分组成。
1、位图文件头。位图文件头主要用于识别位图文件。以下是位图文件头结构的定义:
typedef struct tagBITMAPFILEHEADER { // bmfh WORD bfType; //表示位图的ASCII码为BM, 其16进制表示为0x4D42 DWORD bfSize; //文件大小,以字节为单位 WORD bfReserved1; //保留字,必须为0 WORD bfReserved2; //保留字,必须为0 DWORD bfOffBits; //从位图文件头开始到位图数据段的字节总数,即字节偏移量} BITMAPFILEHEADER;
其中的bfType值应该是“BM”(0x4d42),标志该文件是位图文件。bfSize的值是位图文件的大小。
2、位图信息中所记录的值用于分配内存,设置调色板信息,读取像素值等。
以下是位图信息结构的定义:
typedef struct tagBITMAPINFO { BITMAPINFOHEADER bmiHeader; RGBQUAD bmiColors[1];} BITMAPINFO;
可见位图信息也是由两部分组成的:位图信息头 + 颜色表
2.1位图信息头。位图信息头包含了单个像素所用字节数以及描述颜色的格式,此外还包括位图的宽度、高度、目标设备的位平面数、图像的压缩格式。以下是位图信息头结构的定义:
typedef struct tagBITMAPINFOHEADER{ // bmih DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER;
下表是对结构体当中各个成员的说明:
结构成员说 明biSize结构BITMAPINFOHEADER的字节数,即sizeof(BITMAPINFOHEADER)*biWidth
以像素为单位的图像宽度*biHeight
以像素为单位的图像长度*biplanes
目标设备的位平面数biBitCount
每个像素的位数*(1)biCompression
图像的压缩格式(这个值几乎总是为0,代表未压缩;1代表采用RLE8压缩;2采用RLE4压缩)biSizeImage
以字节为单位的图像数据的大小(对BI_RGB压缩方式而言)biXPelsPermeter
水平方向上的每米的像素个数biYpelsPerMeter
垂直方向上的每米的像素个数biClrused
调色板中实际使用的颜色数(2)biClrImportant
现实位图时必须的颜色数(3)
说明:*是需要加以注意的部分,因为它们是我们在进行位图操作时经常参考的变量
(1)对于每个像素的字节数,分别有一下意义:
1,单色图,调色板中含有两种颜色,也就是我们通常说的黑白图片,有2个颜色表项
4,16色图,有16个颜色表项
8,256色图,通常说的灰度图,有256个颜色表项
16,64K图,一般没有调色板,图像数据中每两个字节表示一个像素,5个或6个位表示一个RGB分量
24,16M真彩色图,一般没有调色板,图像数据中每3个字节表示一个像素,每个字节表示一个RGB分量
32,4G真彩色,一般没有调色板,每4个字节表示一个像素,相对24位真彩图而言,加入了一个透明度,即RGBA模式
(2)这个值通常为0,表示使用biBitCount确定的全部颜色,例外是使用的颜色树木小于制定的颜色深度的颜色数目的最大值。
(3)这个值通常为0,表示所有的颜色都是必需的
2.2颜色表。颜色表一般是针对16位一下的图像而设置的,对于16位和16位以上的图像,由于其位图像素数据中直接对对应像素的RGB(A)颜色进行描述,因而省却了调色板。而对于16位一下的图像,由于其位图像素数据中记录的只是调色板索引值,因而需要根据这个索引到调色板去取得相应的RGB(A)颜色。颜色表的作用就是创建调色板。
颜色表是由颜色表项组成的,颜色表项结构的定义如下:
typedef struct tagRGBQUAD { // rgbq BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved; } RGBQUAD;
其中需要注意的问题是,RGBQUAD结构中的颜色顺序是BGR,而不是平常的RGB。
3、位图数据。最后,在位图文件头、位图信息头、位图颜色表之后,便是位图的主体部分:位图数据。根据不同的位图,位图数据所占据的字节数也是不同的,比如,对于8位位图,每个字节代表了一个像素,对于16位位图,每两个字节代表了一个像素,对于24位位图,每三个字节代表了一个像素,对于32位位图,每四个字节代表了一个像素。
- [链接]位图文件结构
- 位图文件结构bmp
- 位图文件结构
- 位图文件结构
- 位图文件结构
- BMP位图文件结构解析
- 位图(.BMP)文件结构
- 位图(.bmp)文件结构
- 位图文件(.bmp文件)结构
- BMP位图文件结构及平滑缩放
- BMP位图文件结构及VC操作
- BMP位图文件结构及VC操作
- BMP位图文件结构及VC操作
- BMP位图文件结构及VC操作
- BMP位图文件结构及VC操作
- BMP位图文件结构及平滑缩放
- BMP位图文件结构及平滑缩放
- BMP位图文件结构及VC操作
- DELPHi分布式多层设计,的瘦客户机的理解
- 《Google Adsense的秘密》序言:如何使用本书
- Java写黑软-端口扫描器篇
- DB2 UDB 和 SOAP: 使用 DataSnap 的数据库 Web 服务
- 45度地图深度消隐算法(深度排序法)
- 位图文件结构
- 利用Java写自己的专属后门[已发表于《黑客防线》07年12月期]
- C# 利用反射动态创建对象
- php全局变量
- symbian开机自启动
- 史上最全版本自动更新程序及3种实现策略-分析文档(UML图)
- [原创]中国大陆民谣盘点10 李晓东《快乐英雄》
- AMF数据类型
- Delphi MIDAS 的重大BUG ---DelphiBBS