gpt4 book ai didi

c++ - 位图行大小计算

转载 作者:太空狗 更新时间:2023-10-29 23:09:17 25 4
gpt4 key购买 nike

我找到了 this source效果很好,我只想问一下我没有得到的这段代码:

//calculate total size of RGBQUAD scanlines (DWORD aligned)

bih.biSizeImage = (((bih.biWidth * 3) + 3) & 0xFFFC) * bih.biHeight ;

我明白为什么有“*3”,但没有得到“+3”和 FFFC hexa 的按位与。有人能解释一下为什么他会这样计算图像的大小吗?

谢谢

最佳答案

如果您对各种值进行尝试,您会发现它实际上是在强制 (width * 3) 向上舍入到包含它的 4 的最小倍数。他这样做可能是为了强制执行 32 位对齐。

使用 python :

>>> f = lambda x: ((x * 3) + 3) & 0xFFFC
>>> [f(x) for x in range(1, 20)]
[4, 8, 12, 12, 16, 20, 24, 24, 28, 32, 36, 36, 40, 44, 48, 48, 52, 56, 60]

下面显示了只进行直接乘法和向上取整为 4 的倍数之间的区别

>>> [(3*x, f(x)) for x in range(1, 8)]
[(3, 4), (6, 8), (9, 12), (12, 12), (15, 16), (18, 20), (21, 24)]

令我惊讶的是代码实际上并没有记录这个事实。一点点摆弄是一件美妙的事情,但它看起来很随意。

关于c++ - 位图行大小计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5767350/

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