作者:apiaoapiao_622 | 来源:互联网 | 2022-12-26 17:47
开始研究专门针对Windows的屏幕捕获软件.在MSDN上查看捕获图像的示例时,我发现自己有点困惑.
当我提到不包含与实际文件相关联的标题等的位图的大小时,请记住.我在谈论原始像素数据.我本以为应该是公式(width*height)*bits-per-pixel
.但是,根据示例,这是计算大小的正确方法:
DWORD dwBmpSize = ((bmpScreen.bmWidth * bi.biBitCount + 31) / 32) * 4 * bmpScreen.bmHeight;
和或: ((width*bits-per-pixel + 31) / 32) * 4 * height
我不明白为什么有额外的计算涉及31
,32
和4
.也许填充?我不确定,但任何解释都会非常感激.我已经尝试过谷歌搜索,但没有找到任何特别有用的结果.
1> T33C..:
表示位图像素的位按行打包.通过填充将每行的大小向上舍入为4个字节(32位DWORD)的倍数.
(bits_per_row + 31)/ 32*4确保向上舍入到下一个32位的倍数.答案是以字节为单位,而不是因此*4而不是*32.
请参阅:https://en.wikipedia.org/wiki/BMP_file_format