gpt4 book ai didi

windows - 为什么要这样计算位图大小?

转载 作者:可可西里 更新时间:2023-11-01 11:53:04 25 4
gpt4 key购买 nike

我正在阅读与捕获图像相关的 Window 示例。文章位于http://msdn.microsoft.com/en-us/library/dd183402(v=vs.85).aspx .让我印象深刻的一件事是位图大小的计算。是这样的:

 DWORD dwBmpSize = ((bmpScreen.bmWidth * bi.biBitCount + 31) / 32) * 4 * bmpScreen.bmHeight;

我希望它更像这样:

 DWORD dwBmpSize = bmpScreen.bmWidth  * bmpScreen.bmHeight * bi.biBitCount / 8;

有人介意解释一下前者的观点吗?

谢谢!

最佳答案

位图由一系列水平扫描线表示。该表示的最小不可分割单元是 32 位字。这些字永远不会在扫描线之间共享,这意味着如果扫描线中的最后一个字没有被完全使用,它就会保持原样(很可能在未使用的位中有垃圾值)。下一个扫描线将以一个新的 32 位字开始。例如,如果您的位图只有 1 像素宽,它仍将使用完整的 32 位字来表示位图中的每一行。

这就是为什么上面的公式从计算代表位图的一个扫描线需要多少个 32 位字开始。这正是 ... + 31)/32 技巧所做的。通常,在无符号算术中,(A + B - 1)/B 的计算结果为 A 除以 B 并向上舍入。因此,((bmpScreen.bmWidth * bi.biBitCount + 31)/32 部分告诉您需要多少个 32 位字来表示一行位图。然后乘以 4,告诉您需要多少个 8 位字节来表示一行位图。

最后,将它乘以 bmpScreen.bmHeight 得到整个位图的 8 位字节总数。

关于windows - 为什么要这样计算位图大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24835333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com