CreateDIBSection返回的ppvBits的大小是多少?



我正在尝试捕获屏幕。 我使用用屏幕尺寸初始化的BITMAPINFO调用CreateDIBSection,平面数 = 1,bpp = 32,模式 = rgb。 然后,它向我返回一个指向ppvBits中的位图数据的指针。 但是如何确定此缓冲区中有多少字节? 它没有为我填写biSizeImage。 我应该从 bpp 和维度来计算它吗? 像width * height * (bpp/8)

BITMAPINFOHEADER的文档解释了如何计算"步幅" - 即从一行到下一行的字节数。

对于未压缩的 RGB 格式,最小步幅始终是图像 宽度(以字节为单位),向上舍入到最接近的 DWORD。您可以使用 以下公式计算步幅:

stride = ((((biWidth * biBitCount) + 31) & ~31)>> 3)

若要计算位图所需的总字节数,请将步幅乘以行数。

请注意位图行与 DWORD 对齐的要求 - 这就是步幅计算向上舍入的原因。

相关内容

最新更新