C++ 位图每像素位
Posted
技术标签:
【中文标题】C++ 位图每像素位【英文标题】:C++ Bitmap Bit per pixel 【发布时间】:2011-10-22 12:54:34 【问题描述】:我正在尝试了解如何在 c++ 中基于原始数据构建 bmp,但我有几个问题。
我的 bmp 可以是黑白的,所以我认为在每像素位字段中我应该使用 1。但是在很多指南中,我看到填充字段添加了位数以保持 32 位对齐,这意味着我的 bmp 将与每像素 24 位 bmp 的文件大小相同。
这种理解是否正确,或者在某种程度上是每像素 1 位小于 24、32 等?
谢谢
【问题讨论】:
填充是每个扫描线,而不是每个像素。 【参考方案1】:单色位图也可以对齐,但它们不会像 24/32-bpp 那样占用太多空间。
一行 5 像素宽的 24 位位图将占用 16 个字节:5*3=15 像素,1 字节填充。 一行 5 像素宽的 32 位位图将占用 20 个字节:5*4=20 像素,无需填充。 一行 5 像素宽的单色位图将占用 4 个字节:1 个字节用于像素(不能使用小于一个字节,因此占用整个字节,但不使用 8 位中的 3 个),以及3 个字节的填充。因此,单色位图当然会小于 24 位。
【讨论】:
【参考方案2】:上面已经给出了答案(位图行对齐/填充到 32 位边界),但是如果您想了解更多信息,您可能需要阅读 DIBs and Their Uses,“DIB 标头”部分 - 它在详细。
每条扫描线都是双字对齐的。扫描线被缓冲对齐;缓冲不一定是0。
扫描线倒置存储,内存中的第一次扫描(扫描 0)是图像中最底部的扫描。 (参见图 1。)这是 Presentation Manager 兼容性的另一个产物。 GDI 在 Set 和 Get 操作期间自动反转图像。图 1.(显示内存和屏幕表示的嵌入式图像。)
【讨论】:
以上是关于C++ 位图每像素位的主要内容,如果未能解决你的问题,请参考以下文章