读取Framebuffer中的bmp图片rgb信息的细节问题

本文介绍了在工程中处理BMP图片时遇到的问题,特别是针对24位真彩图的读取。文章详细解析了BMP文件的格式,包括位图文件头、位图信息头、颜色表和位图数据,并强调了4字节对齐的重要性。在读取过程中,由于数据从左下角开始,需要进行上下翻转和BGR到RGB的转换以适应Framebuffer显示。代码示例展示了如何进行这些转换操作。
摘要由CSDN通过智能技术生成
最近在工程中遇见需要在framebuffer读取bmp图片的信息然后将图片传输到akvcam的虚拟播放器上显示。关于framebuffer的基础知识就不说了,我也只知道一些。主要想写的是在读取bmp图片时遇见的问题。读取bmp图片,我们需要知道bmp的基本格式。bmp主要由四部分组成:
  1. 位图文件头(bitmap-file header)

  2. 位图信息头(bitmap-informationheader)

  3. 颜色表(color table)

  4. 颜色点阵数据(bits data)
    我所用的是24位的真彩图,就没有第三部分颜色表。1.位图头文件组成:
    00H-01H (2bytes) :表示文件类型 BMP格式的文件这两个字节是0x4D42,10进制就是19778,字符显示就是‘BM’;
    02H-05H (4bytes) :用字节表示整个文件的大小。
    06H-09H (4bytes) :保留位,必须设置为0;
    0AH-ODH (4bytes) :从文件开始到位图数据开始之间的数据量,称为偏移量:偏移量大小=位图文件头大小+位图信息头大小+调色板大小。
    2.位图信息头组成:
    0EH-11H (4bytes) :位图信息头的长度。
    12H-15H (4bytes) :位图的宽度(单位为像素)。
    16H-19H (4bytes) :位图的高度(单位为像素)。
    1AH-1BH (2bytes) :位图的位面数。(注:该值恒为1)。
    1CH-1DH (2bytes) :每个像素的位数,从上图可以看出为24色位图。根据计算 0x0018对应十进制的值确实为24。
    1EH-21H (4bytes) :压缩说明:
    0 - 不压缩 (使用BI_RGB表示)
    1 - RLE 8-使用8位RLE压缩方式(用BI_RLE8表示)
    2 - RLE 4-使用4位RLE压缩方式(用BI_RLE4表示)
    3 - Bitfields-位域存放方式(用BI_BITFIELDS表示)
    该图片对应的为0x00000000,则该位图不压缩。
    22H-25H (4bytes) :用字节数表示的位图数据的大小。该数必须是4的倍数。当不压缩时,它的取值可以为0。
    26H-29H (4bytes) :用象素/米表示的水平分辨率。
    2AH-2DH (4bytes) :用象素/米表示的垂直分辨率。
    2EH-31H (4bytes) :文件使用的颜色数。如果为0,则表示使用了全部可能的颜色。
    32H-35H (4bytes) :指定重要的颜色数。
    3.调色板:
    大小为N4(bytes),其中N表示颜色的数目。24位图(真彩)是没有调色板的,我们来验证一下当调色板大小为0是否的偏移量是否为54bytes,0x00000036对应十进制为54,验证正确。如果每个像素的位数不是24而是8,则对应的颜色数N=2^8

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值