每个像素的C ++位图位

时间:2011-10-22 12:54:34

标签: c++ windows winapi bitmap bmp

我正在尝试理解基于c ++中的原始数据构建bmp,我有几个问题。

我的bmp可以是黑白的,所以我认为在每像素位字段中我应该使用1.然而在很多指南中我看到填充字段添加了位数以保持32位对齐,这意味着我的bmp与每像素bmp的文件大小相同。

这种理解是正确的还是在某种程度上是每像素1位小于24,32等?

由于

2 个答案:

答案 0 :(得分:1)

单色位图也是对齐的,但它们不会占用24/32-bpp的空间。

  • 一行5像素宽的24位位图将占用16个字节:5 * 3 = 15个像素,1个字节的填充。
  • 一行5像素宽的32位位图需要20个字节:5 * 4 = 20个像素,不需要填充。
  • 一行5像素宽的单色位图将占用4个字节:像素为1个字节(不可能使用少于一个字节,因此不使用整个字节,但不使用其中的8个中的3个),以及3个字节的填充。

因此,单色位图当然会小于24位。

答案 1 :(得分:1)

上面已经给出了答案(位图行被对齐/填充到32位边界),但是如果您想要更多信息,可能需要阅读DIBs and Their Uses,“DIB标题”部分 - 它详细解释。

  

每条扫描线都是DWORD对齐的。扫描线被缓冲到对齐;缓冲不一定是0。

     

扫描线上下颠倒存储,内存中的第一次扫描(扫描0)是图像中最下面的扫描。 (参见图1.)这是Presentation Manager兼容性的另一个工件。 GDI在Set和Get操作期间自动反转图像。图1.(显示内存和屏幕表示的嵌入式图像。)