- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
24位真彩色图片
STM32 开发板上BMP 图片的显示之一
一、BMP 图片的格式分析
1、BMP 文件的大致组成
BMP 文件的数据由四个部分组成:位图文件头部、位图信息头部、彩色表和图
像数据阵列字节。其中彩色表不是必须的,比如24 位真彩色位图就没有彩色表。
(1)位图文件头部的组成 (前面14 个字节)
(2 )位图信息头部的组成 (从14 字节开始,14-53 共40 个字节)
(3 )下面以一个文件的分解为例,加深对各个分量的理解。
第一个文件为 160x128 ,24 位真彩色,用Ultraedit 获得其头部如下:
分析的信息填入上面表格的第三栏和第四栏。
对于BMP 最重要的几个信息如上表用红色标注出来的。
文件头14 个字节,主要是“BM”标注,文件大小等于61994 个字节,最重要的是
指出了图像数据的偏移等于54 字节。
信息头最主要的信息时位图像素宽度等于 160 字节,位图像素高度等于 128 字
节,每个像素占据24 位 (也就是3 个字节)。图像数据总共占用的字节数等于
= 160 x 128 x 3 = 61440 字节,再加上头部54 字节,就是整个BMP 图片文件
的大小 61494 个字节。
(4 )单色BMP 格式
黑白图,每个像素只占一位,而颜色表总共有两项,占8 个字节。故图像数据区
的开始是 0x36 + 8 = 0x3E 字节。
颜色表总是从0x36=54 字节开始。 代表黑色,00FFFFFF 代表白色。比如F0 这样一个字节,实际表示
八个像素,前面四个胃白色,后面四个像素为黑色。
(5 )16 色BMP 格式
16 个颜色,每个像素占据4 位,颜色表总共16 项,占据64 个字节,故数据区
是从 0x36 + 0x40 = 0x76 字节开始。
(6 )256 色BMP 格式
256 个颜色,每个颜色占据8 位,颜色表总共256 项,占据 256 x 4 = 1024 字
节。故图像数据区开始是 第0x36 + 0x400 = 0x436 字节。
(7 )BMP 图片的重要特征
数据区里的数据是线性的,行主序,依次是 点一的B 值,点一的G 值,点一的
值,点二的B 值,点二的G 值,点二的 值,等等,需要注意的是,Windows
中普遍采用了行倒向扫描的约定,即,BMP 文件中原点在左下角,图像矩阵数
组第一行实际是图片的最后一行。
还有一点也需要注意:Windows 要求每一行的数据的长度必须是4Bytes 的整数
倍,如果不是,要以值为0 的字节补充,如果读取的时候不处理,会得到一个倾
斜的图像。如一个
2、读取BMP 文件的思路
(1)图像信息结构体
建立一个 BMPInfo 结构体,主要包括 图像数据区偏移 DataOff、彩色表偏移
ColorOff、像素宽度PixWidth、像素高度PixHeight、每像素位数BitPerPix、是
否压缩Compressed、图像每行字节数BytePerRow=每像素位数 * 宽度/8,补满
为4 的整数倍。(主要是由于每一行的数据的长度必须是4Bytes 的整数倍,可
能出现0 填充情况)。
(2 )如何读取指定行、指定列的像素
U32 GetPixel (BMPINFO, Row ,Col )
首先要定位行 (相对高度而言)首的偏移,相对于数据区的偏移计算公式是
(Height – Row )* BytePerRow,再计算列数相对于行首的偏移=Col * 每像素
位数 / 8 。故总的数据偏移 = 数据区偏移 + 行首的相对偏移 + 列偏移。
将文件指针定位到文件的偏移处,如果是24 真彩色位图,则读取3 个字节,转
换为32 位格式;如果是256 色图,则还要读取彩色表:文件偏移 = 彩色表偏
移 + 颜色索引x 4 ,再读取四个字节返回32 位数据。
(3 )从文件读取的RGB 数据,要转换为LCD 支持的格式,比如我这上面的液
晶支持 16 位 (5:
文档评论(0)