大家来看下,MFC小问题::位图每行的象素

来源:百度知道 编辑:UC知道 时间:2024/05/17 00:20:19
inline DWORD CDib::BytesPerLine()
{
DWORD bytes_per_line ;
bytes_per_line = ( DibInfo->bmiHeader.biWidth * GetBitsPerPixel() + 7 ) / 8 ;
bytes_per_line = ( bytes_per_line + 3 ) / 4 ;
return bytes_per_line * 4 ;
}

bytes_per_line 是每行的字节数
我觉得bytes_per_line = 每行象素数 * 每象素字节数
为什么还要 + 7 / 8; 再 + 3 / 4
我不太懂作者的意思
高手帮下我,谢谢

bytes_per_line = ( DibInfo->bmiHeader.biWidth * GetBitsPerPixel() + 7 ) / 8 ;
这一语句:DibInfo->bmiHeader.biWidth * GetBitsPerPixel() 是每行的位数(bits,非bytes),位数/8就是字节数。%8有余数的话那么实际字节数还应+1,所以+7再/8就能保证正好是所需的字节数。
bytes_per_line = ( bytes_per_line + 3 ) / 4 ;
这一语句,+3和上一句同理,4/是因为32位系统实际在分配内存时是以4bytes为单位分配的,所以这句是计算应该分配几个4字节内存单位。
最后的return语句*4就是实际的字节数。