C++ 位图的正确步幅公式

C++ 位图的正确步幅公式,c++,bitmap,stride,C++,Bitmap,Stride,计算表面跨距 在未压缩位图中,步幅为 从一行像素开始所需的字节数 到下一行的开头 以上所说的都是出自《圣经》,绝对有道理 同一站点给出了以下公式来计算步幅: 对于未压缩的RGB格式,最小跨距始终为图像 以字节为单位的宽度,四舍五入到最接近的DWORD。你可以使用 计算步幅的公式如下: 步幅=(((双宽度*双比特计数)+31)和~31)>>3) 假设图像的宽度为600,高度为800,宽度为1bpp 我预计步幅为600/8=75。。。但是上面的公式给了我76分 我使用了(w+7)/8,得到了预期的7

计算表面跨距

在未压缩位图中,步幅为 从一行像素开始所需的字节数 到下一行的开头

以上所说的都是出自《圣经》,绝对有道理

同一站点给出了以下公式来计算步幅:

对于未压缩的RGB格式,最小跨距始终为图像 以字节为单位的宽度,四舍五入到最接近的DWORD。你可以使用 计算步幅的公式如下:

步幅=(((双宽度*双比特计数)+31)和~31)>>3)

假设图像的宽度为600,高度为800,宽度为1bpp

我预计步幅为600/8=75。。。但是上面的公式给了我76分

我使用了
(w+7)/8
,得到了预期的75


仍然看到上面来自微软的公式让我充满怀疑——这个公式正确吗?

75没有四舍五入到最接近的DWORD。DWORD每个为4字节。76是4的次高倍数


该公式是正确的(在除法得到最终字节计数之前,它将四舍五入到下一个位的DWORD)。您似乎只是四舍五入到最接近的字节,这不是一回事。

谢谢!我没有意识到!