24位BMP文件存储介绍

24位bmp存储是按BGR BGR。。。 存的

bmp位图在存储时,图片数据部分的字节数一定是4的倍数,如果不够四的倍数,在每一行要补齐字节。

具体说是这样,假设现在有一张图,宽6个像素,高随便,24位格式保存(每个像素点占三个字节,分别代表RGB三颜色)
那么它每行有效数据部分应该是6×3=18字节,18不是4的倍数,所以要补齐,补到20字节。最终存储格式如下图:
 
前18位为有效像素数据,最后两位XX为填补数据,无意义
BGR BGR BGR BGR BGR BGR XX
BGR BGR BGR BGR BGR BGR XX
BGR BGR BGR BGR BGR BGR XX
……
 
在图像显示时,填充的数据是不会显示出来的。

但是我们在对图像进行处理时,要注意跳过这些无效的填充数据。

调色板问题

 调色板用于说明位图中的颜色,它有若干个表项,每个表项是一个RGBQUAD类型的结构,定义一种颜色。RGBQUAD结构的定义

typedef struct tagRGBQUAD

{

  BYTE rgbBlure;

  BYTE rgbGreen;

  BYTE rgbRed;

  BYTE rgbReserved;//保留,必须为0

}

二、

 调色板中RGBQUAD结构数据的个数有bitBitCount来确定;

当biBitCount=1,4,8时,分别有2,16,256个表项。

当biBitCount=24时,该BMP图像就是24Bit真彩图,没有调色板。

三、

 位图数据内容

 位图数据记录了位图的每一个像素值,记录顺序是在扫描行内从左到右,扫描行之间是从下到上。位图的一个像素值

 所占的字节数由biBitCount来确定:

 当biBitCount=1时,8个像素占1个字节;

 当biBitCount=4时,2个像素占1个字节;

 当biBitCount=8时,1个像素占1个字节;

 当biTbiCount=24时,1个像素占3个字节。

 24位真彩图每一行占的实际字节数()

  Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位)不足的以0填充

 一个扫描行所占的字节数的计算方法

DataSizePerLine=(biwidth*biBitCount/8+3)/4*4

图片数据的大小(不压缩情况下)

DataSize=DataSizePerLine*biHeight;

//公式解释

注意:C语言的除法里,两个int相除,结果会被CUT掉——只取商而不取余数。
biwidth*biBitCount/8 好理解,就是一个扫描行的字节数,
记 b = biwidth*biBitCount/8,  那么, 原式 =(b+3)/4*4,
情况一,b是四的倍数,(b+3)/4*4 == (b/4*4 + 3/4*4) == b + 0 == b
情况二,b不是四的倍数
  另 b = 4x+n,其中4x就是x的4倍数,n就是那个余数。
  容易得知:1 <= n <= 3,   4 <= n+3 <= 6,
    于是,原式 ==  (4x+n + 3)/4*4, (其中x是任意值),
                       ==  (4x/4*4 + (n+3)/4*4)
    在C语言中  ==   4x + 4  == (x+1)*4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值