C++ bmWidthBytes意外大小(单色位图)

C++ bmWidthBytes意外大小(单色位图),c++,bitmap,mfc,C++,Bitmap,Mfc,我在位图结构中看到bmWidthByte参数的值略大于预期值。位图结构的MSDN网站显示了结构中的值,以及每个参数的一些附加信息。以下是为bmWidthBytes提供的详细信息: bmWidthBytes-指定每个光栅行中的字节数。该值必须为偶数,因为图形设备接口GDI假定位图的位值构成一个2字节整数值的数组。换句话说,bmWidthBytes*8必须是16的下一个倍数,大于或等于当bmWidth成员乘以bmBitsPixel成员时获得的值 我的结构具有以下值: bmType=0、bmWidth

我在位图结构中看到bmWidthByte参数的值略大于预期值。位图结构的MSDN网站显示了结构中的值,以及每个参数的一些附加信息。以下是为bmWidthBytes提供的详细信息:

bmWidthBytes-指定每个光栅行中的字节数。该值必须为偶数,因为图形设备接口GDI假定位图的位值构成一个2字节整数值的数组。换句话说,bmWidthBytes*8必须是16的下一个倍数,大于或等于当bmWidth成员乘以bmBitsPixel成员时获得的值

我的结构具有以下值: bmType=0、bmWidth=202、bmHeight=105、bmWidthBytes=28、bmPlanes=1和bmBitsPixel=1

我认为计算bmWidthBytes的方法是将bmWidth除以16,四舍五入到最接近的整数,然后乘以16。在这一点上,我将得到位的总数,所以除以8应该等于字节数


然而,对于我的价值观,这给了我26分,比我看到的28分少了两分。如果有人能指出我遗漏的任何内容,我将不胜感激。

我认为文档不正确-宽度必须是4字节的倍数,而不是2的倍数。永远都是这样。我使用的公式是bmWidth*bmBitsPixel+31/32*4。请问您是如何获得位图的?这可能是设备相关位图和DIB之间的区别。马克:我使用的是CreateDIBSection,所以它是DIB而不是DDB。还有,你知道“永远”有多长吗?我正在一台非常古老的机器win 2000上工作,它有一个WinCE的遗留程序。在Win2000出现之前,我想它已经存在了很久了。我不记得在哪里有记录。