下面是获取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. 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行??
解决方案 »
- 高分求助一个C++写XML编码的问题
- 如何用Dev-CPP或VC++编译http://sourceforge.net/projects/cchess
- 关于系统进程的问题
- 如何在线程的全局函数中访问对话框中的共有变量
- 怎么用ADO将excel导入到sql server里?
- @@@@@@@@@@@@@@@@@@@@如何调用自已写的dll?
- 请问那有midi文件格式?
- 请问在VC编程里,如何在多线程函数中动态的调用进程中的变量?我用指针传递出现非法操作!
- 为什么在vc中#include <sysmets.h>会出错
- 帮帮我呀
- ADO操作数据库时,如何修改指定字段记录里的值???
- 關於(char*)(_bstr_t)的類型的比較,如何才是正確的
(nWidth*byBitCount+31)>>5<<2
(nWidth + 3) & ~3;
1。得出总的每行bit数。
2。除32(>>5)得到4byts的倍数.+31的原因是哪怕多了一个bit也要新的4byte.
3。重新乘4(<<2).获得总的bytes数。
同上楼的算法
(nWidth*byBitCount+31)>>5<<2
----------------------------------
不要以为自己的代码有多么高的技巧。 你这个简直没有可读性。lz 代码里那样的写法是非常清楚的。再说,你这代码在这里能得到多少性能上的好处?