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)
根据Wikipedia,位图文件格式指定:
代表位图像素的位被打包成行。每行的大小通过填充四舍五入为 4 字节(32 位 DWORD)的倍数。填充字节(不一定是 0)必须附加到行的末尾,以便将行的长度提高到四字节的倍数。当像素阵列加载到内存中时,每一行都必须从 4 的倍数的内存地址开始。此地址/偏移限制仅对加载到内存中的像素阵列是强制性的。出于文件存储的目的,只有每行的大小必须是 4 字节的倍数,而文件偏移量可以是任意的。一个 Width=1 的 24 位位图,每行有 3 个字节的数据(蓝色、绿色、红色)和 1 个字节的填充,而 Width=2 将有 2 个字节的填充,Width=3 将有 3 个字节的填充padding 和 Width=4 根本没有任何填充。
维基百科关于数据结构填充的文章也是一篇有趣的读物,它解释了填充通常用于计算机科学的原因。