BMP图像内容读取中的问题

在读取BMP图像内容的过程中,遇到了以下问题:
1. BMP主要分为BITMAPFILEHEADE文件头、BITMAPINFOHEADER信息头、RGBQUAD颜色表以及DIB(Device-Independent Bitmap)数据内容等四部分,具体结构可以MSDN,其中1、4、8、16位的图像分别拥有2^1=2、2^4=16、2^8=256、2^16=65536种颜色,每个颜色表项占4个字节,其DIB数据中存储的是颜色表中的索引值,24位真彩色及32位图像没有颜色表项,直接存储颜色的信息。
2. BITMAPFILEHEADE文件头占据14字节,但在读取内容时,sizeof(BITMAPFILEHEADE)的值为16,这是由于自己定义的结构体在内存中因为字节对齐(4字节的倍数),占用了16个字节,故如果直接使用fread函数则会直接读入16个字节,从而数据向后移动了2字节的位置,导致后面的数据错误,可以通过对文件头中各项数据逐一读取来解决,当然,存储为BMP文件时也需特别注意。
3. 在winhex中读入图片会发现,因为内存中的数据排列高位在左,低位在右,每一项数据都是颠倒的,譬如BITMAPFILEHEADER中的bfType恒为0x4D42,但会显示为0x424D,其余各项内容亦如此。
4. DIB数据内容中的数据是颠倒的,即从左下方描述至右上方的像素。
5. 在计算图像所占字节大小时,需要考虑到BMP中每一行的像素值需要为4的倍数,不足的用零补全,譬如一张24位3*3像素的图像,所占的字节数为:

14+40+434333=90B

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值