填充24位rgb位图

sal*_*eri 10 c padding bmp 24-bit

有人可以向我解释为什么在24位rgb位图文件中我必须添加一个尺寸取决于图像宽度的填充吗?做什么的 ?

我的意思是我必须将此代码添加到我的程序中(在C中):

 if( read % 4 != 0 ) {
   read = 4 - (read%4);
   printf( "Padding: %d bytes\n", read );
   fread( pixel, read, 1, inFile );
  }
Run Code Online (Sandbox Code Playgroud)

Pau*_*l R 7

因为24位是奇数个字节(3),并且由于各种原因,所有图像行都需要从一个4字节的倍数的地址开始.


MxN*_*xNx 5

根据Wikipedia,位图文件格式指定:

代表位图像素的位被打包成行。每行的大小通过填充四舍五入为 4 字节(32 位 DWORD)的倍数。填充字节(不一定是 0)必须附加到行的末尾,以便将行的长度提高到四字节的倍数。当像素阵列加载到内存中时,每一行都必须从 4 的倍数的内存地址开始。此地址/偏移限制仅对加载到内存中的像素阵列是强制性的。出于文件存储的目的,只有每行的大小必须是 4 字节的倍数,而文件偏移量可以是任意的。一个 Width=1 的 24 位位图,每行有 3 个字节的数据(蓝色、绿色、红色)和 1 个字节的填充,而 Width=2 将有 2 个字节的填充,Width=3 将有 3 个字节的填充padding 和 Width=4 根本没有任何填充。

维基百科关于数据结构填充的文章也是一篇有趣的读物,它解释了填充通常用于计算机科学的原因。