下面是获取BMP图象每行宽度(以字节为单位)的一个函数
1.   DWORD CDib::GetDibWidthBytes(int nWidth, BYTE byBitCount)
2.   {
3.       DWORD dwWidthBytes = (DWORD)nWidth;
4.    if(byBitCount == 1)dwWidthBytes = (nWidth+7)/8;
5.       else if(byBitCount == 4)dwWidthBytes = (nWidth+1)/2;
6.       else if(byBitCount == 24)dwWidthBytes = 3*nWidth;
7.
8. while(dwWidthBytes&3)dwWidthBytes++;  //????
9. return dwWidthBytes;
10.  }
请问为什么要加第8行??

解决方案 »

  1.   

    对齐, BMP图像,每行字节数应该是4的倍数.
      

  2.   

    这是我见过最差的方法了
    (nWidth*byBitCount+31)>>5<<2
      

  3.   

    楼上这位仁兄buggycode能不能解释一下你的算法
      

  4.   

    8位图片也可以这样:
    (nWidth + 3) & ~3;
      

  5.   

    我的算法是。
    1。得出总的每行bit数。
    2。除32(>>5)得到4byts的倍数.+31的原因是哪怕多了一个bit也要新的4byte.
    3。重新乘4(<<2).获得总的bytes数。
      

  6.   

    (nWidth*byBitCount) + 31) / 32 * 4 
    同上楼的算法
      

  7.   

    这是我见过最差的方法了
    (nWidth*byBitCount+31)>>5<<2
    ----------------------------------
    不要以为自己的代码有多么高的技巧。 你这个简直没有可读性。lz 代码里那样的写法是非常清楚的。再说,你这代码在这里能得到多少性能上的好处?