Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;每像素位图位 我试图理解C++中基于原始数据构建BMP,我有几个问题。_C++_Windows_Winapi_Bitmap_Bmp - Fatal编程技术网

C++;每像素位图位 我试图理解C++中基于原始数据构建BMP,我有几个问题。

C++;每像素位图位 我试图理解C++中基于原始数据构建BMP,我有几个问题。,c++,windows,winapi,bitmap,bmp,C++,Windows,Winapi,Bitmap,Bmp,我的bmp可以是黑白的,所以我认为在每像素位字段中,我应该使用1。然而,在许多指南中,我看到填充字段添加了位数以保持32位对齐,这意味着我的bmp将与每像素24位的bmp具有相同的文件大小 这种理解正确吗?或者在某种程度上,每像素1位是否小于24、32等 谢谢单色位图也对齐了,但它们不会占用像24/32 bpp位图那样多的空间 一行5像素宽的24位位图将占用16个字节:像素为5*3=15,填充为1字节 一行5像素宽的32位位图将占用20个字节:像素为5*4=20,无需填充 一行5像素宽的单色位

我的bmp可以是黑白的,所以我认为在每像素位字段中,我应该使用1。然而,在许多指南中,我看到填充字段添加了位数以保持32位对齐,这意味着我的bmp将与每像素24位的bmp具有相同的文件大小

这种理解正确吗?或者在某种程度上,每像素1位是否小于24、32等


谢谢

单色位图也对齐了,但它们不会占用像24/32 bpp位图那样多的空间

  • 一行5像素宽的24位位图将占用16个字节:像素为5*3=15,填充为1字节
  • 一行5像素宽的32位位图将占用20个字节:像素为5*4=20,无需填充
  • 一行5像素宽的单色位图将占用4个字节:1个字节用于像素(不可能使用少于一个字节,因此占用整个字节,但不使用其8位中的3位),以及3个字节的填充

因此,单色位图当然比24位位图小。

上面已经给出了答案(位图行对齐/填充到32位边界),但是如果您需要更多信息,您可能需要阅读“DIB头”部分-它详细解释了这一点

每个扫描线都是DWORD对齐的。扫描线被缓冲以对齐;缓冲不一定是0

扫描线倒置存储,内存中的第一次扫描(扫描0)是图像中最底部的扫描。(参见图1。)这是演示管理器兼容性的另一个工件。GDI在Set和Get操作期间自动反转图像。图1。(显示内存和屏幕表示的嵌入式图像。)


填充是每扫描线,而不是每像素。