位图行大小计算
bitmap row size calculation
我发现这个源代码工作得很好,我只是想问一下我没有得到的这段代码:
//calculate total size of RGBQUAD scanlines (DWORD aligned)
bih.biSizeImage = (((bih.biWidth * 3) + 3) & 0xFFFC) * bih.biHeight ;
我明白为什么有"*3",但不要得到"+3"和位与FFFC十六进制。有人能解释一下他为什么这样计算图像的大小吗?
谢谢
如果您对不同的值进行尝试,您将看到它实际上迫使(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 / C++ 移位/偏移/向左或向右移动位图?
- 如何在快板的屏幕中显示子位图的绘制?
- CreateDIBSection为同一图像返回不一致的位图位值
- C++ 位图中的 ttc 字体
- 使用 GDI+ 旋转位图,然后转换为 HDC
- 难以从 CImageList 设置菜单项位图
- 如何将位图拉伸到父面板(wxWidgets 自定义)
- 如何使用 freetype2 访问单色位图中的像素状态
- 将位图 (bmp) 转换为具有透明度的 png (Windows c++)
- 安卓工作室 |CPP 文件错误错误: 位图库中对"AndroidBitmap_unlockPixels"的未定义引用
- 位图到垫子/2D 数组
- Gdiplus位图没有Alpha通道
- 如何从路径字符串加载Gdiplus::位图
- 在C++中使用Gdiplus创建透明位图
- 用C++压缩内存中的位图
- C++gdi::内存中的位图到PNG图像
- LoadImage 函数不适用于 ImageMagick 创建的位图图像
- 如何计算位图大小
- 使用 BITMAP 计算位图的内存使用情况
- 位图行大小计算