谁能介绍一下BMP文件的具体格式,是什么结构,每个结构的长度等
小弟有急用
大体的结构我已知道,就是想知道具体一些,8、16、24、32各色的结构差异
问题点数:20、回复次数:5Top
1 楼xxjmz_78(阿甘)回复于 2002-05-28 14:42:53 得分 10
bmp(bitmap 的 缩 写) 文 件 格 式 是 windows 本 身 的 位 图 文 件 格 式, 所 谓 本 身 是 指 windows 内 部 存 储 位 图 即 采 用 这 种 格 式。 一 个 .bmp 格 式 的 文 件 通 常 有 .bmp 的 扩 展 名, 但 有 一 些 是 以 .rle 为 扩 展 名 的, rle 的 意 思 是 行 程 长 度 编 码(run length encoding)。 这 样 的 文 件 意 味 着 其 使 用 的 数 据 压 缩 方 法 是 .bmp 格 式 文 件 支 持 的 两 种 rle 方 法 中 的 一 种。
bmp 文 件 可 用 每 象 素 1、 4、 8、 16 或 24 位 来 编 码 颜 色 信 息, 这 个 位 数 称 作 图 象 的 颜 色 深 度, 它 决 定 了 图 象 所 含 的 最 大 颜 色 数。 一 幅 1-bpp(位 每 象 素, bit per pixel) 的 图 象 只 能 有 两 种 颜 色。 而 一 幅 24-bpp 的 图 象 可 以 有 超 过 16 兆 种 不 同 的 颜 色。
下 一 页 的 图 说 明 了 一 个 典 型 .bmp 文 件 的 结 构。 它 是 以 256 色 也 就 是 8-bpp 为 例 的, 文 件 被 分 成 四 个 主 要 的 部 分: 一 个 位 图 文 件 头, 一 个 位 图 信 息 头, 一 个 色 表 和 位 图 数 据 本 身。 位 图 文 件 头 包 含 关 于 这 个 文 件 的 信 息。 如 从 哪 里 开 始 是 位 图 数 据 的 定 位 信 息, 位 图 信 息 头 含 有 关 于 这 幅 图 象 的 信 息, 例 如 以 象 素 为 单 位 的 宽 度 和 高 度。 色 表 中 有 图 象 颜 色 的 rgb 值。 对 显 示 卡 来 说, 如 果 它 不 能 一 次 显 示 超 过 256 种 颜 色, 读 取 和 显 示 .bmp 文 件 的 程 序 能 够 把 这 些 rgb 值 转 换 到 显 示 卡 的 调 色 板 来 产 生 准 确 的 颜 色。
bmp 文 件 的 位 图 数 据 格 式 依 赖 于 编 码 每 个 象 素 颜 色 所 用 的 位 数。 对 于 一 个 256 色 的 图 象 来 说, 每 个 象 素 占 用 文 件 中 位 图 数 据 部 分 的 一 个 字 节。 象 素 的 值 不 是 rgb 颜 色 值, 而 是 文 件 中 色 表 的 一 个 索 引。 所 以 在 色 表 中 如 果 第 一 个 r/g/b 值 是 255/0/0, 那 么 象 素 值 为 0 表 示 它 是 鲜 红 色, 象 素 值 按 从 左 到 右 的 顺 序 存 储, 通 常 从 最 后 一 行 开 始。 所 以 在 一 个 256 色 的 文 件 中, 位 图 数 据 中 第 一 个 字 节 就 是 图 象 左 下 角 的 象 素 的 颜 色 索 引, 第 二 个 就 是 它 右 边 的 那 个 象 素 的 颜 色 索 引。 如 果 位 图 数 据 中 每 行 的 字 节 数 是 奇 数, 就 要 在 每 行 都 加 一 个 附 加 的 字 节 来 调 整 位 图 数 据 边 界 为 16 位 的 整 数 倍。
并 不 是 所 有 的 bmp 文 件 结 构 都 象 表 中 所 列 的 那 样, 例 如 16 和 24-bpp, 文 件 就 没 有 色 表, 象 素 值 直 接 表 示 rgb 值, 另 外 文 件 私 有 部 分 的 内 部 存 储 格 式 也 是 可 以 变 化 的。 例 如, 在 16 和 256 色 .bmp 文 件 中 的 位 图 数 据 采 用 rle 算 法 来 压 缩, 这 种 算 法 用 颜 色 加 象 素 个 数 来 取 代 一 串 颜 色 相 同 的 序 列, 而 且, windows 还 支 持 os/2 下 的 .bmp 文 件, 尽 管 它 使 用 了 不 同 的 位 图 信 息 头 和 色 表 格 式。
Top
2 楼jinbing(若晴)回复于 2002-05-28 19:04:07 得分 0
在坛子里搜索一下,有很多资料.Top
3 楼stanely(俺是邢她汉子)回复于 2002-05-30 15:48:28 得分 0
msdn里面的很详细Top
4 楼laughcry2002(LaughCry)回复于 2002-06-23 22:21:59 得分 10
BMP文件结构
BMP文件组成
BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。
BMP文件头
BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。
其结构定义如下:
typedef struct tagBITMAPFILEHEADER
{
WORDbfType; // 位图文件的类型,必须为BM
DWORD bfSize; // 位图文件的大小,以字节为单位
WORDbfReserved1; // 位图文件保留字,必须为0
WORDbfReserved2; // 位图文件保留字,必须为0
DWORD bfOffBits; // 位图数据的起始位置,以相对于位图
// 文件头的偏移量表示,以字节为单位
} BITMAPFILEHEADER;
3. 位图信息头
BMP位图信息头数据用于说明位图的尺寸等信息。
typedef struct tagBITMAPINFOHEADER{
DWORD biSize; // 本结构所占用字节数
LONGbiWidth; // 位图的宽度,以像素为单位
LONGbiHeight; // 位图的高度,以像素为单位
WORD biPlanes; // 目标设备的级别,必须为1
WORD biBitCount// 每个像素所需的位数,必须是1(双色),
// 4(16色),8(256色)或24(真彩色)之一
DWORD biCompression; // 位图压缩类型,必须是 0(不压缩),
// 1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一
DWORD biSizeImage; // 位图的大小,以字节为单位
LONGbiXPelsPerMeter; // 位图水平分辨率,每米像素数
LONGbiYPelsPerMeter; // 位图垂直分辨率,每米像素数
DWORD biClrUsed;// 位图实际使用的颜色表中的颜色数
DWORD biClrImportant;// 位图显示过程中重要的颜色数
} BITMAPINFOHEADER;
4. 颜色表
颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色。RGBQUAD结构的定义如下:
typedef struct tagRGBQUAD {
BYTErgbBlue;// 蓝色的亮度(值范围为0-255)
BYTErgbGreen; // 绿色的亮度(值范围为0-255)
BYTErgbRed; // 红色的亮度(值范围为0-255)
BYTErgbReserved;// 保留,必须为0
} RGBQUAD;
颜色表中RGBQUAD结构数据的个数有biBitCount来确定:
当biBitCount=1,4,8时,分别有2,16,256个表项;
当biBitCount=24时,没有颜色表项。
位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下:
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader; // 位图信息头
RGBQUAD bmiColors[1]; // 颜色表
} BITMAPINFO;
5. 位图数据
位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。位图的一个像素值所占的字节数:
当biBitCount=1时,8个像素占1个字节;
当biBitCount=4时,2个像素占1个字节;
当biBitCount=8时,1个像素占1个字节;
当biBitCount=24时,1个像素占3个字节;
Windows规定一个扫描行所占的字节数必须是
4的倍数(即以long为单位),不足的以0填充,
一个扫描行所占的字节数计算方法:
DataSizePerLine= (biWidth* biBitCount+31)/8;
// 一个扫描行所占的字节数
DataSizePerLine= DataSizePerLine/4*4; // 字节数必须是4的倍数
位图数据的大小(不压缩情况下):
DataSize= DataSizePerLine* biHeight;
Top
5 楼wistaria(听风听雨)回复于 2002-06-23 23:00:37 得分 0
http://www.csdn.net/dev/Format/Top




